首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取“GK_Operators”类的值

获取“GK_Operators”类的值
EN

Stack Overflow用户
提问于 2022-08-26 09:23:45
回答 1查看 32关注 0票数 3

这个问题的主要目的是弄清楚如何获得一个似乎是‘be操作人员’的价值。我是在gekko环境中新来的,我可能不够具体,但我会尽我所能。

这里是一个示例代码

代码语言:javascript
复制
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还有另一个问题,即数组应该是什么。然而,在对模型进行求解之后,该数组的一些项本身就变成了数组。

我希望你能帮助我理解这些疑虑。感谢您的阅读。

EN

回答 1

Stack Overflow用户

发布于 2022-08-28 02:13:13

Q值需要是Gekko VarParamIntermediate才能使用.value。下面是代码的简化版本:

代码语言:javascript
复制
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]))

结果:

代码语言:javascript
复制
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'>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73498810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档