Gekko PRED_HOR e CTRL_HOR vs m.time
Estou tentando implementar um controlador MPC online e estou um pouco confuso sobre o que exatamente o m.time faz.
Com m.options.IMODE = 6 #MPCe m.options.REQCTRLMODE=3, tento definir os horizontes de previsão e controle:
m.options.CTRL_HOR=10
m.options.CTRL_TIME=0.05
m.options.PRED_HOR=10
m.options.PRED_TIME=0.05
Se entendi direito o ctrl_hore pred_horconjuntos quantas futuro Timesteps calculamos eo pred_timee ctrl_timedefine quanto tempo é uma iteração. Mas o problema é que o controlador gera um erro se eu não definir m.time, mas o que exatamente ele faz e por que não é suficiente definir os horizontes ctrl e pred com os respectivos timesteps?
Respostas
Gekko usa m.timepor padrão em vez de CTRL_HORe PRED_HOR. Você pode definir um horizonte de controle / previsão equivalente no Gekko com:
import numpy as np
from gekko import GEKKO
m = GEKKO()
m.time = np.linspace(0,0.05,11)
As propriedades CTRL_HORe PRED_HORsão usadas opcionalmente quando CSV_READ=0. No entanto, Gekko usa o arquivo CSV para inserir informações sobre valores padrão para parâmetros e variáveis, portanto, não recomendo que você o desligue. Usar m.timetambém é mais flexível porque você pode ter um horizonte de controle / previsão não uniforme, como:
m.time = [0,0.05,0.1,0.2,0.5,1.0]
Isso ajuda a ter uma resolução precisa no início e, em seguida, etapas maiores para determinar os planos de movimentação em estado estacionário. Aqui está um aplicativo prático TCLab MPC com dados em tempo real.