为什么 Gurobi 会生成松弛变量?

Why Gurobi generates slack variables?

我有以下唱片:

max -x4-x5-x6-x7
s.t x0+x1+x4=1
    x2+x3+x5=1
    x0+x2+x6=1
    x1+x3+x7=1

Gurobi 给了我以下基数 B=[1,0,2,10],在我的模型中我有 8 个变量和 rank(A)=4,但在基数中我有变量 x10。我的问题是,为什么 Gurobi 即使 rank(A)=4 也会生成松弛变量?以及如何得到一个只包含原始变量(从x0到x7的变量)的最优基?

问题很严重。有多个最佳基础可以提供相同的原始解决方案。换句话说,一些变量是基本的。这种情况在实践中经常发生,您不必担心。

更复杂的是:还有多个最优原始解;所以我们说我们同时具有原始和双重退化。

我的问题是,为什么 Gurobi 即使 rank(A)=4 也会生成松弛变量?

LP 问题,对于像 Gurobi 这样的求解器(即不是画面求解器),有 n 个结构变量和 m 个逻辑变量(a.k.a.slacks)。松弛变量是隐式的,它们不是“生成的”(在矩阵 A 物理上用单位矩阵扩充的意义上)。同样,这不是什么值得担心的事情。

以及如何得到一个只包含原始变量(从x0到x7的变量)的最优基?

嗯,这是一个最优的基础。那么,为什么 Gurobi 会花时间并做更多的支点来尝试让所有的松懈 non-basic? AFAIK 没有解算器会那样做。他们平等对待结构变量和逻辑变量。

强制变量在基础中并不是那么容易。自由变量很可能处于(最佳)基础中(但没有 100% 的保证)。您还可以为 Gurobi 指定一个高级基础。在极端情况下:如果这个高级基础是最优的(并且可行),Gurobi 将不会做任何枢轴。

我相信这个特定问题有 83 个最佳(和可行)基础。他们只有一个人的裤子都是NB的。我认为找到这个解决方案并不容易,即使您可以访问 Simplex 代码并可以对其进行更改(在找到最佳解决方案之后),它仍会继续从基础中调整松弛部分。我认为您需要枚举最佳基础(明确或隐含)。

产生松弛变量是因为需要求解对偶线性规划模型和约简边界。互补的松弛; Si也会产生。 此外,X0 形成对偶set-up 线性独立的分支。 X0 的值为 4,松弛变量由基变换产生;在给定等级的情况下,到分支 X0 以获得线性独立性。 形成一个缩减矩阵来找到 X10 的值为 5/2 的值。 这有助于消除 X10 以便从缩减矩阵中获得最佳基数。