实现单纯形算法并得到 "matrix singular to machine precision" 错误

Implementing simplex algorithm and getting "matrix singular to machine precision" error

我正在 Matlab/Octave 中实现(对偶)单纯形算法。

我的算法适用于一个小的测试问题,但是当我尝试一个更大的问题作为 afiro.mps(来自 http://www.netlib.org/lp/data/)时,我收到警告 "matrix singular to machine precision, rcond=0" 和八度抛出错误(或不终止)。确切的命令是:

x = zeros(n,1);
x(B) = A(:,B) \ b; % Compute primal variables
y = A(:,B)' \ c(B); % Compute dual variables

问题是标准形式

min c*x
s.t. Ax=b
x>=0

A 是 m-x-n 矩阵,B 是非活动约束(基本变量)的索引向量。 当我在做一个两相单纯形时,我选择 1:size(A,1) 作为对偶单纯形的初始基础。

问题是通过自编码 reader 从 mps 文件中读取的。我希望 mps 文件被正确读取,因为 glpk 函数在输入参数为 A、b、c 时正确地解决了问题。

有什么方法可以避免警告或者我的编码有错误吗?

线性规划问题的基矩阵通常有非常糟糕的条件数。这是实现稳定单纯形算法的难点之一。

你应该看看这篇解释这种现象的论文: On the Factorization of Simplex Basis Matrices