首页 > 解决方案 > 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

标签: pythonvariablesdocplex

解决方案


假设您的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。如果您只对变量感兴趣,请使用此字典的键。


推荐阅读