如果使用 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.wind1
、model.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 关于建模的书籍以及其他来源。"
此问题已解决,感谢各位大侠的指点
我想用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.wind1
、model.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 关于建模的书籍以及其他来源。"