Проблемы с симплексным методом для линейного программирования в Matlab (функция linprog)

Я использую функцию linprog в Matlab для решения ряда больших задач линейного программирования. У меня есть 2601 переменная решения, 51 ограничение неравенства, 71 ограничение равенства и нижняя граница 0 для всех переменных.

Коэффициенты в целевой функции и ограничения различаются в разных задачах. Я использую симплексный метод (когда я пробую активный набор и внутреннюю точку, программа никогда не перестает работать, пока я ждал, что длилось более часа).

Симплексный метод для некоторых задач сходится очень быстро, а для некоторых из них (тоже очень быстро) выдает следующее сообщение:

Выход: ограничения слишком строгие; подходящая отправная точка не найдена.

Однако даже для тех, у кого есть это сообщение, оно по-прежнему предоставляет решение, удовлетворяющее ограничениям. Могу ли я просто проигнорировать это сообщение и использовать решения, или сообщение важно, а решение, вероятно, не является оптимальным?

Обновление: оказалось, что метод внутренних точек решает некоторые из них, но не другие. Поэтому в приведенном ниже коде я использовал метод внутренней точки для тех, которые с ним работают, и симплексный метод для остальных.

Это мои файлы, и это мой код:

clc; clear;

%distances
t1 = readtable('t.xlsx', 'ReadVariableNames',false);
ti = table2array(t1);
sz = size(ti);
tiv = reshape(ti, [1,sz(1)*sz(2)]);

%crude oil production and attraction
A = readtable('A.xlsx', 'ReadVariableNames',false);
Ai = table2array(A);
P = readtable('P.xlsx', 'ReadVariableNames',false);
Pi = table2array(P);

%others
one1 = readtable('A Matrix.xlsx', 'ReadVariableNames',false);
one = table2array(one1);
two1 = readtable('Aeq Matrix.xlsx', 'ReadVariableNames',false);
two = table2array(two1);
zero = zeros(sz(1), sz(1));
infin = inf(sz(1), sz(1));
zerov = reshape(zero, [1,sz(1)*sz(2)]);
infinv = reshape(infin, [1,sz(1)*sz(2)]);

%OF
f = (tiv).^1;

%linear program 
%x = linprog(f,A,b,Aeq,beq,lb,ub)
options1 = optimoptions('linprog','Algorithm','interior-point');
options2 = optimoptions('linprog','Algorithm','simplex');
x1999 = vec2mat(linprog(f,one,Pi(1,1:end),two,Ai(1,1:end),zerov,infinv,zerov,options2),sz(1));
x2000 = vec2mat(linprog(f,one,Pi(2,1:end),two,Ai(2,1:end),zerov,infinv,zerov,options1),sz(1));
x2001 = vec2mat(linprog(f,one,Pi(3,1:end),two,Ai(3,1:end),zerov,infinv,zerov,options1),sz(1));
x2002 = vec2mat(linprog(f,one,Pi(4,1:end),two,Ai(4,1:end),zerov,infinv,zerov,options1),sz(1));
x2003 = vec2mat(linprog(f,one,Pi(5,1:end),two,Ai(5,1:end),zerov,infinv,zerov,options1),sz(1));
x2004 = vec2mat(linprog(f,one,Pi(6,1:end),two,Ai(6,1:end),zerov,infinv,zerov,options1),sz(1));
x2005 = vec2mat(linprog(f,one,Pi(7,1:end),two,Ai(7,1:end),zerov,infinv,zerov,options1),sz(1));
x2006 = vec2mat(linprog(f,one,Pi(8,1:end),two,Ai(8,1:end),zerov,infinv,zerov,options1),sz(1));
x2007 = vec2mat(linprog(f,one,Pi(9,1:end),two,Ai(9,1:end),zerov,infinv,zerov,options2),sz(1));
x2008 = vec2mat(linprog(f,one,Pi(10,1:end),two,Ai(10,1:end),zerov,infinv,zerov,options2),sz(1));
x2009 = vec2mat(linprog(f,one,Pi(11,1:end),two,Ai(11,1:end),zerov,infinv,zerov,options2),sz(1));
x2010 = vec2mat(linprog(f,one,Pi(12,1:end),two,Ai(12,1:end),zerov,infinv,zerov,options2),sz(1));
x2011 = vec2mat(linprog(f,one,Pi(13,1:end),two,Ai(13,1:end),zerov,infinv,zerov,options2),sz(1));
x2012 = vec2mat(linprog(f,one,Pi(14,1:end),two,Ai(14,1:end),zerov,infinv,zerov,options1),sz(1));
x2013 = vec2mat(linprog(f,one,Pi(15,1:end),two,Ai(15,1:end),zerov,infinv,zerov,options2),sz(1));
x2014 = vec2mat(linprog(f,one,Pi(16,1:end),two,Ai(16,1:end),zerov,infinv,zerov,options2),sz(1));
x2015 = vec2mat(linprog(f,one,Pi(17,1:end),two,Ai(17,1:end),zerov,infinv,zerov,options2),sz(1));
x2016 = vec2mat(linprog(f,one,Pi(18,1:end),two,Ai(18,1:end),zerov,infinv,zerov,options1),sz(1));

person Fred    schedule 11.08.2017    source источник
comment
Вы не можете игнорировать это, если не удается найти BFS, значит, оптимизация еще не выполнялась. Возможно, у вас есть ограничения, требующие слишком большой точности, например, два неравенства, которые вместе означают равенство. Может помочь, если вы покажете какую-нибудь, желательно самую маленькую, неудавшуюся задачу, которую вы можете сделать.   -  person harold    schedule 12.08.2017
comment
Я добавил код и мои входные файлы. Спасибо, что потратили на это время.   -  person Fred    schedule 12.08.2017
comment
У меня также было несколько проблем с linprog, взгляните на IBM CPLEX для Matlab, он бесплатен для академического использования www-03.ibm.com/software/products/fr/ibmilogcpleoptistud   -  person Marouen    schedule 12.08.2017
comment
Спасибо, Маруэн.   -  person Fred    schedule 18.08.2017


Ответы (1)


На случай, если кто-то захочет узнать, в чем проблема, я обнаружил, что для тех программ с ошибкой на самом деле не было допустимой точки, и то, что говорила ошибка, было правильным. Я обнаружил это, запустив те же линейные программы с вектором нулей для коэффициентов целевой функции и получив ту же ошибку (рекомендуемый метод в руководстве Matlab).

person Fred    schedule 31.08.2017