【发布时间】:2021-10-13 13:36:56
【问题描述】:
我需要做一个方程(除以 PI(i,s) 和 PJ(j,s))。这些参数有索引。
此代码是在 GAMS 中编写的,而在 pyomo 中,集合(带字符串)的操作是不同的。
我不知道如何解决这个问题。
我的代码:
HN_model=ConcreteModel()
i=['U4241', 'U241', 'U241A']
HN_model.i=Set(initialize=[(len(i))])
j=['U4283', 'U283', 'U283A', 'U3283', 'U2280', 'U1280']
HN_model.j=Set(initialize=[(len(j))])
k=['PSA4241', 'PSA241', 'PSA241A', 'PSA3241']
HN_model.k=Set(initialize=[(len(k))])
s=[1]
HN_model.s=Set(initialize=range(len(s)))
HN_model.ij=Set(within=HN_model.i*HN_model.j, initialize = [(i,j) for i in HN_model.i for j in HN_model.j])
HN_model.T=Param(initialize=300.00)
HN_model.Cp_hidrogenio=Param(initialize=29.00)
HN_model.Cp_metano=Param(initialize=50.00)
HN_model.Cp_medio=Param(initialize=35.00)
HN_model.ef=Param(initialize=0.6)
HN_model.T0=Param(initialize=288.7)
HN_model.P0=Param(initialize=1.00)
HN_model.R=Param(initialize=8.314,)
HN_model.PPi=Param(initialize=5.5)
HN_model.gama=Expression(expr=HN_model.Cp_medio/(HN_model.Cp_medio-HN_model.R))
PJ={}
PJ['U4283',1]=137;
PJ['U283',1]=88.5;
PJ['U283A',1]=88.5;
PJ['U3283',1]=30;
PJ['U2280',1]=30;
PJ['U1280',1]=30;
HN_model.PJ=Param(HN_model.j,HN_model.s,initialize=[PJ])
PI={}
PI['U4241',1]=21.3;
PI['U241',1]=21.1;
PI['U241A',1]=21.1;
HN_model.PI=Param(HN_model.i,HN_model.s,initialize=[PI])
HN_model.u_power=Expression(HN_model.ij, HN_model.s, expr=(HN_model.T/HN_model.ef)*HN_model.Cp_medio*((HN_model.PJ/HN_model.PI for i,j in HN_model.ij))**((HN_model.gama-1)/HN_model.gama)-1*(HN_model.T/HN_model.T0)*(HN_model.P0/HN_model.PPi))
错误:
***AttributeError: 'generator' object has no attribute AttributeError Traceback (most recent call last)
<ipython-input-13-65250a010a2a> in <module>()
15 #HN_model.u_power=Var(HN_model.i,HN_model.j, HN_model.s)
16
---> 17 HN_model.u_power=Expression(HN_model.ij, HN_model.s, expr=(HN_model.T/HN_model.ef)*HN_model.Cp_medio*((HN_model.PJ/HN_model.PI for i,j in HN_model.ij))**((HN_model.gama-1)/HN_model.gama)-1*(HN_model.T/HN_model.T0)*(HN_model.P0/HN_model.PPi))
18 HN_model.u_power=Expression(HN_model.i,HN_model.j, HN_model.s, expr=(HN_model.T/HN_model.ef)*HN_model.Cp_medio*((1))**((HN_model.gama-1)/HN_model.gama)-1*(HN_model.T/HN_model.T0)*(HN_model.P0/HN_model.PPi))
19 HN_model.u_power1=Expression(HN_model.i,HN_model.k, HN_model.s, expr=(HN_model.T/HN_model.ef)*HN_model.Cp_medio*((1))**((HN_model.gama-1)/HN_model.gama)-1*(HN_model.T/HN_model.T0)*(HN_model.P0/HN_model.PPi))
pyomo/core/expr/numvalue.pyx in pyomo.core.expr.numvalue.NumericValue.__rpow__()
pyomo/core/expr/numeric_expr.pyx in pyomo.core.expr.numeric_expr._generate_other_expression()
AttributeError: 'generator' object has no attribute 'is_expression_type'
【问题讨论】:
-
你能编辑帖子并显示模型和完整的
AttributeError吗?此外,您的模型与your previous question 中的错误相同。参数HN_model.PI是IndexedParam并且您没有使用索引来调用每个值 -
好的。完毕!我用“HN_model.PI for i,j in HN_model.ij”,不正确?
标签: python string set expression pyomo