Gekko PRED_HOR e CTRL_HOR contro m.time
Sto cercando di implementare un controller MPC online e sono un po 'confuso su cosa fa esattamente m.time.
Con m.options.IMODE = 6 #MPCe m.options.REQCTRLMODE=3, cerco di definire gli orizzonti di previsione e controllo:
m.options.CTRL_HOR=10
m.options.CTRL_TIME=0.05
m.options.PRED_HOR=10
m.options.PRED_TIME=0.05
Se ho capito bene il ctrl_hore pred_horimposta quanti passi temporali futuri calcoliamo e il pred_timee ctrl_timedefinisce quanto tempo è un passo temporale. Ma il problema è che il controller genera un errore se non lo definisco m.time, ma cosa fa esattamente e perché non è sufficiente impostare gli orizzonti ctrl e pred con i rispettivi timestep?
Risposte
Gekko utilizza m.timeper impostazione predefinita invece di CTRL_HORe PRED_HOR. È possibile definire un orizzonte di controllo / previsione equivalente in Gekko con:
import numpy as np
from gekko import GEKKO
m = GEKKO()
m.time = np.linspace(0,0.05,11)
Le proprietà CTRL_HORe PRED_HORvengono utilizzate facoltativamente quando CSV_READ=0. Tuttavia, Gekko utilizza il file CSV per inserire informazioni sui valori predefiniti per parametri e variabili, quindi non è consigliabile disattivarlo. L'utilizzo m.timeè anche più flessibile perché puoi avere un orizzonte di controllo / previsione non uniforme come:
m.time = [0,0.05,0.1,0.2,0.5,1.0]
Questo aiuta ad avere la risoluzione fine all'inizio e poi passaggi più grandi per determinare i piani di spostamento a stato stazionario. Ecco una pratica applicazione TCLab MPC con dati in tempo reale.