如果我使用二进制变量,CPLEX 找不到解决方案

CPLEX can't find a solution if I use binary vabriables

我正在使用 CPLEX 12.9 和 Python 来解决 MILP(混合整数线性问题)。 我尝试了两种方法;我期望得到相同的结果,但第一种方法有效,而第二种方法无效。

1) 第一种方法:

这种方法成功。在生成的“.lp”文件(一个包含人类可读的问题表述的文本文件:有一个必须最小化的 objective 函数和一些约束)可以看出 x6, x7, x8, x9, x10, x11continuous 变量,它们都等于 500(我定义它们的 upperlower 边界等于 500;所以它们实际上是常量).

2) 第二种方法:

它 returns CPLEX Error 1217: No solution exists,所以 CPLEX 无法找到解决方案,但我不明白为什么。

我唯一改变的是:

因此,生成的“.lp”文件与使用第一种方法生成的文件非常相似;唯一不同的是:

注: 即使(在第二种方法中)我将 lowerupper 边界都设置为 500,问题仍然存在。

如果您使用二进制,这意味着决策变量将是 0 或 1,即使您稍后添加了一些限制条件使其应小于 500。

如果您希望决策变量允许 500 作为值,您应该使用 float 或 integer 作为类型。

如果我使用 zoo example 并将整数更改为二进制:

from docplex.mp.model import Model

mdl = Model(name='buses')
nbbus40 = mdl.binary_var(name='nbBus40')
nbbus30 = mdl.binary_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)

mdl.solve()

print(mdl.solve_details.status)

给出:

integer infeasible