这个问题的主要目的是弄清楚如何获得一个似乎是‘be操作人员’的价值。我是在gekko环境中新来的,我可能不够具体,但我会尽我所能。
这里是一个示例代码
from gekko import GEKKO
from numpy import triu_indices, diag_indices, full
#Create a gekko model
model=GEKKO()
n=2
idx=triu_indices(n,1)
#Create a 1xn array
T=model.Array(model.CV, n)
#Create a nxn array
R = full((n, n), 0, dtype=object)
#Fill only the upper and lower triangle of the R matrix
if n>1:
R[idx] = model.FV(name='R')
R[idx[::-1]] = R[idx]
#Same as R array
Q = full((n, n), 0, dtype=object)
Q[diag_indices(n)] = model.Const(0)
if n>1:
Q[idx] = (T[idx[1]] - T[idx[0]]) / R[idx]
Q[idx[::-1]] = -Q[idx]
#Assign values to T and R
T[1].VALUE,T[0].VALUE=25,12
R[0,1].VALUE=4
print(R)
model.solve(disp=False)
print(R)
print(Q[0,1].VALUE)
print(T[1].MODEL,T[0].MODEL,R[0,1].VALUE)
print(type(R[0,1]),
type(Q[0,1]))首先,我认为应该说这段代码来自一个更大的模拟动态系统的代码,没有一个目标函数,因此不是一个优化问题。
这里的问题是,我无法获得Q数组的任何项的值。就我而言,属性.VALUE或.MODEL将返回gekko变量的值。然而,它似乎不适用于变量Q0,1,它应该等于操作(T1-T)/R0,1或(25-12)/4的结果。当使用Q0、1请求该值时,value将返回0,但这显然不是该操作的结果。我认为该变量的类可能与此有关,当检查类型(Q0,1)时,它返回一个GK.Operator。我不知道什么是真正的GK.Operator,但我猜使用.VALUE或.MODEL属性是行不通的。对我来说,获得Q值是非常重要的。
此外,在求解模型之前,数组R还有另一个问题,即数组应该是什么。然而,在对模型进行求解之后,该数组的一些项本身就变成了数组。
我希望你能帮助我理解这些疑虑。感谢您的阅读。
发布于 2022-08-28 02:13:13
Q值需要是Gekko Var、Param或Intermediate才能使用.value。下面是代码的简化版本:
from gekko import GEKKO
from numpy import triu_indices, diag_indices, full
#Create a gekko model
model=GEKKO()
#Create a 1xn array
T=model.Array(model.Var,2)
#Create a nxn array
R = full((2,2), 0, dtype=object)
#Fill only the upper and lower triangle of the R matrix
R[0,1] = model.FV(name='R')
R[1,0] = R[0,1]
#Same as R array
Q = full((2,2), 0, dtype=object)
Q[0,0] = 0
Q[1,1] = 0
Q[0,1] = model.Intermediate((T[1] - T[0]) / R[0,1])
Q[1,0] = model.Intermediate(-Q[0,1])
#Assign values to T and R
T[1].VALUE,T[0].VALUE=25,12
R[0,1].VALUE=4
print('R before solve: ',R)
model.solve(disp=False)
print('R after solve: ',R)
print('Q[0,1]:',Q[0,1].value)
print('Q[1,0]:',Q[1,0].value)
print('T[1],T[0]:',T[1].value,T[0].value)
print('R[0,1] type:',type(R[0,1]))
print('Q[0,1] type:',type(Q[0,1]))结果:
R before solve: [[0 4]
[4 0]]
R after solve: [[0 [4.0]]
[[4.0] 0]]
Q[0,1]: [3.25]
Q[1,0]: [-3.25]
T[1],T[0]: [25.0] [12.0]
R[0,1] type: <class 'gekko.gk_parameter.GK_FV'>
Q[0,1] type: <class 'gekko.gk_operators.GK_Intermediate'>https://stackoverflow.com/questions/73498810
复制相似问题