Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 3.x 如何在Gekko中实现缺失数据的动态参数估计?_Python 3.x_Differential Equations_Nonlinear Optimization_Gekko - Fatal编程技术网

Python 3.x 如何在Gekko中实现缺失数据的动态参数估计?

Python 3.x 如何在Gekko中实现缺失数据的动态参数估计?,python-3.x,differential-equations,nonlinear-optimization,gekko,Python 3.x,Differential Equations,Nonlinear Optimization,Gekko,我在Gekko中来回地设置了一个动态参数估计 下面是代码,测量值如下所示(在我的系统上,该文件名为measuredalgebroductionrate_30min_18h.csv,并使用;作为分隔符): 0.02083333南30.8306036 0.0416666667 NaN 29.1200832 0.062574.86628.7700549 0.0833333南29.2318865 0.104166667 NaN 30.7727362 0.125 NaN 29.8743804 0.1458

我在Gekko中来回地设置了一个动态参数估计

下面是代码,测量值如下所示(在我的系统上,该文件名为
measuredalgebroductionrate_30min_18h.csv
,并使用
作为分隔符):

0.02083333南30.8306036
0.0416666667 NaN 29.1200832
0.062574.86628.7700549
0.0833333南29.2318865
0.104166667 NaN 30.7727362
0.125 NaN 29.8743804
0.145833333 NaN 29.9923447
0.1666667 NaN 30.9169679
0.1875南28.5956184
0.208333333南27.7361632
0.22916667 NaN 26.6669496
0.25 NaN 27.17477
0.270833333 75.751 23.6270346
0.291666667南23.0646928
0.3125 NaN 23.6442113
0.333南23.089118
0.354166667南22.9101616
0.375 NaN 22.7453854
0.395833333南23.2182759
0.4166667南21.4901903
0.4375 NaN 21.1449899
0.458333333南20.7093537
0.479166667南20.3109086
0.5 NaN 20.6825141
0.52083333南19.199583
0.541666667 NaN 19.6173416
0.5625 NaN 19.5543139
0.583333南20.4501879
0.604166667 NaN 18.7678061
0.625 NaN 18.4629262
0.645833333南18.3730322
0.667 NaN 19.5375442
0.6875 NaN 18.1975297
0.708333333 NaN 18.0370627
0.729166667 NaN 17.5734727
0.75 NaN 18.8632046

到目前为止,一切顺利。假设我在某些时间点(第一列)也有X的测量值(第二列),其余的不可用(因此
NaN
)。 我想调整
k_1
f_1
,使模拟变量和观测变量
X
q_prod
尽可能匹配

这对Gekko可行吗?如果是,怎么做


另一个问题:如果
m.time
的元素多于观测变量的时间点,Gekko就会抛出一个错误。但是,我的
X
Y
的初始值是指
t=0
,而不是
t=0.020833333
。因此,在
m.time=
之后注释掉的部分,见上文。(在
t=0
处的测量值不可用。)Gekko中的初始条件是否像在Matlab中一样引用
m.time
的第一个元素,或者引用
t=0

如果缺少测量值,则可以在目标函数中包含非数值,例如NaN和Gekko忽略该项。下面是一个在
ym
中有一个NaN值的测试用例:

具有NaN数据值的非线性回归

从gekko导入gekko
将numpy作为np导入
将matplotlib.pyplot作为plt导入
xm=np.数组([0,1,2,3,4,5])
ym=np.数组([0.1,0.2,np.nan,0.5,0.8,2.0])
m=GEKKO(远程=False)
x=m.Param(值=xm,name='x')
a=m.FV()
a、 状态=1
y=m.CV(value=ym,name='y')
y、 FSTATUS=1
m、 方程(y==0.1*m.exp(a*x))
m、 options.IMODE=2
m、 options.SOLVER=1
m、 求解(disp=True)
打印('Optimized,a='+str(a.value[0]))
plt.绘图(xm,ym,'bo')
plt.绘图(xm,y.值,'r-')
m、 打开文件夹()
plt.show()
当您使用
m.open_folder()
打开运行文件夹并查看数据文件
gk_model0.csv
,则在
y
值列中存在NaN

y,x
0.1,0
0.2,1
nan,2
0.5,3
0.8,4
2.0,5
这是
IMODE=2
,因此这是一个稳态回归问题,但显示了与动态估计问题相同的情况。对于估算和估算方式,可以使用
m.options.EV_TYPE=1
(默认)或
m.options.EV_TYPE=2
。当测量值为非数值时,从目标函数求和中删除该坏值。以下是具有动态模型的版本:

具有固定初始条件的动态回归

从gekko导入gekko
将numpy作为np导入
将matplotlib.pyplot作为plt导入
xm=np.数组([0,1,2,3,4,5])
ym=np.数组([2.0,1.5,np.nan,2.2,3.0,5.0])
m=GEKKO(远程=False)
m、 时间=xm
a=m.FV(lb=0.1,ub=2.0)
a、 状态=1
y=m.CV(值=ym,名称=y',固定首字母=False)
y、 FSTATUS=1
m、 方程(y.dt()==a*y)
m、 options.IMODE=5
m、 options.SOLVER=1
m、 求解(disp=True)
打印('Optimized,a='+str(a.value[0]))
plt.图(figsize=(6,2))
plt.绘图(xm,ym,'bo',label='Meas')
plt.plot(xm,y.value,'r-',label='Pred')
plt.ylabel('y')
plt.ylim([0,6])
plt.legend()
plt.show()
正如您所观察到的,
m.time
的长度必须与测量值的长度相同。如果缺少值,则可以在数据范围的开头添加一个
np.nan
。默认情况下,Gekko使用
value
属性中指定的第一个值来设置初始条件。如果您不希望Gekko使用该值,请为您的
CV
设置
fixed\u initial=False

具有自由初始条件的动态回归

y=m.CV(value=ym,name=y',固定首字母=False)
y,x
0.1,0
0.2,1
nan,2
0.5,3
0.8,4
2.0,5