我想用python模拟 在必要的约束中,存在包含max函数的约束。 我用'if'把它分开了。 但是,'if'包含变量且无法执行。 你能告诉我如何在'if'或变量中包含变量吗?
==========================================
def comfirststage_rule(model):
if (-model.wind1 - model.discharge[1,1] + model.charge[1,1] + model.bidding[1,1]) <= 0.0 :*
return model.FirstStageCost - model.price[1,1]*model.bidding[1,1] - (model.wind2 +model.discharge[1,1] - model.charge[1,1] - model.bidding[1,1])*model.penalty[1,1] - model.bidding[1,2]*(model.price[1,2] + model.coeffru[1,1]*model.price[1,1]) - model.bidding[1,3]*(model.price[1,3]-model.price[1,1]*model.coeffrd[1,1]) == 0.0
else:
return model.FirstStageCost - model.price[1,1]*model.bidding[1,1] + (model.bidding[1,1]-model.discharge[1,1]+model.charge[1,1]-model.wind1)*model.penalty[1,2] - model.bidding[1,2]*(model.price[1,2] + model.coeffru[1,1]*model.price[1,1]) - model.bidding[1,3]*(model.price[1,3]-model.price[1,1]*model.coeffrd[1,1]) == 0.0
model.comfirststage = Constraint(rule=comfirststage_rule)
产生此错误
ERROR: Rule failed when generating expression for constraint comfirststage: TypeError: Relational expression used in an unexpected Boolean context. The inequality expression: -60 - discharge[1,1] + charge[1,1] + bidding[1,1] <= 0.0
答案 0 :(得分:0)
如果是类型错误,那么
(-model.wind1 - model.discharge[1,1] + model.charge[1,1] + model.bidding[1,1])
此代码与
无法比较0.0
处理if语句的条件并尝试像这种方法一样减少问题大小。
答案 1 :(得分:0)
是model.wind1
,model.discharge[1,1]
,model.charge[1,1]
,model.bidding[1,1]
变量中的任何一个?如果是这样,那么请从Pyomo论坛看到这个答案:
&#34; Pyomo没有将涉及Var对象的if语句传递给求解器的机制。有一些建模技巧(一般来说,并不特定于Pyomo),人们可以使用它来分析&#34;分支&#34;关于变量的值。参见,例如,惠普威廉姆斯关于建模和其他来源的书。&#34;