线性规划问题与单纯形法


线性规划是运筹学中一个很重要的分支,本文通过一个实例简单的介绍一下什么是线性规划问题,以及单纯形法的计算步骤。


问题 : 在一个工厂中,有两种产品A与B,它们的单价分别为6元与7元。A产品需要2千克原料P与4千克原料Q,而B产品需要3千克P与1千克Q,且P原料总数为16千克,Q原料总数为12千克,设计一种方案,即需要分别生产多少单位A和B可以使得利润最大化?
问题出处 :《运筹学基础及其MATLAB应用》 – 李工农


我们分析上述问题,假设要生产x1单位A,x2单位B,那我们可以得到z = 6 * x1 + 7 * x2,所以我们的问题就转化为了怎样使得z最大。如果只按照上面这一式子求最大值,显然求不出来,故我们需要增加一些约束条件。因为P与Q原料是有限的,所以我们很容易得出2 * x1 + 3 * x2应该小与等于16,同时4 * x1 + 1 * x2应该小与等于12。此外,由于生产单位数不可能是负数,所以还应增加一约束条件x1 >= 0,x2 >= 0。我们将上面几个式子汇总一下,max表示求最大,s.t.(subject to)表示约束条件:
max z = 6 * x1 + 7 * x2
s.t.
2 * x1 + 3 * x2 <= 16
4 * x1 + 1 * x2 <= 12
x1,x2 >= 0

此时,我们再引入两个剩余参数x3与x4,目的是使得约束条件的前两个式子能够左右相等,由于前两个不等式左边恒小与等于右边,所以我们将x3与x4分别放到这两个式子左边,为了能够左右两边值相同,x3与x4必大于等于0。
max z = 6 * x1 + 7 * x2
s.t.
2 * x1 + 3 * x2 + x3 = 16
4 * x1 + 1 * x2 + x4 = 12
x1,x2,x3,x4 >= 0

上式就是一个标准的线性规划模型,现在给出线性规划的通俗定义,形如
max z = cTX
s.t.
Σ j = 1 n P j x j = b \Sigma{^n_{j=1}}P_jx_j = b Σj=1nPjxj=b
x j &gt; = 0 ( j = 1 , 2 , . . . , n ) x_j &gt;= 0 (j = 1,2,...,n) xj>=0(j=1,2,...,n)

这类模型的问题都可以划为线性规划的范畴。其中,cT等价于上面问题中的[6,7,0,0],称作价值系数,X表示[x1,x2,x3,x4]T,称作决策变量,b表示[16,12]T,称作资源系数,最后P表示[2,3,1,0 ;4,1,0,1],称作技术系数。另外我们称z为目标函数,我们需要求的便是目标函数的最优解。


到现在,我们已经大致明白了线性规划问题究竟是什么样的一个模型。然后,我们还需要知道一些线性规划中一些名词:

  • 可行解:满足全部约束条件的解
  • 可行域:可行解所构成的集合
  • 最优解:所有可行解对应的目标函数值中,最大的一个值所对应的解
  • 基:假设技术系数P是一个m x n的一个矩阵,其秩rank ( P ) = m,n >= m我们可以知道P中至少有m个线性无关的列向量,我们将这m个列向量组成一个新的矩阵,记作B,这就是一组基。例如问题中P = [2,3,1,0; 4,1,0,1],则我们可以挑出一组线性无关的列向量(基)[1,0; 0,1]
  • 基变量:基对应的X称作基变量 X B X_B XB,例如[1,0; 0,1]对应的基变量就是[x3, x4]
  • 非基:顾名思义P矩阵除去基后剩余的矩阵称作非基N,所以P = [B,N]
  • 非基变量 :X除去基变量后剩余的元素称作非基变量 X N X_N XN,X = [ X B , X N X_B,X_N XB,XN]
  • 基解:我们设PX=b(即约束条件中的第一个式子),其等价于(B,N)( X B T , X N T X^T_B,X^T_N XBT,XNT)T = b,化简等于 B X B + N X N = b BX_B + NX_N = b BXB+NXN=b。此时我们令非基变量 X N = 0 X_N = 0 XN=0,可得到 X B = B − 1 b X_B = B^{-1}b XB=B1b,这是我们称由基变量与非基
    变量合成的X,即( b T B − T , 0 b^TB^{-T},0 bTBT,0)是问题的一个基解,显然取基不同,基解也不尽相同
  • 基可行解:在基解中若满足X >= 0,称该基解为基可行解
  • 可行基:基可行解对应的基称作可行基

了解了这些名词后,我们正式引入单纯形法解决这类问题。以下列出了单纯形法的基本步骤:

  1. 先找出一个基可行解,称作初始基可行解
  2. 判断该基可行解是否是最优解
  3. 若判断为最优解算法终止,否则更换基可行解,返回第二步

我们通过解决最初提出的问题更详细的描述一下单纯形法。

  1. 初始条件为P = [2,3,1,0 ; 4,1,0,1],c = (6,7,0,0)T,b = [16,12]T,X = [x1,x2,x3,x4]T
  2. 先找基B,我们可以很容易的发现一对线性无关的单位向量[1,0 ; 0,1],令其为B,N为[2,3 ; 4,1],由于 B X B + N X N = b BX_B + NX_N = b BXB+NXN=b,其中, X B = [ x 3 , x 4 ] T , X N = [ x 1 , x 2 ] T X_B = [x_3,x_4]^T ,X_N = [x_1,x_2]^T XB=[x3,x4]T,XN=[x1,x2]T,令 X N = 0 X_N = 0 XN=0,可以得到 X B = [ 16 , 12 ] T X_B = [16,12]^T XB=[16,12]T,X = [0,0,16,12]T,由于X >= 0,故该解是一个基可行解
  3. 我们由约束方程组可以得到:
    ( 1 ) x 3 = 16 − 2 ∗ x 1 − 3 ∗ x 2 (1)x_3 = 16 - 2 * x_1 - 3 * x_2 (1)x3=16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值