Гекко PRED_HOR и CTRL_HOR против m.time

Sep 21 2020

Я пытаюсь реализовать онлайн-контроллер 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 с соответствующими временными шагами?

Ответы

2 JohnHedengren Sep 21 2020 at 22:16

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 с данными в реальном времени.