Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用GEKKO MHE时方程定义错误(方程没有等式或不等式)_Python_Gekko - Fatal编程技术网

Python 使用GEKKO MHE时方程定义错误(方程没有等式或不等式)

Python 使用GEKKO MHE时方程定义错误(方程没有等式或不等式),python,gekko,Python,Gekko,我目前正在尝试GEKKO MHE模式。我在模型中有两个指定的操纵变量和控制变量,还有一个参数我希望通过MHE来估计。当我当前运行模型时,我得到一个方程定义错误,表示 没有等式(=)或不等式(>,的方程在Gekko方程中使用Numpy数组或Pandas数据帧可能会出现问题,例如: #不正确 df_c=pd.read_csv('Values_c.csv',index_col=0) m、 方程(m.C1_in==df_c) 您可以通过创建输入参数来解决此错误,例如: #正确 df_c=pd.read

我目前正在尝试GEKKO MHE模式。我在模型中有两个指定的操纵变量和控制变量,还有一个参数我希望通过MHE来估计。当我当前运行模型时,我得到一个方程定义错误,表示


没有等式(=)或不等式(>,的方程在Gekko方程中使用Numpy数组或Pandas数据帧可能会出现问题,例如:

#不正确
df_c=pd.read_csv('Values_c.csv',index_col=0)
m、 方程(m.C1_in==df_c)
您可以通过创建输入参数来解决此错误,例如:

#正确
df_c=pd.read_csv('Values_c.csv',index_col=0)
df_c=m.Param(df_c)
m、 方程(m.C1_in==df_c)
我没有你的
.npy
文件,因此无法再现你的错误。但是,我确实用长度
n
的随机数组输入替换了这些文件,以获得成功的解决方案。还有一些参数,例如
M_s
未定义,因此我包含了一些示例值。你对
MVs
CVs
的定义很好。错误可能是由于在方程式中使用其他输入参数之前,需要将其转换为Gekko类型的参数

从gekko导入gekko
将numpy作为np导入
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
n=17
m=GEKKO(远程=False)
m、 时间=np.linspace(0,8,n)
c1_in_arr=np.rand.rand(n)
c2_in_arr=np.rand.rand(n)
V1_测量值=np.随机数.兰德(n)
V2_测量值=np.随机数.兰德(n)
#mmanipulled变量,为它们输入数组
m、 C1英寸=毫伏(值=C1英寸)
m、 C2_in=m.MV(值=C2_in_arr)
#估计变量,在其上下界输入
m、 C1_eff=m.FV(值=0.98,磅=0.95,磅=1.0)
#受控变量,输入它们的测量值
m、 V1=m.CV(测量值=V1_)
m、 V2=m.CV(测量值=V2_)
mdot_1=m.Var()
mdot_2=m.Var()
m、 方程(mdot_1==1.52*m.C1_eff*m.C1_in)
m、 方程(mdot_2==-0.668*mdot_1+1.33*m.C1_eff*m.C2_in)
Hhat_C1=m.Var()
Hhat_C2=m.Var()
M_M=125
M_s=125
mdot_m=75
mdot_s=46
m、 方程([Hhat_C1==-0.606+0.0057*mdot_1,
Hhat_C2==-3.933+0.00096*mdot_1])
C1_m=m.Var(值=200)
C2_m=m.Var(值=150)
m、 方程([C1_m.dt()==mdot_1-C1_m/m_m*mdot_m,
C2_m.dt()==mdot_2-C2_m/m_s*mdot_s])
m、 方程(m.V1==0.8*C1_m/m_m)
m、 方程(m.V2==0.78*C1_m/C2_m)
m、 options.IMODE=5
#将解算器设置设置为MHE
m、 options.EV_TYPE=1
#设置MHE的解算器以计算
#基于绝对误差总和的参数
m、 C1_in.状态=0
m、 C2_in.状态=0
m、 C1_有效状态=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_间隙=0.001
m、 V2.MEAS_间隙=0.001
m、 打开文件夹()
m、 求解(disp=True)
如果存在阻止解算器运行的模型错误或存在成功的解决方案,则不会创建文件
infiasibilities.txt
。使用随机输入值,存在成功的解决方案

----------------------------------------------------------------
APMonitor,版本0.9.2
APMonitor优化套件
----------------------------------------------------------------
---------APM模型尺寸------------
每个时间步骤包含
对象:0
常数:0
变量:11
中间产物:0
连接:0
方程式:8
残差:8
警告:循环1时CV(1)打开,无MVs打开
警告:循环1时CV(2)打开,无MVs打开
状态变量数:417
方程式总数:-416
松弛变量的数量:-0
---------------------------------------
自由度:1
**********************************************
基于内点解算器的动态估计
**********************************************
信息:确切的黑森
******************************************************************************
该程序包含Ipopt,一个用于大规模非线性优化的库。
Ipopt是在Eclipse公共许可证(EPL)下作为开放源代码发布的。
欲了解更多信息,请访问http://projects.coin-or.org/Ipopt
******************************************************************************
这是Ipopt版本3.10.2,运行线性解算器腮腺炎。
等式约束雅可比矩阵中的非零数…:510
不等式约束雅可比矩阵中的非零数:384
拉格朗日黑森函数中的非零数………..:32
变量总数:417
只有下限的变量:192
具有上下限的变量:33
仅具有上界的变量:0
相等约束的总数…………:224
不等式约束总数:192
仅具有下界的不等式约束:192
具有上下界的不等式约束:0
仅具有上界的不等式约束:0
国际热核聚变实验堆目标核反应堆
0 1.4079997e+001 1.20e+002 9.00e+000 0.0 0.00e+000-0.00e+000 0.00e+000 0.00e+000 0
1 2.2358394e+002 1.20e+002 9.95e+000 11.0 1.03e+011-1.05e-010 1.45e-012f 1
2 3.0439837e+004 1.20e+002 2.27e+005 12.1 1.14e+012-2.78e-013 1.89e-011f 1
3.0621616e+006 1.20e+002 2.44e+006 11.4 4.33e+010-1.00e+000 4.98e-008f 1
4 3.0621722e+006 6.66e-001 2.49e+004 4.6 3.93e+000-9.90e-001 1.00e+000f 1
5 3.0609833e+006 1.78e-014 2.55e+002 2.6 1.28e+000-9.90e-001 1.00e+000f 1
6 2.9460876e+006 1.42e-014 2.55e+000 0.6 8.89e+001-9.90e-001 1.00e+000f 1
7.0161757e+005 2.84e-014
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)