使用通过移动视界估计修改的参数进行矩阵运算

问题描述

我最近开始尝试使用GEKKO进行移动视界估计。我指定的操作变量用于模型中的热平衡方程,并且模型中的矩阵运算存在一些问题。

示例代码:

from gekko import GEKKO
import numpy as np

#creating a sample array of input values
nt = 51
u_meas = np.zeros(nt)
u_meas[3:10] = 1.0
u_meas[10:20] = 2.0
u_meas[20:40] = 0.5
u_meas[40:] = 3.0

p = GEKKO(remote=False)
p.time = np.linspace(0,10,nt)

n = 1 #process model order

#designating u as my input,and that I'm going to be using these measurements to estimate my parameters with MHE
p.u = p.MV(value=u_meas)
p.u.FSTATUS=1

#parameters I'm looking to modulate
p.K = p.FV(value=1,lb = 1,ub = 3) #gain
p.tau = p.FV(value=5,ub = 10) #time constant

p.x = [p.Intermediate(p.u)]

#constants within the model that do not change
X_O2 = 0.5
X_SiO2 = 0.25
X_N2 = 0.1
m_feed = 100

#creating an array with my feed separated into components. This creates a 1D array with the individual feed streams of my components. 
mdot_F_i = (np.tile(m_feed,3)*np.array([X_O2,X_SiO2,X_N2])

#at this point,I want to add my MV values to the end of my component feed array for later heat and mass balance equations. Normally,in my previous model without MHE,I would put

mdot_c_i = np.concatenate(mdot_F_i,x,(other MV variables after))

但是,现在u是GEKKO中的指定MV,而不是设置值,我在mdot_c_i行收到一个错误,该错误说索引0处的数组具有1维,索引1处的数组具有2维。

我猜我必须将mdot_c_i指定为Gekko中的中间变量。我尝试了几种不同的变体,交替地将mdot_c_i指定为中间变量,并尝试仅使用MV的值;但是,我不断收到该错误。

有人遇到类似的问题吗?

谢谢!

解决方法

您可以使用np.append()而不是np.concatenate()来解决此问题。尝试类似的东西:

mdot_c_i = np.append(mdot_F_i,p.u)

如果您想尝试一下,这里是一个最小而完整的示例。

import numpy as np
from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Array(m.Var,3,lb=-10,ub=10)
y = m.Var(5,lb=-5,ub=5)
z = np.append(x,y)
m.Minimize(np.dot([1,1,-1,1],z))
m.solve(disp=False)
print([zi.value[0] for zi in z])
# solution: [-10.0,-10.0,10.0,-5.0]

Gekko变量需要存储为对象,而不是数字值。该错误可能是因为np.concatenate()函数试图访问Gekko操纵变量数据p.u.value的长度来连接这些值,而不是将p.u连接为对象。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...