如何在DOcplex中编写约束A+B≤1?新手求解类型错误问题
解决DOcplex中A+B≤1约束的报错问题
问题出在你定义变量时用了大括号{},这会把DOcplex返回的二元变量对象包装成集合(set),而集合之间不支持用+运算符做运算,所以才会触发TypeError: unsupported operand type(s) for +: 'set' and 'set'错误。
只需要去掉变量定义时的大括号,让A、B直接成为二元变量对象,就能正常构建约束了,正确代码如下:
# 先初始化模型(如果还没初始化的话) from docplex.mp.model import Model mdl = Model(name="mutual_exclusion_model") # 正确定义二元变量,不要加大括号 A = mdl.binary_var(name="A") B = mdl.binary_var(name="B") # 添加互斥约束 mdl.add_constraint(A + B <= 1, ctname="A_B_mutually_exclusive") # 可选:添加目标函数并求解 # mdl.maximize(A + 2*B) # sol = mdl.solve() # if sol: # print(f"A={sol[A]}, B={sol[B]}")
这个约束实现的是A和B互斥的逻辑——两个二元变量最多只能有一个取值为1。
内容的提问来源于stack exchange,提问作者troman
相关产品推荐
相关产品推荐

