f=[-2;3;5];
a=[-2,5,-1;1,3,1];
b=[-10;12];
aeq=[1,1,1];
beq=7;
[x,z]=linprog(f,a,b,aeq,beq,zeros(3,1));
x,z=-z
我所运行出来的解为x =
7.0000
0.0000
0.0000
z =
14.0000
但是 书上给出的解wei
X=6.4286 0.5714 0
Z=14.5714
怎么显示为答案这样的 ?
MATLAB解决线性规划问题解的输出和限制变量全部显示为整数
答案:1 悬赏:20 手机版
解决时间 2021-01-27 07:56
- 提问者网友:战皆罪
- 2021-01-26 14:21
最佳答案
- 五星知识达人网友:蕴藏春秋
- 2021-01-26 15:23
你用round肯定不可能限制这些变量为整数的。
对于混合整数线性规划问题(MILP),2014a引入了一个函数intlinprog可用于求解。<pre t="code" l="as3">intlinprog(c,1:8,A,B,[],[],zeros(8,1))另外,可以用遗传算法求解混合整数非线性规划问题(当然,用于线性规划也可以)<pre t="code" l="as3">ga(@(x)c*x(:),8,A,B,[],[],zeros(1,8),[],[],1:8)但是,用两种方法得到的结果都是无法找到可行解(也就是,无法满足所有的约束条件,与目标函数无关),请题主还是检查一下问题自身是否有误。 为验证上述结果的正确性,我把模型转为Lingo格式,用Lingo求解:<pre t="code" l="as3">max=x1;
12*x1+0*x2+10*x3+0*x4+0*x5+0*x6+0*x7+0*x8<=47;
-12*x1+0*x2+10*x3+0*x4+0*x5+0*x6+0*x7+0*x8<=-37;
18*x1+0*x2+10*x3+8*x4+0*x5+0*x6+0*x7+0*x8<=88;
-18*x1+0*x2+-10*x3+-8*x4+0*x5+0*x6+0*x7+0*x8<=-80;
0*x1+12*x2+0*x3+0*x4+10*x5+0*x6+0*x7+0*x8<=31;
0*x1+-12*x2+0*x3+0*x4+-10*x5+0*x6+0*x7+0*x8<=-21;
0*x1+18*x2+0*x3+0*x4+10*x5+8*x6+0*x7+0*x8<=81;
0*x1+-18*x2+0*x3+0*x4+-10*x5+-8*x6+0*x7+0*x8<=73;
0*x1+6*x2+0*x3+0*x4+10*x5+8*x6+8*x7+0*x8<=131;
0*x1+-6*x2+0*x3+0*x4+-10*x5+-8*x6+-8*x7+0*x8<=-123;
18*x1+18*x2+10*x3+8*x4+-10*x5+8*x6+8*x7+8*x8<=252;
-18*x1+-18*x2+-10*x3+-8*x4+10*x5+-8*x6+-8*x7+-8*x8<=-244;
1*x1+1*x2+-0.2*x3+-0.2*x4+-0.2*x5+-0.2*x6+-0.2*x7+-0.2*x8<=0;
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(x5);
@gin(x6);
@gin(x7);
@gin(x8);其中目标函数是随便写的,因为现在主要是要验证约束条件存在冲突,导致找不到可行解,与目标函数无关。验证的结果同样是找不到可行解(81. NO FEASIBLE SOLUTION FOUND)。 对于这种情况,Lingo提供了Debug功能,可以帮助用户找出导致不可行的最小约束集合,得到的结果如下:<pre t="code" l="as3"> Constraints and bounds that cause an infeasibility:
Sufficient Rows:
(Dropping any sufficient row will make the model feasible.)
[_3] - 12 * X1 + 10 * X3 <= - 37 ;
[_2] 12 * X1 + 10 * X3 <= 47 ;
Sufficient Variable Bounds:
(Dropping any sufficient bound will make the model feasible.)
X3 >= 0也就是说,去掉第一个或第二个约束都可以解决可行解的问题,或者去掉x3>=0的变量限制也可以(我试了一下,好像这个不起作用?)。总之还是请题主好好check一下题目的条件。
对于混合整数线性规划问题(MILP),2014a引入了一个函数intlinprog可用于求解。<pre t="code" l="as3">intlinprog(c,1:8,A,B,[],[],zeros(8,1))另外,可以用遗传算法求解混合整数非线性规划问题(当然,用于线性规划也可以)<pre t="code" l="as3">ga(@(x)c*x(:),8,A,B,[],[],zeros(1,8),[],[],1:8)但是,用两种方法得到的结果都是无法找到可行解(也就是,无法满足所有的约束条件,与目标函数无关),请题主还是检查一下问题自身是否有误。 为验证上述结果的正确性,我把模型转为Lingo格式,用Lingo求解:<pre t="code" l="as3">max=x1;
12*x1+0*x2+10*x3+0*x4+0*x5+0*x6+0*x7+0*x8<=47;
-12*x1+0*x2+10*x3+0*x4+0*x5+0*x6+0*x7+0*x8<=-37;
18*x1+0*x2+10*x3+8*x4+0*x5+0*x6+0*x7+0*x8<=88;
-18*x1+0*x2+-10*x3+-8*x4+0*x5+0*x6+0*x7+0*x8<=-80;
0*x1+12*x2+0*x3+0*x4+10*x5+0*x6+0*x7+0*x8<=31;
0*x1+-12*x2+0*x3+0*x4+-10*x5+0*x6+0*x7+0*x8<=-21;
0*x1+18*x2+0*x3+0*x4+10*x5+8*x6+0*x7+0*x8<=81;
0*x1+-18*x2+0*x3+0*x4+-10*x5+-8*x6+0*x7+0*x8<=73;
0*x1+6*x2+0*x3+0*x4+10*x5+8*x6+8*x7+0*x8<=131;
0*x1+-6*x2+0*x3+0*x4+-10*x5+-8*x6+-8*x7+0*x8<=-123;
18*x1+18*x2+10*x3+8*x4+-10*x5+8*x6+8*x7+8*x8<=252;
-18*x1+-18*x2+-10*x3+-8*x4+10*x5+-8*x6+-8*x7+-8*x8<=-244;
1*x1+1*x2+-0.2*x3+-0.2*x4+-0.2*x5+-0.2*x6+-0.2*x7+-0.2*x8<=0;
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(x5);
@gin(x6);
@gin(x7);
@gin(x8);其中目标函数是随便写的,因为现在主要是要验证约束条件存在冲突,导致找不到可行解,与目标函数无关。验证的结果同样是找不到可行解(81. NO FEASIBLE SOLUTION FOUND)。 对于这种情况,Lingo提供了Debug功能,可以帮助用户找出导致不可行的最小约束集合,得到的结果如下:<pre t="code" l="as3"> Constraints and bounds that cause an infeasibility:
Sufficient Rows:
(Dropping any sufficient row will make the model feasible.)
[_3] - 12 * X1 + 10 * X3 <= - 37 ;
[_2] 12 * X1 + 10 * X3 <= 47 ;
Sufficient Variable Bounds:
(Dropping any sufficient bound will make the model feasible.)
X3 >= 0也就是说,去掉第一个或第二个约束都可以解决可行解的问题,或者去掉x3>=0的变量限制也可以(我试了一下,好像这个不起作用?)。总之还是请题主好好check一下题目的条件。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯