如果使用 python、pyomo,我如何将变量放入

how can i put variables into if using python, pyomo

此问题已解决,感谢各位大侠的指点

我想用python模拟 在必要的约束中,有一个包含最大函数的约束。 我使用 'if' 将它分开。 但是,'if'包含变量,无法执行。 你能告诉我如何在 'if' 中包含变量或在 max 中包含变量吗?

==========================================

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

如果是类型错误那么

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

此代码与

没有明显的可比性
0.0

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

是否有 model.wind1model.discharge[1,1]model.charge[1,1]model.bidding[1,1] 变量?如果是这样,请从 Pyomo 论坛查看此答案:

"Pyomo does not have a mechanism to pass to a solver an if statement involving a Var object. There are modelling tricks (in general, not specific to Pyomo) that one can use to "branch" 关于变量的值。例如,参见 HP Williams 关于建模的书籍以及其他来源。"