问题描述
我目前正在尝试GEKKO MHE模式。我在模型中有两个指定的操纵变量和受控变量,还有一个我希望通过MHE估计的参数。当前运行模型时,出现方程式定义错误,
不包含等式(=)或不等式(>,
模型初始化为:
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
n = 17
m = GEKKO(remote=False)
m.time = np.linspace(0,8,n)
c1_in_arr = np.load('c1_in_arr.npy')
c2_in_arr = np.load('c2_in_arr.npy')
V1_measured = np.load('V1_measured.npy')
V2_measured = np.load('V2_measured.npy')
#mmanipulated variables,feeding in the arrays for them
m.C1_in = m.MV(value=c1_in_arr)
m.C2_in = m.MV(value=c2_in_arr)
#estimated variables,feeding in the upper and lower bounds for them
m.C1_eff = m.FV(value = 0.98,lb = 0.95,ub = 1.0)
#controlled variables,feeding in the measurements for them
m.V1 = m.CV(value=V1_measured)
m.V2 = m.CV(value=V2_measured)
mdot_1 = m.Var()
mdot_2 = m.Var()
m.Equation(mdot_1== 1.52*m.C1_eff*m.C1_in)
m.Equation(mdot_2==-0.668*mdot_1 + 1.33*m.C1_eff*m.C2_in)
df_c = pd.read_csv('Values_C.csv',index_col=0)
Hhat_C1 = m.Var()
Hhat_C1 = m.Var()
M_m = 125
mdot_m = 75
mdot_s = 46
m.Equations([Hhat_C1 == -0.606 + 0.0057 * mdot_1,Hhat_C2 == -3.933 + 0.00096 * mdot_1])
C1_m = m.Var(value = 200)
C2_m = m.Var(value = 150)
m.Equations([C1_m.dt() == mdot_1 - C1_m/M_m*mdot_m,C2_m.dt() == mdot_2 - C2_m/M_s*mdot_s)
m.Equation(m.V1==0.8*C1_m/M_m)
m.Equation(m.V2 == 0.78*C1_m/C2_m)
m.options.IMODE = 5
#setting the solver settings to MHE
m.options.EV_TYPE = 1
#setting the solver for the MHE to calculate the parameters based on the sum of absolute errors
m.C1_in.STATUS = 0
m.C2_in.STATUS = 0
m.SiO2_in.STATUS = 0
m.C1_eff.STATUS = 1
m.V1.STATUS = 1
m.V2.STATUS = 1
m.C1_in.FSTATUS = 1
m.C2_in.FSTATUS = 1
m.C1_eff.FSTATUS = 0
m.V1.FSTATUS = 1
m.V2.FSTATUS = 1
m.C1_eff.DMAX = 1.0
m.V1.MEAS_GAP = 0.001
m.V2.MEAS_GAP = 0.001
m.open_folder()
m.solve(disp = False)
在求解之前打开GEKKO文件夹时,该文件夹中也不存在不可行文件。
将MV和CV初始化为“测量”数组的第一个变量时,该模型可以无错误运行
例如m.C1_in = m.MV(value = c1_in_arr [0])
但是,所提供的参数估计不正确。
我认为此错误可能是由于在模型中对待我的MV和CV的方式造成的。有没有办法查明是哪个方程式导致了此错误,或者是由于MV / CV初始化引起的?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)