Есть ли способ обновить MPC с помощью MHE в том же классе Gekko? - PullRequest
6 голосов
/ 10 октября 2019

В настоящее время я использую MPC, чтобы нагреватель TCLab достиг определенной заданной температуры. Я пытаюсь, чтобы MHE обновлял определенные значения параметров каждые 50 секунд. У меня есть предыдущая модель MPC, которая работала потрясающе, и я попытался добавить деталь в свой основной цикл, в которой он переключается для улучшения определенных значений, а затем снова переключается в режим MPC. Я видел, что другие люди, занимающиеся той же проблемой, создали класс gekko для MPC, а также для MHE, а затем заставили их работать вместе, но есть ли способ добавить часть в мой текущий цикл MPC, которая позволитMHE, чтобы обновить определенные значения и затем переключиться обратно в MPC?

Вот код, который я добавил в свой цикл, чтобы он обновлял переменные, но он не обновляет мои значения

 if i%50 == 0 or i == 0:

            m.options.IMODE = 5
            Q1.STATUS = 0
            Q1.FSTATUS = 1
            Q2.STATUS = 0
            Q2.FSTATUS = 1

            U.FSTATUS = 1
            α1.FSTATUS = 1
            α2.FSTATUS = 1
            τ.FSTATUS = 1

            m.solve(disp = False)

            Q1.STATUS = 1
            Q1.FSTATUS = 1
            Q2.STATUS = 1
            Q2.FSTATUS = 1


            m.options.IMODE = 6
            U.FSTATUS = 0
            α1.FSTATUS = 0
            α2.FSTATUS = 0
            τ.FSTATUS = 0

1 Ответ

4 голосов
/ 14 октября 2019

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. Для облегчения этого модель может быть построена в цикле ( см. Полный пример ), поэтому переменные и уравнения определяются только один раз.

MHE with 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.

...