python - docplex:查找值为 1 的二元决策变量
问题描述
我有一个 MIP 模型,其中包括一些二进制变量集,例如 y_{rnt}。我不想在每个索引上循环(如下所示),我只想打印(存储)变量,例如 y_{rnt}=1。docplex 在 python 中提供任何功能吗?
用多个循环识别的例子(低效):
# R, N, and T are inputs. We also have the solution as the output of the MIP model
x = 0
for r in range(1, R+1):
for n in range(1, N+1):
for t in range(1, T+1):
if solution.get_value(y[r, n, t]) == 1:
x = x + 1
解决方案
假设您的y
变量被定义为变量dict,Docplex 提供get_value_dict
解决方案对象的方法。此方法将变量字典转换为具有相同键的值字典。此外,如果您通过,keep_zeros=False
则丢弃零值。
请注意,零值以精度(默认为 1e-6)进行测试,因为 Cplex 中的所有值都是浮点数,包括二进制变量值。这意味着您上面的代码很可能会“错过”二进制变量,其值将由 Cplex 输出为 0.99999。
总结一下:
xd = sol.get_value_dict(vd, keep_zeros=False)
wherevd
是一个变量字典,返回一个具有相同键的新字典,其中值是来自 的非零值sol
。如果您只对变量感兴趣,请使用此字典的键。
推荐阅读
- python - 3D 绘制所有可能的排列或 0-9 的可能组合
- javascript - 如何将 Adobe Flash 游戏移植到 JavaScript?
- python - 使用 tkinter 在选项卡中显示不同的 csv 文件
- python - BeautifulSoup XML 解析 - 只返回第一个结果
- c - C语言:如何使字符数组由文本(.txt)文件字母组成?
- python - 多处理:p.exitcode==None 和 p.is_alive() 是否相等表达式?
- gwt - 如果我想为 GWT 3 做好准备,我应该停止使用 GSS 等吗?
- bash - BASH - 使用空格作为命令从其他变量和字符串执行连接变量
- javascript - 如何在 Vue.js 中的 2 个按钮中找到单击了哪个按钮?
- codenameone - 代号主题生成器