在Matlab中使用linprog进行线性编程是可行的,而在Gurobi中使用线性编程是不可行的

时间:2018-11-15 15:38:03

标签: matlab linear-programming gurobi

我有以下非常简单的线性编程问题要在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

问题允许解决方案。

当我使用linprogr实现此LP时,便找到了解决方案。

当我使用Gurobi求解器实现此LP时,它告诉我该问题不可行。

我在做什么错?这是我的代码。

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会完美地工作。

1 个答案:

答案 0 :(得分:1)

在Matlab的linprog中,变量x的默认值为-inf <= x <= inf,而对于Gurobi,它的x> =0。因此,您需要设置变量的下限到-Inf:

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