1、用 MATLAB 优化工具箱解线性规划min z=cX bAXts.1、模型:命令:x=linprog(c,A,b ) 2、模型:beqX .mintsz命令:x=linprog(c,A,b ,Aeq,beq)注意:若没有不等式: 存在,则令 A= ,b= . 若没有等式约束, 则令 Aeq= , beq= .3、模型: VUBXL beqA .mintscz命令:1 x=linprog(c,A,b,Aeq,beq, VLB,VUB)2 x=linprog(c,A,b,Aeq,beq, VLB,VUB, X0) 注意:1 若没有等式约束, 则令 Aeq= , beq= . 2其中 X0 表示初
2、始点 4、命令:x,fval=linprog()返回最优解及处的目标函数值 fval.例 1 max 654321 .0.72.0.8.04. xxxz 83. ts5.24.908.036x,21jxj解 编写 M 文件小 xxgh1.m 如下:c=-0.4 -0.28 -0.32 -0.72 -0.64 -0.6;A=0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08;b=850;700;100;900;Aeq=; beq=;vlb=0;0;0;0;0;0; vub=;x,f
3、val=linprog(c,A,b,Aeq,beq,vlb,vub)例 2 32146minxz10.ts5023x解: 编写 M 文件 xxgh2.m 如下:c=6 3 4;A=0 1 0;b=50;Aeq=1 1 1;beq=120;vlb=30,0,20;vub=; x,fval=linprog(c,A,b,Aeq,beq,vlb,vub例 3 (任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为 800 和 900,三种工件的数量分别为 400、600 和 500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车
4、床的加工任务,才能既满足加工工件的要求,又使加工费用最低?解 设在甲车床上加工工件 1、2、3 的数量分别为 x1、x2、x3,在乙车床上加工工件 1、2、3 的数量分别为 x4、x5、x6。可建立以下线性规划模型: 6542 809minxxxz 6,21,0903.5.846535241ixxtsi编写 M 文件 xxgh3.m 如下:f = 13 9 10 11 12 8;A = 0.4 1.1 1 0 0 00 0 0 0.5 1.2 1.3;单 位 工 件 所 需 加 工 台 时 数 单 位 工 件 的 加 工 费 用 车 床类 型 工 件 1 工 件 2 工 件 3 工 件 1 工
5、 件 2 工 件 3 可 用 台时 数 甲 0.4 1. 1.0 13 9 10 80 乙 0.5 1.2 1.3 1 12 8 90 b = 800; 900;Aeq=1 0 0 1 0 00 1 0 0 1 00 0 1 0 0 1;beq=400 600 500;vlb = zeros(6,1);vub=;x,fval = linprog(f,A,b,Aeq,beq,vlb,vub)例 4某厂每日 8 小时的产量不低于 1800 件。为了进行质量控制,计划聘请两种不同水平的检验员。一级检验员的标准为:速度 25 件/小时,正确率 98%,计时工资 4 元/ 小时;二级检验员的标准为:速度
6、 15 小时/件,正确率 95%,计时工资 3 元/ 小时。检验员每错检一次,工厂要损失 2 元。为使总检验费用最省,该工厂应聘一级、二级检验员各几名?解 设需要一级和二级检验员的人数分别为 x1、x2 人,则应付检验员的工资为:因检验员错检而造成的损失为:故目标函数为:约束条件为:线性规划模型:编写 M 文件 xxgh4.m 如下:c = 40;36;A=-5 -3;b=-45;Aeq=;beq=;21214384xx2121 8)%525( x212121 3640)8()43(minxxz 0,185212x21364minxz0,59 .21xtsvlb = zeros(2,1);vu
7、b=9;15; %调用 linprog 函数:x,fval = linprog(c,A,b,Aeq,beq,vlb,vub)结果为:x =9.00000.0000fval =360即只需聘用 9 个一级检验员。Matlab 优化工具箱简介1.MATLAB 求解优化问题的主要函数2.优化函数的输入变量使用优化函数或优化工具箱中其它优化函数时, 输入变量见下表:3. 优化函数的输出变量下表:类 型 模 型 基 本 函 数 名 一 元 函 数 极 小 Min F( x) s.tx10,则 x为 解 ;否 则 ,x不 是 最 终 解 ,它 只 是 迭 代 制 止时 优 化 过 程 的 值 所 有 优
8、化 函 数 fval 解 x处 的 目 标 函 数 值 linprog,quadprog,fgoaltain, fmcnfminmaxlsqcurveftlsqol, fminbd exitflag 描 述 退 出 条 件 : exitflag0,表 目 标 函 数 收 敛 于 解 x处 =表 已 达 到 函 数 评 价 或 迭 代的 最 大 次 数 exitflag 0,且 a11 a12;同理, p2 = b2 - a21 x1- a22 x2 , b2, a21, a22 02成本与产量成负指数关系甲的成本随其产量的增长而降低,且有一个渐进值,可以假设为负指数关系,即:,111 crce
9、rqx同理, 0222模型建立总利润为: z(x1,x2)=(p1-q1)x1+(p2-q2)x2若根据大量的统计数据,求出系数 b1=100,a11=1,a12=0.1,b2=280,a21=0.2,a22=2,r1=30,1=0.015,c1=20, r2=100,2=0.02,c2=30,则问题转化为无约束优化问题:求甲,乙两个牌号的产量 x1,x2,使总利润 z 最大.为简化模型,先忽略成本,并令 a12=0,a21=0,问题转化为求:z1 = ( b1 - a11x1 ) x1 + ( b2 - a22x2 ) x2 的极值. 显然其解为 x1 = b1/2a11 = 50, x2
10、= b2/2a22 = 70,我们把它作为原问题的初始值.模型求解1.建立 M-文件 fun.m: function f = fun(x)y1=(100-x(1)- 0.1*x(2)-(30*exp(-0.015*x(1)+20)*x(1);y2=(280-0.2*x(1)- 2*x(2)-(100*exp(-0.02*x(2)+30)*x(2);f=-y1-y2;2.输入命令:x0=50,70;x=fminunc(fun,x0),z=fun(x)3.计算结果:x=23.9025, 62.4977, z=6.4135e+003即甲的产量为 23.9025,乙的产量为 62.4977,最大利润为 6413.5.非线性规划1、 二次规划用 MATLAB 软件求解,其输入格式如下:1. x=quadprog(H,C,A,b);2. x=quadprog(H,C,A,b,Aeq,beq);3. x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);4. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0);标 准 型 为 : Min Z= 2XTH+cTX s.t AX=b beq VLB X VUB