如果使用python,pyomo,我怎么能把变量放进去

时间:2018-01-23 08:20:58

标签: python if-statement max pyomo

这个问题已经通过感激的人的建议解决了。

我想用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

2 个答案:

答案 0 :(得分:0)

如果是类型错误,那么

(-model.wind1 - model.discharge[1,1] + model.charge[1,1] + model.bidding[1,1])

此代码与

无法比较
0.0

处理if语句的条件并尝试像这种方法一样减少问题大小。

答案 1 :(得分:0)

model.wind1model.discharge[1,1]model.charge[1,1]model.bidding[1,1]变量中的任何一个?如果是这样,那么请从Pyomo论坛看到这个答案:

&#34; Pyomo没有将涉及Var对象的if语句传递给求解器的机制。有一些建模技巧(一般来说,并不特定于Pyomo),人们可以使用它来分析&#34;分支&#34;关于变量的值。参见,例如,惠普威廉姆斯关于建模和其他来源的书。&#34;