Gekko облегчает передачу информации между MHE и MPC, но объединение их в одно приложение не является актуальной функцией. Файлы горячего старта est.t0
(MHE) и ctl.t0
(MPC) хранят предыдущее решение и используют его для инициализации следующего решения. Файл est.xfer
(MHE) является файлом передачи для обновления начальных условий и параметров из приложения MHE. Вы можете просмотреть эти файлы, открыв папку запуска, если remote=False
(локальное решение):
mhe.open_folder()
mpc.open_folder()
Почему одиночное приложение бросает вызов
Gekko также используетCSV-файл для передачи значений и обновления приложения перед следующей командой m.solve()
. Каждая переменная x
в Gekko имеет только одну x.value
. Если у вас есть приложение MHE и MPC, вам нужно будет управлять тем, как x.value
и все опции перезагружаются для всех переменных перед каждой из команд m.solve()
. Управлять этим в скрипте было бы очень утомительно, даже с функцией deepcopy()
.
Создание моделей MHE и MPC в цикле
Более простой способсоздать две отдельные модели, которые используются для MHE и MPC. Для облегчения этого модель может быть построена в цикле ( см. Полный пример ), поэтому переменные и уравнения определяются только один раз.
# initialize MHE and MPC
mhe = GEKKO(name='tclab-mhe')
mpc = GEKKO(name='tclab-mpc')
# create 2 models (MHE and MPC) in loop
for m in [mhe,mpc]:
# Adjustable Parameters
# heat transfer (W/m2-K)
m.U = m.FV(value=2.76,lb=1.0,ub=5.0)
# Semi-fundamental correlations (energy balances)
m.Equation(mass*Cp*m.TH1.dt() == m.U*A*(m.TaK-m.T1i) \
+ eps * sigma * A * (m.TaK**4 - m.T1i**4) \
+ m.Q_C12 + m.Q_R12 \
+ m.alpha1 * m.Q1)
# Empirical correlations (lag equations to emulate conduction)
m.Equation(m.tau * m.TC1.dt() == -m.TC1 + m.TH1)
После определения уравнений приложения MHE и MPC могут быть настроены с различными параметрами, специфичными для этого режима.
Конфигурация для конкретного приложения
# ------------------------------
# Configure MHE
mhe.time = np.linspace(0,120,31)
mhe.options.IMODE = 5 # MHE
# FV tuning
mhe.U.STATUS = 1
mhe.Ta.STATUS = 0
# ------------------------------
# Configure MPC
mpc.time = [0,4,8,12,15,20,25,30,35,40,50,60,70,80,90]
# FV tuning
mpc.U.STATUS = 0
mpc.Ta.STATUS = 0
mpc.U.FSTATUS = 1
mpc.Ta.FSTATUS = 1
# Global Options
mpc.options.IMODE = 6 # MPC
Если вы хотите легко переносить значения между приложениями MHE и MPC на каждом цикле, то одним из вариантов является копирование файла est.xfer
из папки MHE mhe.path
в папку MPC mpc.path
. При этом будут использоваться обновленные состояния и параметры из приложения MHE в приложении MPC.