我想用MATLAB 7解决这个线性编程(单纯形)问题,但它返回
退出:问题是无限的。
此功能
f = 2(15 s0 + 8s1 + 2576s2 + 744s3 + 427s4 + 8s5)
应该以每个观察的两个约束的方式最小化 纳
0.1s0 + 0.1s1 + 14.5s2 + 4s3 + 2.4s4 – a0 − a1 − 145a2 − 40a3 − 24a4 ≥ −2.2
0.1s0 + 0.1s1 + 14.5s2 + 4s3 + 2.4s4 + a0 + a1 + 145a2 + 40a3 + 24a4 ≥ 2.2
S5
和a5
为0.我使用了
f = [15 8 2576 744 427 8 15 8 2576 744 427 8];
b = [-2.2; 2.2];
a = [0.1 0.1 14.5 0.4 2.4 0 -1 -1 -145 -40 -24 0 ; 0.1 0.1 14.5 4 2.4 0 1 1 145 40 24 0];
[x, fval, exitflag, output, lambda] = linprog(f, a, b)
解决这个问题的正确方法是什么?
答案 0 :(得分:3)
您没有将s5
和a5
限制为实际为零,因为您将a
矩阵中的相应系数设置为零。因此,他们可以承担任何价值,而LP是无限制的。
要修复,请添加等式约束:
beq = [0; 0];
aeq = [0 0 0 0 0 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 1];
[x,fval,exitflag,output,lambda] = linprog(f,a,b,aeq,beq)
或者,只需从LP中删除s5
和a5
,因为它们根本没有贡献。