Gekko PRED_HOR y CTRL_HOR vs m.time
Estoy tratando de implementar un controlador MPC en línea y estoy un poco confundido acerca de qué hace exactamente m.time.
Con m.options.IMODE = 6 #MPCy m.options.REQCTRLMODE=3trato de definir los horizontes de predicción y control:
m.options.CTRL_HOR=10
m.options.CTRL_TIME=0.05
m.options.PRED_HOR=10
m.options.PRED_TIME=0.05
Si lo entiendo bien, ctrl_hory pred_horestablece cuántos pasos de tiempo futuros calculamos y pred_timey ctrl_timedefine cuánto tiempo es un paso de tiempo. Pero el problema es que el controlador arroja un error si no defino m.time, pero ¿qué hace exactamente y por qué no es suficiente establecer los horizontes ctrl y pred con los respectivos pasos de tiempo?
Respuestas
Gekko usa m.timepor defecto en lugar de CTRL_HORy PRED_HOR. Puede definir un horizonte de control / predicción equivalente en Gekko con:
import numpy as np
from gekko import GEKKO
m = GEKKO()
m.time = np.linspace(0,0.05,11)
Las propiedades CTRL_HORy PRED_HORse utilizan opcionalmente cuando CSV_READ=0. Sin embargo, Gekko usa el archivo CSV para insertar información sobre valores predeterminados para parámetros y variables, por lo que no recomiendo que lo desactive. El uso m.timetambién es más flexible porque puede tener un horizonte de control / predicción no uniforme, como:
m.time = [0,0.05,0.1,0.2,0.5,1.0]
Esto ayuda a tener una resolución fina al principio y luego pasos más grandes para determinar los planes de movimiento de estado estable. Aquí hay una práctica aplicación TCLab MPC con datos en tiempo real.