Pyomo 中的多索引约束或目标



我有一个相当基本的MILP正在尝试解决,但是当我的代码运行正常时,我实际上没有得到任何值。我认为这是因为我的目标函数(因为将其更改为微不足道的东西确实会产生答案):

def OPEX (m):
return sum (m.Q_ng[u,t]*m.ng_price[t] + m.E_imp[t]*m.el_price_imp[t] - m.E_exp[t]*m.el_price_exp[t] for u in m.U for t in m.P)
m.obj = Objective(rule=OPEX)

我需要在ut上尽量减少总和,你会这样做吗?

我的问题最终是我如何编写约束。根据书William E. Hart、Carl Laird、Jean-Paul Watson 和 David L. Woodruff:Pyomo - Optimization Modeling 在 Python 中,您可以编写附加_rule函数,然后在定义约束时只需将其命名为相同而不使用规则,例如

def BOIL_off_rule (m,t):
return (0,m.f["BOIL",t]*Boiler_max,Boiler_max*y["BOIL",t])
m.BOIL_off = Constraint(m.P)

然而,这似乎不起作用(可能是因为在书中他们使用了coopr,其中包括其他库/模块,而不仅仅是Pyomo)

最新更新