如何用CPLEX库定义约束?PyCharm中约束代码报错求助
问题解决方法
错误1:约束15括号未闭合
原代码中约束15的add_constraint调用缺少右括号,引发语法错误。修正后代码:
#constraint 15 mdl.add_constraint(1 >= y*(n+1)*(2*v + 2*w))
错误2:约束16批量添加方式错误
add_constraint方法仅支持单个约束对象,直接传入生成器表达式无效。若要批量添加约束,需使用复数形式的add_constraints:
#constraint 16 mdl.add_constraints(1 >= (y / m[i])*(p[i] + c[i] + 2*w) for i in range(n))
注:y*1/m[i]与y/m[i]逻辑等价,后者写法更简洁直观。
错误3:循环添加约束时缩进错误
Python是缩进敏感语言,第二个代码块中mdl.add_constraint语句未缩进,不属于for循环代码块,导致语法错误。修正缩进后:
#constraint 16 for i in range(n): mdl.add_constraint(1 >= (y / m[i])*(p[i] + c[i] + 2*w))
额外优化建议
- 替换
cplex.infinity为docplex内置的mdl.infinity,代码风格更统一:y = mdl.integer_var(lb=0, ub=mdl.infinity, name='y') - 提前计算约束中的常数项,提升代码可读性:
# 约束15提前计算常数部分 const_15 = (n+1)*(2*v + 2*w) mdl.add_constraint(1 >= y * const_15)
内容的提问来源于stack exchange,提问作者Nicholas TI
相关产品推荐
相关产品推荐

