Gekko PRED_HOR y CTRL_HOR vs m.time

Sep 21 2020

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

2 JohnHedengren Sep 21 2020 at 22:16

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.