Pyomo中构建二元变量依赖约束时的报错问题咨询
解决Pyomo中二元变量相反取值的约束问题
我来帮你搞定这个问题!你遇到的错误是因为Pyomo不支持直接用Python的!=运算符定义约束——当你写lhs != rhs时,Python会尝试把这个表达式转换成布尔值,但此时变量还没被求解器赋值,自然做不到,所以抛出了那个错误。
要实现model.z[i]和model.x[i]取值完全相反的逻辑,我们需要用线性约束来表达,因为二元变量(0或1)的相反关系可以通过简单的等式描述,有两种等价的写法:
方法1:变量和为1
两个二元变量一个取1另一个取0时,它们的和正好是1,约束可以写成:
def dependent_var_con(model, i): return model.z[i] + model.x[i] == 1 model.con = pyo.Constraint(model.M, rule=dependent_var_con)
方法2:直接用1减去x[i]
更直观的方式是直接定义z[i]等于1 - x[i],这样当x[i]是1时z[i]就是0,x[i]是0时z[i]就是1:
def dependent_var_con(model, i): return model.z[i] == 1 - model.x[i] model.con = pyo.Constraint(model.M, rule=dependent_var_con)
这两种写法都能完美实现你想要的逻辑,而且Pyomo可以正确解析这类线性等式约束,不会再报错啦。
内容的提问来源于stack exchange,提问作者Kats
相关产品推荐
相关产品推荐

