docplex:找到值为 1 的二元决策变量

docplex: Find the binary decision variables with value 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)

其中 vd 是可变字典,returns 是具有相同键的新字典,其中值是来自 sol 的非零值。 如果您只对变量感兴趣,请使用此字典的键。