数学建模期末复习,撰写博客做总结之用,主要侧重于算例的模型建立与部分代码的实现,其中不足之处望读者多多指正。
利用matlab求解两个线性规划问题,做复习总结用,详细知识读者可先移步他处学习,不足之处望多多指正。
1.x=linprog(c,A,b,Aeq,beq, VLB,VUB)
2.[x,fval]=linprog(…)
fval为目标函数值
详细讲解可查看matlab的heip文档
任务分配问题:某车间有甲、乙两台机床,可用于加工三种工件.假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表.问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?
设在甲车床上加工工件1、2、3的数量分别为 x 1 x_1 x1、 x 2 x_2 x2、 x 3 x_3 x3,在乙车床上加工工件1、2、3的数量分别为 x 4 x_4 x4、 x 5 x_5 x5、 x 6 x_6 x6,可建立以下线性规划模型:
min z = 13 x 1 + 9 x 2 + 10 x 3 + 11 x 4 + 12 x 5 + 8 x 6 { x 1 + x 4 = 400 x 2 + x 5 = 600 x 3 + x 6 = 500 0.4 x 1 + 1.1 x 2 + x 3 ≤ 800 0.5 x 4 + 1.2 x 5 + 1.3 x 6 ≤ 900 x i ≥ 0 , i = 1 , 2 , ⋯ , 6 \begin{aligned} &\min z=13 x_{1}+9 x_{2}+10 x_{3}+11 x_{4}+12 x_{5}+8 x_{6}\\ &\begin{array}{l} \quad\left\{\begin{array}{l} \mathrm{x}_{1}+x_{4}=400 \\ x_{2}+x_{5}=600 \\ x_{3}+x_{6}=500 \\ 0.4 x_{1}+1.1 x_{2}+x_{3} \leq 800 \\ 0.5 x_{4}+1.2 x_{5}+1.3 x_{6} \leq 900 \\ x_{i} \geq 0, i=1,2, \cdots, 6 \end{array}\right. \end{array} \end{aligned} minz=13x1+9x2+10x3+11x4+12x5+8x6⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x1+x4=400x2+x5=600x3+x6=5000.4x1+1.1x2+x3≤8000.5x4+1.2x5+1.3x6≤900xi≥0,i=1,2,⋯,6
c=[13 9 10 11 12 8];
A=[0.04 1.1 1 0 0 0;0 0 0 0.5 1.2 1.3;];
b=[800;900];
Aeq=[1 0 0 1 0 0;0 1 0 0 1 0;0 0 1 0 0 1]; beq=[400 600 500];
vlb=[0;0;0;0;0;0]; vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
输出:x =
0.0000
600.0000
0.0000
400.0000
0.0000
500.0000
fval =
1.3800e+04
某厂每日8小时的产量不低于1800件.为了进行质量控制,计划聘请两种不同水平的检验员.一级检验员的标准为:速度25件/小时,正确率98%,计时工资4元/小时;二级检验员的标准为:速度15件/小时,正确率95%,计时工资3元/小时.检验员每错检一次,工厂要损失2元.为使总检验费用最省,该工厂应聘一级、二级检验员各几名?
设需要一级和二级检验员的人数分别为 x 1 x_1 x1、 x 2 x_2 x2人,则应付检验员的工资为:
32 x 1 + 24 x 2 32x_1+24x_2 32x1+24x2
因检验员错检而造成的损失为:
8 x 1 + 12 x 2 8x_1+12x_2 8x1+12x2
故得规划模型为:
min z = 32 x 1 + 24 x 2 ) + ( 8 x 1 + 12 x 2 ) = 40 x 1 + 36 x 2 st. { 8 × 25 × x 1 + 8 × 15 × x 2 ≥ 1800 8 × 25 × x 1 ≤ 1800 8 × 15 × x 2 ≤ 1800 x 1 ≥ 0 , x 2 ≥ 0 \begin{aligned} &\min z=32 x_{1}+24 x_{2})+(8 x_{1}+12 x_{2})=40 x_{1}+36 x_{2} \\ &\text { st. }\left\{\begin{array}{l} 8 \times 25 \times x_{1}+8 \times 15 \times x_{2} \geq 1800 \\ 8 \times 25 \times x_{1} \leq 1800 \\ 8 \times 15 \times x_{2} \leq 1800 \\ x_{1} \geq 0, x_{2} \geq 0 \end{array}\right. \end{aligned} minz=32x1+24x2)+(8x1+12x2)=40x1+36x2 st. ⎩⎪⎪⎨⎪⎪⎧8×25×x1+8×15×x2≥18008×25×x1≤18008×15×x2≤1800x1≥0,x2≥0
化简得:
min z = 40 x 1 + 36 x 2 st. { 5 x 1 + 3 x 2 ≥ 45 x 1 ≤ 9 x 2 ≤ 15 x 1 ≥ 0 , x 2 ≥ 0 \begin{aligned} &\min z=40 x_{1}+36 x_{2}\\ &\text { st. }\left\{\begin{array}{l} 5 x_{1}+3 x_{2} \geq 45 \\ x_{1} \leq 9 \\ x_{2} \leq 15 \\ x_{1} \geq 0, x_{2} \geq 0 \end{array}\right. \end{aligned} minz=40x1+36x2 st. ⎩⎪⎪⎨⎪⎪⎧5x1+3x2≥45x1≤9x2≤15x1≥0,x2≥0
c=[40 36];
A=[-5 -3];
b=[-45];
Aeq=[]; beq=[];
vlb=[0;0]; vub=[9;15];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
输出结果:
x =9.0000 ;0.0000 fval =360
即最优方案为招募9名一级工