Matlab线性规划实例

来源:互联网 发布:华为手机修改mac地址 编辑:程序博客网 时间:2024/06/05 19:06

线性规划习题

之前的线性规划的练习题


  1. 题目

    1. 这里写图片描述

    2. 这里写图片描述

    3. 这里写图片描述

    4. 这里写图片描述
  2. 解答

    1. 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

    2. 这里是一个到线性规划的转换,要做一个变量的变换,把每一个绝对值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个向量

    3. 这里根据三种产品对应的六种工序之间可以分类。原因在于每一种工序的价格和约束不同,基于此,可以发现,第一种产品有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

    4. 这里的和第三题类似,分成了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

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

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