Есть ли способ обновить MPC с помощью MHE в том же классе gekko?

В настоящее время я использую 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

person Andrew T    schedule 10.10.2019    source источник


Ответы (1)


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 с 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.

person John Hedengren    schedule 14.10.2019