第一章线性规划 §1线性规划 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济 效益的问题。此类问题构成了运筹学的一个重要分支一数学规划,而线性规划( Linear Programming简记LP)则是数学规划的一个重要分支。自从1947年GB. Dantzig提出 求解线性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深 入。特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性 规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之 1线性规划的实例与定义 例1某机床厂生产甲、乙两种机床,每台销售后的利润分别为4000元与3000元。 生产甲机床需用A、B机器加工,加工时间分别为每台2小时和1小时;生产乙机床 需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时 数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各 几台,才能使总利润最大? 上述问题的数学模型:设该厂生产x1台甲机床和x2乙机床时总利润最大,则x12x 应满足 (目标函数)max二=4x1+3 (1) 2x1+x2≤10 x+x2≤8 st.(约束条件) (2) 2s7 x1,x20 这里变量x1,x2称之为决策变量,(1)式被称为问题的目标函数,(2)中的几个不等式 是问题的约束条件,记为st(即 subject to)。上述即为一规划问题数学模型的三个要素 由于上面的目标函数及约束条件均为线性函数,故被称为线性规划问题 总之,线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最 小的问题。 在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往 也是困难的一步,模型建立得是否恰当,直接影响到求解。而选取适当的决策变量,是 我们建立有效模型的关键之一。 12线性规划的 Matlab标准形式 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以 是小于号也可以是大于号。为了避免这种形式多样性带来的不便, Matlab中规定线性 规划的标准形式为 min cx such that ax≤b 其中C和x为n维列向量,b为m维列向量,A为m×n矩阵。 例如线性规划 max c'x such that Ax≥b 的 Matlab标准型为
-1- 第一章 线性规划 §1 线性规划 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济 效益的问题。此类问题构成了运筹学的一个重要分支—数学规划,而线性规划(Linear Programming 简记 LP)则是数学规划的一个重要分支。自从 1947 年 G. B. Dantzig 提出 求解线性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深 入。特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性 规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之一。 1.1 线性规划的实例与定义 例 1 某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元。 生产甲机床需用 A、B 机器加工,加工时间分别为每台 2 小时和 1 小时;生产乙机床 需用 A、B、C 三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时 数分别为 A 机器 10 小时、 B 机器 8 小时和 C 机器 7 小时,问该厂应生产甲、乙机床各 几台,才能使总利润最大? 上述问题的数学模型:设该厂生产 1 x 台甲机床和 2 x 乙机床时总利润最大,则 1 2 x , x 应满足 (目标函数) max 4 1 3 2 z = x + x (1) s.t.(约束条件) + + , 0 7 8 2 10 1 2 2 1 2 1 2 x x x x x x x (2) 这里变量 1 2 x , x 称之为决策变量,(1)式被称为问题的目标函数,(2)中的几个不等式 是问题的约束条件,记为 s.t.(即 subject to)。上述即为一规划问题数学模型的三个要素。 由于上面的目标函数及约束条件均为线性函数,故被称为线性规划问题。 总之,线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最 小的问题。 在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往 也是困难的一步,模型建立得是否恰当,直接影响到求解。而选取适当的决策变量,是 我们建立有效模型的关键之一。 1.2 线性规划的 Matlab 标准形式 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以 是小于号也可以是大于号。为了避免这种形式多样性带来的不便,Matlab 中规定线性 规划的标准形式为 c x Ax b x T min such that 其中 c 和 x 为 n 维列向量, b 为 m 维列向量, A 为 mn 矩阵。 例如线性规划 c x Ax b x T max such that 的 Matlab 标准型为
min -cx such that -Ax <-b x 1.3线性规划问题的解的概念 般线性规划问题的标准型为 mm二 anx,≤bi=12 可行解满足约束条件(4)的解x=(x1,x2…xn),称为线性规划问题的可行解, 而使目标函数(3)达到最小值的可行解叫最优解。 可行域所有可行解构成的集合称为问题的可行域,记为R。 14线性规划的图解法 X2=10 x1+X28 图解法简单直观,有助于了解线性规划问题求解的基本原理。我们先应用图解法来 求解例1。如上图所示,阴影区域即为LP问题的可行域R。对于每一固定的值z,使 目标函数值等于z的点构成的直线称为目标函数等位线,当z变动时,我们得到一族平 行直线。让等位线沿目标函数值减小的方向移动,直到等位线与可行域有交点的最后位 置,此时的交点(一个或多个)即为LP的最优解 对于例1,显然等位线越趋于右上方,其上的点具有越大的目标函数值。不难看出 本例的最优解为x*=(2,6),最优目标值*=26 从上面的图解过程可以看出并不难证明以下断言: (1)可行域R可能会出现多种情况。R可能是空集也可能是非空集合,当R非空 时,它必定是若干个半平面的交集(除非遇到空间维数的退化)。R既可能是有界区域, 也可能是无界区域 2)在R非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其 目标函数值无界) (3)R非空且LP有有限最优解时,最优解可以唯一或有无穷多个。 )若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域R的 上述论断可以推广到一般的线性规划问题,区别只在于空间的维数。在一般的n维
-2- c x Ax b x T min − such that − − 1.3 线性规划问题的解的概念 一般线性规划问题的标准型为 = = n j j j z c x 1 min (3) = = n j aij x j bi i m 1 s.t. 1,2,, (4) 可行解 满足约束条件(4)的解 ( , , , ) 1 2 n x = x x x ,称为线性规划问题的可行解, 而使目标函数(3)达到最小值的可行解叫最优解。 可行域 所有可行解构成的集合称为问题的可行域,记为 R 。 1.4 线性规划的图解法 0 2 4 6 8 10 0 1 2 3 4 5 6 7 8 9 10 x2=7 2x1+x2=10 x1+x2=8 z=12 (2,6) 图解法简单直观,有助于了解线性规划问题求解的基本原理。我们先应用图解法来 求解例 1。如上图所示,阴影区域即为 LP 问题的可行域 R。对于每一固定的值 z ,使 目标函数值等于 z 的点构成的直线称为目标函数等位线,当 z 变动时,我们得到一族平 行直线。让等位线沿目标函数值减小的方向移动,直到等位线与可行域有交点的最后位 置,此时的交点(一个或多个)即为 LP 的最优解。 对于例 1,显然等位线越趋于右上方,其上的点具有越大的目标函数值。不难看出, 本例的最优解为 T x* = (2,6) ,最优目标值 z* = 26 。 从上面的图解过程可以看出并不难证明以下断言: (1)可行域 R 可能会出现多种情况。 R 可能是空集也可能是非空集合,当 R 非空 时,它必定是若干个半平面的交集(除非遇到空间维数的退化)。 R 既可能是有界区域, 也可能是无界区域。 (2)在 R 非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其 目标函数值无界)。 (3)R 非空且 LP 有有限最优解时,最优解可以唯一或有无穷多个。 (4)若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域 R 的 “顶点”。 上述论断可以推广到一般的线性规划问题,区别只在于空间的维数。在一般的 n 维
空间中,满足一线性等式∑ax=b的点集被称为一个超平面,而满足一线性不等式 ∑ax,≤b(或∑ax≥b)的点集被称为一个半空间(其中(a1…an)为一n维行 向量,b为一实数)。有限个半空间的交集被称为多胞形,有界的多胞形又被称为多面 体。易见,线性规划的可行域必为多胞形(为统一起见,空集Φ也被视为多胞形)。 在一般n维空间中,要直接得出多胞形“顶点”概念还有一些困难。二维空间中的顶点 可以看成为边界直线的交点,但这一几何概念的推广在一般n维空间中的几何意义并不 十分直观。为此,我们将采用另一途径来定义它。 定义1称n维空间中的区域R为一凸集,若x,x2∈R及V∈(O,),有 ax2+(1-4)x2∈R 定义2设R为n维空间中的一个凸集,R中的点x被称为R的一个极点,若不 存在x、x2∈R及∈(01),使得x=x2+(1-1)x2。 定义1说明凸集中任意两点的连线必在此凸集中;而定义2说明,若x是凸集R 的一个极点,则x不能位于R中任意两点的连线上。不难证明,多胞形必为凸集。同 样也不难证明,二维空间中可行域R的顶点均为R的极点(R也没有其它的极点)。 1.5求解线性规划的 Matlab解法 单纯形法是求解线性规划问题的最常用、最有效的算法之一。单纯形法是首先由 George Dantzig于1947年提出的,近60年来,虽有许多变形体已被开发,但却保持着 同样的基本观念。由于有如下结论:若线性规划问题有有限最优解,则一定有某个最优 解是可行区域的一个极点。基于此,单纯形法的基本思路是:先找出可行域的一个极点 据一定规则判断其是否最优;若否,则转换到与之相邻的另一极点,并使目标函数值更 优:如此下去,直到找到某一最优解为止。这里我们不再详细介绍单纯形法,有兴趣的 读者可以参看其它线性规划书籍。下面我们介绍线性规划的 Matlab解法 Matlab53中线性规划的标准型为 min cx such that Ax≤b 基本函数形式为 linprog(cA,b),它的返回值是向量x的值。还有其它的一些函数调用形 式(在 Matlab指令窗运行 help linprog可以看到所有的函数调用形式),如: [x, fval]=linprog(c, A, b, Aeq, beq, LB, UB, Xo, OPTIONS 这里fal返回目标函数的值,A和beq对应等式约束Aeq*x=beq,LB和UB分别 是变量x的下界和上界,x0是x的初始值, OPTIONS是控制参数。 例2求解下列线性规划问题 max ==2 x1+3 7 2x1-5x2+x3≥10 x1,x2,x3≥0 解(i)编写M文件 c=[2;3;-5] a=[-2,5,-1];b=-10; aeq=[1,1,1]
-3- 空间中,满足一线性等式 = = n i ai xi b 1 的点集被称为一个超平面,而满足一线性不等式 = n i ai xi b 1 (或 = n i ai xi b 1 )的点集被称为一个半空间(其中 ( , , ) a1 an 为一 n 维行 向量, b 为一实数)。有限个半空间的交集被称为多胞形,有界的多胞形又被称为多面 体。易见,线性规划的可行域必为多胞形(为统一起见,空集 也被视为多胞形)。 在一般 n 维空间中,要直接得出多胞形“顶点”概念还有一些困难。二维空间中的顶点 可以看成为边界直线的交点,但这一几何概念的推广在一般 n 维空间中的几何意义并不 十分直观。为此,我们将采用另一途径来定义它。 定义 1 称 n 维空间中的区域 R 为一凸集,若 x x R 1 2 , 及 (0,1) ,有 x + − x R 1 2 (1 ) 。 定义 2 设 R 为 n 维空间中的一个凸集, R 中的点 x 被称为 R 的一个极点,若不 存在 x x R 1 、 2 及 (0,1) ,使得 1 2 x = x + (1− )x 。 定义 1 说明凸集中任意两点的连线必在此凸集中;而定义 2 说明,若 x 是凸集 R 的一个极点,则 x 不能位于 R 中任意两点的连线上。不难证明,多胞形必为凸集。同 样也不难证明,二维空间中可行域 R 的顶点均为 R 的极点( R 也没有其它的极点)。 1.5 求解线性规划的 Matlab 解法 单纯形法是求解线性规划问题的最常用、最有效的算法之一。单纯形法是首先由 George Dantzig 于 1947 年提出的,近 60 年来,虽有许多变形体已被开发,但却保持着 同样的基本观念。由于有如下结论:若线性规划问题有有限最优解,则一定有某个最优 解是可行区域的一个极点。基于此,单纯形法的基本思路是:先找出可行域的一个极点, 据一定规则判断其是否最优;若否,则转换到与之相邻的另一极点,并使目标函数值更 优;如此下去,直到找到某一最优解为止。这里我们不再详细介绍单纯形法,有兴趣的 读者可以参看其它线性规划书籍。下面我们介绍线性规划的 Matlab 解法。 Matlab5.3 中线性规划的标准型为 c x Ax b T x min such that 基本函数形式为 linprog(c,A,b),它的返回值是向量 x 的值。还有其它的一些函数调用形 式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式),如: [x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS) 这里 fval 返回目标函数的值,Aeq 和 beq 对应等式约束 Aeq * x = beq ,LB 和 UB 分别 是变量 x 的下界和上界, 0 x 是 x 的初始值,OPTIONS 是控制参数。 例 2 求解下列线性规划问题 max 2 1 3 2 5 3 z = x + x − x − + + + = , , 0 2 5 10 7 1 2 3 1 2 3 1 2 3 x x x x x x x x x 解 (i)编写 M 文件 c=[2;3;-5]; a=[-2,5,-1]; b=-10; aeq=[1,1,1];
x=linprog(-C, a,b, aeq, beq, zeros(3, 1)) value=c!大 (i)将M文件存盘,并命名为 example. m (ii)在 Matlab指令窗运行 example即可得所求结果 例3求解线性规划问题 min ==2x, +3x,+x, x1+4x2+2x3≥8 3x1+2x2≥6 x1x2,x3≥0 解编写 Matlab程序如下 C=[2;3;1] a=[1,4,2;3,2,0] b=[8;6]; Lx, y]=linprog(c, -a, -b, 0,0, zeros(3, 1)) 16可以转化为线性规划的问题 很多看起来不是线性规划的问题也可以通过变换变成线性规划问题来解决。如: 例4问题为 mn|x1|+|x2|+…+|xn Ax≤b 其中x=[x1…xn,A和b为相应维数的矩阵和向量 要把上面的问题变换成线性规划问题,只要注意到事实:对任意的x1,存在 l,v,>0满足 ,=u-v,x,,+ 事实上,我们只要取=+互,12=二就可以满足上面的条件 这样,记u={n1…uny,v=v1…vnJ,从而我们可以把上面的问题 变成 min ∑(1+,) 「A(u-y)≤b l2p≥0 §2运输问题(产销平衡) 例5某商品有m个产地、n个销地,各产地的产量分别为a1,…an,各销地的 需求量分别为b,…b,。若该商品由i产地运到j销地的单位运价为c,问应该如何调 运才能使总运费最省? 解:引入变量x,其取值为由i产地运往j销地的该商品数量,数学模型为
-4- beq=7; x=linprog(-c,a,b,aeq,beq,zeros(3,1)) value=c'*x (ii)将M文件存盘,并命名为example1.m。 (iii)在Matlab指令窗运行example1即可得所求结果。 例3 求解线性规划问题 min 2 1 3 2 3 z = x + x + x + + + , , 0 3 2 6 4 2 8 1 2 3 1 2 1 2 3 x x x x x x x x 解 编写Matlab程序如下: c=[2;3;1]; a=[1,4,2;3,2,0]; b=[8;6]; [x,y]=linprog(c,-a,-b,[],[],zeros(3,1)) 1.6 可以转化为线性规划的问题 很多看起来不是线性规划的问题也可以通过变换变成线性规划问题来解决。如: 例4 问题为 Ax b x x xn + + + s. t. min | | | | | | 1 2 其中 T n x [x x ] = 1 , A 和 b 为相应维数的矩阵和向量。 要把上面的问题变换成线性规划问题,只要注意到事实:对任意的 i x ,存在 ui , vi 0 满足 i i i x = u − v , i i i | x |= u + v 事实上,我们只要取 2 | | i i i x x u + = , 2 | | i i i x x v − = 就可以满足上面的条件。 这样,记 T u u un [ ] = 1 , T n v [v v ] = 1 ,从而我们可以把上面的问题 变成 = + n i i i u v 1 min ( ) − , 0 ( ) s. t. u v A u v b §2 运输问题(产销平衡) 例 5 某商品有 m 个产地、 n 个销地,各产地的产量分别为 a am , , 1 ,各销地的 需求量分别为 b bn , , 1 。若该商品由 i 产地运到 j 销地的单位运价为 ij c ,问应该如何调 运才能使总运费最省? 解:引入变量 ij x ,其取值为由 i 产地运往 j 销地的该商品数量,数学模型为
min C st{2x=b,j=12,…,n xn≥0 显然是一个线性规划问题,当然可以用单纯形法求解。 对产销平衡的运输问题,由于有以下关系式存在: ∑b a 其约束条件的系数矩阵相当特殊,可用比较简单的计算方法,习惯上称为表上作业法(由 康托洛维奇和希奇柯克两人独立地提出,简称康一希表上作业法) 表上作业法是单纯形法在求解运输问题时的一种简化方法,其求解工作在运输表上 进行逐步迭代如下:先按某一规则找出一个初始解(初始调运方案):再对现行解作最 优性判断:若这个解不是最优的,就在运输表上对它进行调整改进,得一新解;再判断 再改进,直到得到最优解。 §3指派问题(又称分配问题 Assignment Problem) 3.1指派问题的数学模型 例6拟分配η人去干n项工作,每人干且仅干一项工作,若分配第i人去干第 项工作,需花费c单位时间,问应如何分配工作才能使工人花费的总时间最少? 容易看出,要给出一个指派问题的实例,只需给出矩阵C=(cn),C被称为指派 问题的系数矩阵。 引入变量x,若分配i干j工作,则取x1=1,否则取x=0。上述指派问题的 数学模型为 min x=1,=1,2, 1,j=1 xn=0或1,ij=1,2,…,n (5)的可行解既可以用一个矩阵(称为解矩阵)表示,其每行每列均有且只有一个元 素为1,其余元素均为0,也可以用1,…,n中的一个置换表示
-5- = = m i n j ij ij c x 1 1 min s.t. = = = = = = 0 , 1,2, , , 1, , 1 1 ij m i ij j n j ij i x x b j n x a i m 显然是一个线性规划问题,当然可以用单纯形法求解。 对产销平衡的运输问题,由于有以下关系式存在: = = = = = = = = = m i i n j n j m i ij m i n j bj xij x a 1 1 1 1 1 1 其约束条件的系数矩阵相当特殊,可用比较简单的计算方法,习惯上称为表上作业法(由 康托洛维奇和希奇柯克两人独立地提出,简称康—希表上作业法)。 表上作业法是单纯形法在求解运输问题时的一种简化方法,其求解工作在运输表上 进行逐步迭代如下:先按某一规则找出一个初始解(初始调运方案);再对现行解作最 优性判断;若这个解不是最优的,就在运输表上对它进行调整改进,得一新解;再判断, 再改进,直到得到最优解。 §3 指派问题(又称分配问题 Assignment Problem) 3.1 指派问题的数学模型 例 6 拟分配 n 人去干 n 项工作,每人干且仅干一项工作,若分配第 i 人去干第 j 项工作,需花费 ij c 单位时间,问应如何分配工作才能使工人花费的总时间最少? 容易看出,要给出一个指派问题的实例,只需给出矩阵 ( ) ij C = c ,C 被称为指派 问题的系数矩阵。 引入变量 ij x ,若分配 i 干 j 工作,则取 xij = 1 ,否则取 xij = 0 。上述指派问题的 数学模型为 = = n i n j ij ij c x 1 1 min s.t. 0 1,i, j 1,2, ,n 1, 1,2, , 1, 1,2, , 1 1 = = = = = = = = ij 或 n i ij n j ij x x j n x i n (5) (5)的可行解既可以用一个矩阵(称为解矩阵)表示,其每行每列均有且只有一个元 素为 1,其余元素均为 0,也可以用 1, ,n 中的一个置换表示