Matlab线性规划实例

xiaoxiao2021-02-28  67

线性规划习题

之前的线性规划的练习题


题目

解答

f = [3 -1 -1]; A = [1 -2 1;4 -1 -2]; b = [11,-3]'; Aeq = [-2 0 1]; beq = [1]; [x,y] = linprog(-f,A,b,Aeq,beq,zeros(3,1)); z = y

这里是一个到线性规划的转换,要做一个变量的变换,把每一个绝对值x都替换成一个u和v的表示变量 如: u = (x + |x|) / 2 v = (|x| - x) / 2 代码: clc,clear c = 1:4; c = [c,c]; aeq = [1 -1 -1 1;1 -1 1 -3;1 -1 -2 3]; Aeq = [aeq,-aeq]; beq = [0 1 -1/2]; [x,y] = linprog(c,[],[],Aeq,beq,zeros(8,1)) x = x(1:4)-x(5:8) 这里可以看到: 将|x|转换为u和v之后,进行一个8个向量的线性规划,修改Aeq和f的值,但是这里的beq不需要8个向量

这里根据三种产品对应的六种工序之间可以分类。原因在于每一种工序的价格和约束不同,基于此,可以发现,第一种产品有5个参数,第二种产品3个参数,但是对于第三种产品而言,题目中要求必须完成A、B这2道工序,因此第三个只有一个参数。 a = [0.25 0.35 0.50]; b = [1.25 2.00 2.80]; c = [6000 10000 4000 7000 4000]; d = [300 321 250 783 200]; f = [b(1)-a(1)-d(1)/c(1)*5,b(1)-a(1)-d(2)/c(2)*7,-d(3)/c(3)*6,-d(4)/c(4)*4,-d(5)/c(5)*7,-d(1)/c(1)*10,-d(2)/c(2)*9,b(2)-a(2)-d(3)/c(3)*8,b(3)-a(3)-d(2)/c(2)*12-d(4)/c(4)*11]; Aeq = [5 0 0 0 0 10 0 0 0;0 7 0 0 0 0 9 0 12;0 0 6 0 0 0 0 8 0;0 0 0 4 0 0 0 0 11;0 0 0 0 7 0 0 0 0]; beq = c; A = [1 1 -1 -1 -1 0 0 0 0;0 0 0 0 0 1 1 -1 0]; b = [0 0]; ub = zeros(9,1); [x,y] = intlinprog(-f,ones(9,1),Aeq,beq,A,b,ub); z = -y x

这里的和第三题类似,分成了3×4=12种情况 c = [3100;3800;3500;2850]; c = c*ones(1,3); c = c(:); a1 = zeros(4,12); for i = 1:4 a1(i,i:4:12) = 1; end b1 = [18;15;23;12]; a2 = zeros(3,12); for i = 1:3 a2(i,4*i-3:4*i) = 1; end b2 = [10 16 8]'; bb = [480;650;580;390]; a3 = zeros(3,12); for j = 1:3 a3(j,4*j-3:4*j) = bb; end b3 = [6800 8700 5300]'; a = [a1;a2;a3]; b = [b1;b2;b3]; aeq = zeros(2,12); aeq(1,1:4) = 1/10; aeq(1,5:8) = -1/16; aeq(2,5:8) = 1/16; aeq(2,9:12) = -1/8; beq = zeros(2,1); [x,y] = linprog(-c,a,b,aeq,beq,zeros(12,1)); y = -y

总结 对于单纯的线性规划问题来说的话,lingo其实更加好用,而且对于一些数据量较为大的情况,比如超过lingo默认的32M内存的情况,这个时候可以修改lingo的设置,但是Matlab无法进行求解。

原文地址:http://blog.csdn.net/qq_34861102/article/details/76736599

转载请注明原文地址: https://www.6miu.com/read-38574.html

最新回复(0)