matlab - 线性规划在 Matlab 中使用 linprog 可行,使用 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
这个问题承认一个解决方案。
当我使用它来实现这个 LPlinprogr
时,会找到一个解决方案。
当我使用 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 就可以完美运行。瓦塔
解决方案
在 Matlab 中linprog
,它默认为您的变量 x 保存 -inf <= x <= inf,而对于 Gurobi,它是 x >= 0。因此,您需要将变量的下限设置为 -Inf:
model.lb = -inf * ones(sizex, 1);
推荐阅读
- r - R访问引用类对象列表中的字段值
- reactjs - 我的摩纳哥编辑器实例无法更新
- javascript - 按下按钮后显示来自 javascript 变量的数据
- jenkins - Groovy 脚本以提取以给定名称开头的作业
- java - @RabbitListener 无法从同一个 docker 容器连接到 rabbitMQ
- javascript - 如何将我的 ajax 请求合并为一行?
- http - 软删除的 HTTP 请求方法应该是什么(不删除但将属性标记为已删除:在 DB 中为 true)
- apache-kafka - Apache Storm Spout 没有向 Bolt 的所有执行者发出元组
- python - 通过对python中的长复杂字符串使用特定拆分来获取每个句子的偏移量
- json - 是否有具有车辆基本维护计划的 API?