Режим 9 невозможен GEKKO

Я успешно выполнил эту симуляцию в режиме 6, это модель микроводорослей. Хочу сравнить с режимом 9. Но режим 9 всегда недопустим. Любое предложение? О как можно исправить режим 9? Я пробую разные начальные условия, но у меня не получается

#%% Bennatia Model Dynamic Optimization 
#v 2.1
from gekko import GEKKO
import numpy as np

#Initialize model
m = GEKKO (remote=True)

#% Parameters 
mu_   = m.Param(value=2, name="u");
rho_m = m.Param(value=9.3, name="rhom");
K_Q   = m.Param(value=1.8, name="KQ");
K_s   = m.Param(value=0.105, name="KS");
S_in  = m.Param(value=100, name="S_in");
K_sI  = m.Param(value=150, name="KsI");
K_iI  = m.Param(value=2000, name="KiI");
mu_I  = m.Param(value=0.6461, name="muI");


# Define Dilution rate as Manipulated variable
D = m.MV(value=0.1, lb=0.001, ub=2);
# Manipulated variable
D.STATUS = 1 # allow optimizer to change
D.DCOST = 0.1 # smooth out D movement
D.DMAX = 0.1   # slow down D
#%% Variables
# Constrains Equations
# x > 0, Q < 8.9969 , Q > 1.8, s > 0, s < 120 
x = m.Var(value=0.2, lb=0 , ub=100, name ='x');
Q = m.Var(value=1.8, lb=1.8 , ub=8.9969, name = 'Q');
s = m.Var(value=0.01, lb=0 , ub=100, name = 's') ;
mu = m.Var(value=0.1, lb=0 , ub=2, name = 'mut');
#time
#t=m.Var(value=0) #for time optimization

tf = 60
nt =15*tf+1
m.time = np.linspace(0,tf,nt)
t = m.Param(value=m.time); # For maximun value

#%% Equations 
# m.Equation(t.dt()  == 1) # For time optimization only
#For implicit form x.dt() Q.dt() s.dt()
m.Equation(mu == mu_*(1 - K_Q/(Q) )*mu_I);
m.Equation(x.dt()  == mu*x - D*x);
m.Equation(Q.dt()  == rho_m*((s)/ ((s)+ K_s)) - mu*Q);
m.Equation(s.dt()  == (S_in - s)*D - rho_m*((s)/ ((s)+ K_s)) * x);

m.Maximize(D*x)
#%% Solver options

m.options.SENSITIVITY = 1   # sensitivity analysis
m.options.IMODE = 9 # Mode 6 is working
m.solve(disp=True,GUI=True)
m.solve();
print(m.path)

Я заглянул в файл несовместимости, но не смог понять проблему. Цените любое руководство.


person ldsangr3    schedule 16.04.2021    source источник


Ответы (2)


В Gekko есть 9 режимов решения, которые управляются с помощью IMODE:

APMonitor Gekko IMODE

  1. Стационарное моделирование (SS)
  2. Обновление параметров модели (MPU)
  3. Оптимизация в реальном времени (RTO)
  4. Динамическое моделирование (SIM)
  5. Оценка подвижного горизонта (EST)
  6. Нелинейное управление / динамическая оптимизация (CTL)
  7. Последовательное динамическое моделирование (SQS)
  8. Последовательная динамическая оценка (SQE)
  9. Последовательная динамическая оптимизация (SQO)

Режимы 4 и 7, 5 и 8, 6 и 9 должны давать одно и то же решение, но используют другой метод решения. Режимы 6 и 9 представляют собой одновременный и гибридный последовательный подход к решению. В общем, я не рекомендую IMODE=8 и IMODE=9, потому что они часто не могут найти решение. Если вы получаете решение с IMODE=6, вы можете либо остановиться на этом, либо использовать решение для инициализации решения для IMODE=9.

person John Hedengren    schedule 19.04.2021

Спасибо за ваш ответ, где я могу найти что-то, связанное с этим гибридным последовательным методом, я просто хочу обосновать, почему часто терпят неудачу.

person ldsangr3    schedule 21.04.2021