"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 分别为非零时适用。
我是 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 分别为非零时适用。