实现单纯形算法并得到“矩阵奇异机精度”误差

时间:2015-11-09 13:56:34

标签: matlab octave linear-programming linear-equation

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

我的算法适用于一个小的测试问题,但是当我尝试更大的问题为afiro.mps(来自http://www.netlib.org/lp/data/)时,我得到警告“矩阵奇异到机器精度,rcond = 0”和octave抛出错误(或不终止)。确切的命令是:

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)作为双单纯形的初始基础。

通过自编码阅读器从mps文件中读取问题。我希望正确读取mps文件,因为当它有A,b,c作为输入参数时,glpk函数可以正确解决问题。

是否有某种方法可以避免警告或我的编码错误?

1 个答案:

答案 0 :(得分:0)

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

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