python-3.x - 我的 cplex 逻辑约束不能正常工作
问题描述
我是 cplex python 的新手。我有一个具有不同约束的模型,除了我的 if-then 约束之外,它们都可以正常工作。x 是一个二进制变量。我的约束解释是
“如果 x[i,j,t1] == 1 (对于 t 在 T 范围内),那么所有 x[j,i,t2]== 0 对于 t2 in[t+1 ,t+2,t+ 3]”。
我的代码:
for i in I:
for j in J:
for t in T:
mdl.add_constraint(mdl.if_then(x[i,j,t]==1, x[j,i,t+1]+x[j,i,t+2]+y[j,i,t+3]==0))
解决模型后,解决方案就是打破这个规则。关于这个问题没有错误,所以我不明白我做错了什么。
解决方案
要了解正在发生的事情,您可以做的是显示 if then 的所有布尔值。
例如,我可以将此文件中的 ifthen 示例重写为
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
print()
print("with if nb buses 40 more than 3 then nbBuses30 more than 7")
#if then constraint
mdl.add(mdl.if_then(nbbus40>=3,nbbus30>=7))
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()
print("if ",nbbus40.solution_value>=3)
print("then ",nbbus30.solution_value>=7)
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
这使
with if nb buses 40 more than 3 then nbBuses30 more than 7
if False
then True
这有助于了解正在发生的事情。
推荐阅读
- java - 使用 Selenium 在 Java 中并排打印季节和三个指针,而不是一个在另一个之下。我怎样才能做到这一点?
- forms - JSP 表单未创建且无法正常工作
- webpack - workbox-webpack-plugin.InjectManifest 的 sw.js 应该包括什么?
- python - Python 正则表达式修复错误的 json-string
- flutter - Flutter - 我如何从嵌套的脚手架访问抽屉
- python - 我将如何存储日期时间,然后将日期时间与当前日期时间进行比较?
- python - 在 Python 中使用具有变量名的模块
- amazon-web-services - 上传所有块后如何发布 XML 数据?
- javascript - Onclick 使用 Javascript 将图标旋转 180 度
- pandas - 如何将 Excel xlsx 文件导入熊猫