"Model is infeasible or unbounded" 在 Gurobi 中——然而,这似乎是不正确的

"Model is infeasible or unbounded" in Gurobi -- however, this seems to be incorrect

我是 Gurobi(和一般的求解器)的新手,并且已经以 LP 文件格式手动设置了二次非凸优化问题。下面是一个小例子,它代表了我将要解决的更大的问题。对于这个问题,Gurobi 给出了“Model is infeasible or unbounded”。我将模型中的 params.NonConvex = 2 设置为 select 非凸二次求解器。

我知道使用二元变量的乘积项是错误的形式,一旦我能解决这个问题就会解决这个问题。

Minimize
  64   x_1_1 + 100   x_2_1 + 169   x_3_1 + 196   x_4_1  +
  64   x_1_2 + 100   x_2_2 + 169   x_3_2 + 196   x_4_2  - r_1 - r_2

Subject To

  denom1: x_1_1 + x_2_1 + x_3_1 + x_4_1 - d_1 = 0
  denom2: x_1_2 + x_2_2 + x_3_2 + x_4_2 - d_2 = 0


  num1: 8   x_1_1 + 10   x_2_1 + 13   x_3_1 +  14   x_4_1 - n_1 = 0
  num2: 8   x_1_2 + 10   x_2_2 + 13   x_3_2 +  14   x_4_2 - n_2 = 0


  ratio1: [ r_1 * d_1 - n_1 ^ 2 ] = 0
  ratio2: [ r_2 * d_2 - n_2 ^ 2 ] = 0


  item1: x_1_1 + x_1_2 = 1
  item2: x_2_1 + x_2_2 = 1
  item3: x_3_1 + x_3_2 = 1
  item4: x_4_1 + x_4_2 = 1

  bin1: -2   y_1 + [ x_1_1 * y_1 + x_2_1 * y_1 + x_3_1 * y_1 + x_4_1 * y_1 ] >= 0
  bin2: -2   y_2 + [ x_1_2 * y_2 + x_2_2 * y_2 + x_3_2 * y_2 + x_4_2 * y_2 ] >= 0

  empty1: x_1_1 + x_2_1 + x_3_1 + x_4_1 -
          [ x_1_1 * y_1  + x_2_1 * y_1  + x_3_1 * y_1  + x_4_1 * y_1 ] = 0

  empty2: x_1_2 + x_2_2 + x_3_2 + x_4_2 -
          [ x_1_2 * y_2  + x_2_2 * y_2  + x_3_2 * y_2  + x_4_2 * y_2 ] = 0

Binary
  x_1_1 x_2_1 x_3_1 x_4_1
  x_1_2 x_2_2 x_3_2 x_4_2
  y_1 y_2

End

所有实际决策变量都是二元的(其余,r_1、r_2、n_1、n_2、d_1、d_2 是决策变量的计算值),因此问题不能无界。以下方案是可行的(也是最优的,根据手算):

x_1_1 = 1, x_1_2 = 1, x_1_3 = 0 x_1_4 = 0
x_2_1 = 0, x_2_2 = 0, x_3_2 = 1, x_4_2 = 1
y_1 = 1
y_2 = 1

我想知道为什么我在 Gurobi 中收到“模型不可行或无界”。

“模型不可行或无界”正如其名:presolve 无法确定模型是不可行还是无界。为了更好地理解你的模型,首先设置DualReductions=0,然后再次解决它以确定它是哪种情况:

  • 如果不可行,调用computeIIS() to solve the IIS, then find the infeasibilities via the IISConstr

  • 如果是unbounded,则设置InfUnbdInfo=1, solve, then retrieve the UnbdRay属性,求出unbounded ray

我发现了问题。当我运行 with presolve = 0时,我发现模型是无界的。从 objective 函数可以看出,只有 r_1 和 r_2 可能导致这种情况。为了确认,我人为地限制了 r_1 和 r_2 并且 Gurobi 能够解决问题。

查看Gurobi在我人为约束r_1和r_2时给出的解决方案帮助我调试了模型。在此公式中,如果 d_1 和 n_1 为 0,则 r_1 变为无界(对于 d_1 和 n_1 类似)。从技术上讲,它会导致除以 0,但 Gurobi 似乎没有标记这一点。

现在我必须更改模型,以便约束 ratio1 和 ratio2 仅在 d_1 和 d_2 分别为非零时适用。