Гекко PRED_HOR и CTRL_HOR против m.time
Я пытаюсь реализовать онлайн-контроллер MPC, и я немного не понимаю, что именно делает m.time.
С помощью m.options.IMODE = 6 #MPCи m.options.REQCTRLMODE=3я пытаюсь определить горизонты прогнозирования и контроля:
m.options.CTRL_HOR=10
m.options.CTRL_TIME=0.05
m.options.PRED_HOR=10
m.options.PRED_TIME=0.05
Если я правильно понимаю, ctrl_horи pred_horустанавливает, сколько будущих временных шагов мы рассчитываем, а pred_timeи ctrl_timeопределяет, как долго это один временной шаг. Но проблема в том, что контроллер выдает ошибку, если я не определяю m.time, но что именно он делает и почему этого недостаточно, чтобы установить горизонты ctrl и pred с соответствующими временными шагами?
Ответы
Gekko m.timeпо умолчанию использует вместо CTRL_HORи PRED_HOR. Вы можете определить эквивалентный горизонт управления / прогнозирования в Gekko с помощью:
import numpy as np
from gekko import GEKKO
m = GEKKO()
m.time = np.linspace(0,0.05,11)
CTRL_HORИ PRED_HORсвойства необязательно используют , когда CSV_READ=0. Однако Gekko использует файл CSV для вставки информации о значениях по умолчанию для параметров и переменных, поэтому я не рекомендую вам отключать его. Использование m.timeтакже более гибкое, потому что у вас может быть неоднородный горизонт управления / прогнозирования, например:
m.time = [0,0.05,0.1,0.2,0.5,1.0]
Это помогает получить точное разрешение вначале, а затем более крупные шаги для определения устойчивых планов перемещения. Вот практическое приложение TCLab MPC с данными в реальном времени.