你也能看懂的:线性规划

线性规划 ( Linear Programming ,简称LP )特指目标函数和约束条件皆为线性的最优化问题。在作业研究中所面临的许多实际问题都可以用线性规划来处理,特别是某些特殊情况,例如:网路流、多商品流量等问题,都被认为非常重要。 目前已有大量针对线性规划算法的研究。 很多最优化问题算法都可以分解为线性规划子问题,然后逐一求解。


概念

线性规划问题其实一直陪伴着我们,上中学时有一类题目其实就是简单的线性规划问题。比如:A、B两件商品的利润分别为 2 元与 3 元。同时满足商品 A 的个数加商品 B 的个数不超过8个,A的个数不小于 4 个,B 的个数不大于 5 个,怎样使利润最大?

而面对这类问题时,一般是通过列方程和不等式来构造约束条件,满足线性规划问题约束条件的所有点组成的集合就是线性规划的可行域。若可行域有界,线性规划问题的目标函数最优解必然在可行域的顶点上达到最优

线性规划的一般形式
M a x ( M i n ) z = c 1 x 1 + c 2 x 2 + … + c n x n s . t . { a 11 x 1 + a 12 x 2 + … + a 1 n x n ≥ ( ≤ ) b 1 a 21 x 1 + a 22 x 2 + … + a 2 n x n ≥ ( ≤ ) b 2 … … a m 1 x 1 + a m 2 x 2 + … + a m n x n ≥ ( ≤ ) b m Max(Min) \quad \quad z=c_1x_1+c_2x_2+\ldots+c_nx_n \\ \quad\\ s.t. \begin{cases} a_{11}x_1+a_{12}x_2+\ldots+a_{1n}x_n\geq(\leq)b_1 \\ a_{21}x_1+a_{22}x_2+\ldots+a_{2n}x_n\geq(\leq)b_2\\ \ldots\ldots \\ a_{m1}x_1+a_{m2}x_2+\ldots+a_{mn}x_n\geq(\leq)b_m \end{cases} Max(Min)z=c1x1+c2x2++cnxns.t.a11x1+a12x2++a1nxn()b1a21x1+a22x2++a2nxn()b2am1x1+am2x2++amnxn()bm


案例解读

例题:某厂每日 8 小时的产量不低于 1800 件。为了进行质量控制,计划聘请两种不同水平的检验员。一级检验员的标准为:速度 25件/小时,正确率 98%,计时工资 4元/小时;二级检验员的标准为:速度 15件/小时,正确率 95%,计时工资 3元/小时。检验员没错检一次,工厂要损失 2 元。为使总检验费用最省,该工厂应聘一级、二级检验员各几名?

解题过程:

设需要一级、二级检验员的人数分别为 x 1 、 x 2 x_1、x_2 x1x2 人,则应付检验员的工资为:
8 ∗ 4 ∗ x 1 + 8 ∗ 3 ∗ x 2 = 32 x 1 + 24 x 2 8*4*x_1+8*3*x_2=32x_1+24x_2 84x1+83x2=32x1+24x2

因检验员错检而造成的损失为:
( 8 ∗ 25 ∗ 2 % ∗ x 1 + 8 ∗ 15 ∗ 5 % ∗ x 2 ) ∗ 2 = 8 x 1 + 12 x 2 (8*25*2\%*x_1+8*15*5\%*x_2)*2=8x_1+12x_2 (8252%x1+8155%x2)2=8x1+12x2

则目标函数:
m i n z = ( 32 x 1 + 24 x 2 ) + ( 8 x 1 + 12 x 2 ) = 40 x 1 + 36 x 2 min\quad z=(32x_1+24x_2)+(8x_1+12x_2)=40x_1+36x_2 minz=(32x1+24x2)+(8x1+12x2)=40x1+36x2

约束条件:
{ 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{cases} 8*25*x_1+8*15*x_2\geq 1800 \\ 8*25*x_1\leq 1800 \\ 8*15*x_2\leq 1800 \\ x_1\geq 0 \\ x_2\geq 0 \end{cases} 825x1+815x21800825x11800815x21800x10x20

使用 MatLab 语言

其自带一个优化函数:linprog()

%首先输入下列系数:
c = [40; 36];
A=[-5 -3];
b=[-45];
Aeq=[];
beq=[];
vlb = zeros(2, 1);
vub=[9; 15];
%然后调用linprog函数:
[x,fval] = linprog(c, A, b, Aeq, beq, vlb, vub)

结果为:
在这里插入图片描述
只需聘用 9 个一级检察员

而且这题需要注意的是结果必须为整数,程序得出的结果正好为整数,则不需要进行下一步的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值