设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1359|回复: 0

Matlab线性规划

[复制链接]

13

主题

152

金钱

235

积分

入门用户

发表于 2018-8-22 11:04:38 | 显示全部楼层 |阅读模式
线性规划.png
该函数的约束包括A·x ≤ b,Aeq·x = beq,l ≤ x ≤ u。用于线性规划求解的函数为linprog函数,该函数的调用格式如下:
  1. x = linprog(f,A,b)
  2. x = linprog(f,A,b,Aeq,beq)
  3. x = linprog(f,A,b,Aeq,beq,lb,ub)
  4. x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
  5. x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
  6. x = linprog(problem)
  7. [x,fval] = linprog(...)
  8. [x,fval,exitflag] = linprog(...)
  9. [x,fval,exitflag,output] = linprog(...)
  10. [x,fval,exitflag,output,lambda] = linprog(...)
复制代码
其中,f为f T x 中的fT ,x为返回的x;A为不等式约束系数矩阵,b为不等式约束的右项;Aeq为等式约束的左项,beq为等式约束的右项;lb、ub分别为x的下限和上限;x0为初始求解点,options为optimset命令设置的选项。fval为求解函数的值;exitflag描述退出条件;output为优化信息数据;lambda参数是解x处的拉格朗日乘子。它有以下一些属性:

  • lambda.lower——lambda的下界;
  • lambda.upper——lambda的上界;
  • lambda.ineqlin——lambda的线性不等式;
  • lambda.eqlin——lambda的线性等式。

此外,MATLAB还提供了bintprog函数用于二进制整数的线性优化。

例11-5,求0.002614 HPS + 0.0239 PP + 0.009825 EP的最小值,约束条件如下:
  1. 2500 ≤ P1 ≤ 6250
  2. I1 ≤ 192,000
  3. C ≤ 62,000
  4. I1 - HE1 ≤ 132,000
  5. I1 = LE1 + HE1 + C
  6. 1359.8I1 = 1267.8 HE1 + 1251.4 LE1 + 192 C + 3413 P1
  7. 3000 ≤ P2 ≤ 9000
  8. I2 ≤ 244,000
  9. LE2 ≤ 142,000
  10. I2 = LE2 + HE2
  11. 1359.8I2 = 1267.8 HE2 + 1251.4 LE2 + 3413 P2
  12. HPS= I1 + I2 + BF1
  13. HPS = C + MPS +
  14. LPSLPS = LE1 + LE2 + BF2
  15. MPS = HE1 + HE2 + BF1 - BF2
  16. P1+ P2 + PP ≥ 24,550
  17. EP+ PP ≥ 12,000
  18. MPS ≥ 271,536
  19. LPS ≥ 100,623
复制代码
且所有变量均为正。

在命令行窗口输入:
  1. %将所有变量名存储到向量中
  2.          variables = {'I1','I2','HE1','HE2','LE1','LE2','C','BF1',
  3.     'BF2','HPS','MPS','LPS','P1','P2','PP','EP'};
  4.          N = length(variables);
  5.          %创建变量编号
  6.          for v = 1:N
  7.          eval([variables{v},' = ', num2str(v),';']);
  8.          end
  9.          %写出目标函数
  10.          f = zeros(size(variables));
  11.          f([HPS PP EP]) = [0.002614 0.0239 0.009825];
  12.          %写出边界条件
  13.          lb = zeros(size(variables));
  14.     lb([P1,P2,MPS,LPS]) = [2500,3000,271536,100623];%下边界
  15.     ub = Inf(size(variables));
  16.     ub([P1,P2,I1,I2,C,LE2]) = [6250,9000,192000,244000,62000,142000];%上边界
  17.     %写出不等式约束
  18.     A = zeros(3,16);
  19.     A(1,I1) = 1; A(1,HE1) = -1; b(1) = 132000;
  20.     A(2,EP) = -1; A(2,PP) = -1; b(2) = -12000;
  21.     A(3,[P1,P2,PP]) = [-1,-1,-1];
  22.     b(3) = -24550;
  23.     %写出等式约束
  24.     Aeq = zeros(8,16); beq = zeros(8,1);
  25.     Aeq(1,[LE2,HE2,I2]) = [1,1,-1];
  26.     Aeq(2,[LE1,LE2,BF2,LPS]) = [1,1,1,-1];
  27.     Aeq(3,[I1,I2,BF1,HPS]) = [1,1,1,-1];
  28.     Aeq(4,[C,MPS,LPS,HPS]) = [1,1,1,-1];
  29.     Aeq(5,[LE1,HE1,C,I1]) = [1,1,1,-1];
  30.     Aeq(6,[HE1,HE2,BF1,BF2,MPS]) = [1,1,1,-1,-1];
  31.     Aeq(7,[HE1,LE1,C,P1,I1]) = [1267.8,1251.4,192,3413,-1359.8];
  32.     Aeq(8,[HE2,LE2,P2,I2]) = [1267.8,1251.4,3413,-1359.8];
  33.     %求解:
  34.     [x fval] = linprog(f,A,b,Aeq,beq,lb,ub);
  35.     for d = 1:N
  36.     fprintf('%s\t\t %12.2f \n',variables{d},x(d))
  37.     end
  38.     fval
复制代码
输出结果如下:
  1. Optimization terminated.
  2. I1        136328.74
  3. I2        244000.00
  4. HE1       128159.00
  5. HE2       143377.00
  6. LE1       0.00
  7. LE2       100623.00
  8. C         8169.74
  9. BF1       0.00
  10. BF2       0.00
  11. HPS       380328.74
  12. MPS       271536.00
  13. LPS       100623.00
  14. P1        6250.00
  15. P2        7060.71
  16. PP        11239.29
  17. EP        760.71
  18. fval =         1.2703e+03
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表