Линейное программирование возможно с использованием linprog и невозможно с использованием Gurobi в Matlab - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть следующая очень простая задача линейного программирования, которую нужно решить в Matlab

clear

%The unknown
%x=[x1,...,x10];

%The constraints
%x2+x8=Phi12
%x3+x7=Phi21
%x5=infvalue;
%x10=infvalue;

%The known parameters 
Phi12=-3.3386;
Phi21=3.0722;
infvalue=50;

sizex=10; %size of the unknown

Проблема допускает решение.

Когда я реализую этот LP с помощью linprogr, он находит решение,

Когда я внедряю этот LP с помощью решателя Gurobi, он говорит мне, что проблема невозможна.

Что я делаю не так?Вот мой код.

beq=[Phi12; Phi21; infvalue; infvalue];

rAeq=[ 1 1 ...
       2 2 ...
       3 ...
       4]; 

cAeq=[ 2 8 ...
       3 7 ...
       5 10]; 

fillAeq=[1 1 ...
         1 1 ...
         ones(1,2)];

Aeq=sparse(rAeq, cAeq,fillAeq, size(beq,1),sizex); 
Aeqfull=full(Aeq);

%linprogr
f=zeros(sizex,1);
xlinprog = linprog(f,[],[],Aeqfull,beq);

%Gurobi
clear model;
model.A=Aeq;
model.rhs=beq; 
model.sense=repmat('=', size(Aeq,1),1);
model.obj=f;
resultgurobi=gurobi(model); 

Во время моих попыток понять, что происходит: если я поставлю любое положительное значение вместо -3.3386, тогда Gurobi работает отлично.Whta

1 Ответ

0 голосов
/ 15 ноября 2018

В Matlab's linprog он содержит -inf <= x <= inf по умолчанию для вашей переменной x, в то время как для Gurobi это x> = 0. Из-за этого вам нужно установить нижнюю границу для ваших переменных на -Инф:

model.lb = -inf * ones(sizex, 1);
...