Gekko PRED_HOR e CTRL_HOR contro m.time

Sep 21 2020

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

2 JohnHedengren Sep 21 2020 at 22:16

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.