第一章线性规划 §1线性规划 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济 效益的问题。此类问题构成了运筹学的一个重要分支 数学规划,而线性规划Linea 学规划 里安万 自从 1947 年GB.Dantzig提出 是 规的适用 能处成来 的 性 题之后,线 常采用的基 1.1线性规划 例1某机床厂生产甲、乙两种机床,每台销售后的利润分别为4000元与3000元。 生产甲机床需用A、B机器加工,加工时间分别为每台2小时和1小时:生产乙机床 需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时 数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各 几台,才能使总利润最大? 上述问题的数学模型:设该厂生产x,台甲机床和x2乙机床时总利润最大,则x,x 应满足 (目标函数)max 2=4x1+3x 2x+x2≤10 st(约束条件) x+x2≤8 x3≤7 (2) (5,≥0 这里变量x,x、称之为决策变量,(1)式被称为问题的目标函数,(2)中的几个不等式 问题的的市 由于上面的目标函数及约束条件均为线性 总之,线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最 小的问题。 在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往 也是困难的一步,模型建立得是否恰当,直接影响到求解。而选适当的决策变量,是我 们建立有效模型的关键之 .2线性规划的Matlab标准形式 大于考为T免这种形式是性福来的不,定线 (可以是求最 小值,约束条 牛的不 规划的标 为 minc'x (Axsb Aeg.x=beq b≤x≤b 其中c和x为n维列向量,A、Ag为适当维数的矩阵,b、beg为适当维数的列向
-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 应满足 (目标函数) 1 2 max z = 4x + 3x (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 x T min s.t. ⎪ ⎩ ⎪ ⎨ ⎧ ≤ ≤ ⋅ = ≤ lb x ub Aeq x beq Ax b 其中 c 和 x 为 n 维列向量, A 、 Aeq 为适当维数的矩阵,b 、beq 为适当维数的列向 量
例如线性规划 maxc'xst.Ar≥b 的Matlab标准型为 min -c'x s.t.-Axs-b 1性唇务标准型为 般线性, 2ax,=6112,m sL (4 x,20j=1,2,.,n 可行解满足约束条件(4)的解x=(x,x2,x,),称为线性规划问题的可行解 而使目标函数(3)达到最大值的可行解叫最优解。 可行域所有可行解构成的集合称为问题的可行域,记为R。 1,4线性规划的图解法 A1+M2*10 2 2 图1线性规划的图解示意图 图解法简单直观,有助于了解线性规划问题求解的基本原理。我们先应用图解法来 求解例1。对于每一固定的值:,使目标函数值等于:的点构成的直线称为目标函数等 位线,当:变动时,我们得到一族平行直线。对于例1,显然等位线越趋于右上方,其 上的点具有越大的目标函数值。不难看出,本例的最优解为x*=(2,6)',最优目标值 -*=26 从上面的图解过程可以看出并不难证明以下断言: (1)可行域R可能会出现多种情况。R可能是空集也可能是非空集合,当R非空 时,它必定是若干个半平面的交集(除非遇到空间维数的退化)。R既可能是有界区域, 也可能是无界区域。 (2)在R非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其 目标函数值无界)
-2- 例如线性规划 c x Ax b x T max s.t. ≥ 的 Matlab 标准型为 c x Ax b x T min − s.t. − ≤ − 1.3 线性规划问题的解的概念 一般线性规划问题的(数学)标准型为 ∑= = n j j j z c x 1 max (3) s.t. ⎪ ⎩ ⎪ ⎨ ⎧ ≥ = ∑ = = = x j n a x b i m j n j ij j i 0 1,2, , 1,2, , 1 L L (4) 可行解 满足约束条件(4)的解 ( , , , ) 1 2 n x = x x L x ,称为线性规划问题的可行解, 而使目标函数(3)达到最大值的可行解叫最优解。 可行域 所有可行解构成的集合称为问题的可行域,记为 R 。 1.4 线性规划的图解法 0 2 4 6 8 1 0 0 1 2 3 4 5 6 7 8 9 1 0 x2 =7 2 x1 +x2 =1 0 x1+x2 =8 z=12 (2 ,6 ) 图 1 线性规划的图解示意图 图解法简单直观,有助于了解线性规划问题求解的基本原理。我们先应用图解法来 求解例 1。对于每一固定的值 z ,使目标函数值等于 z 的点构成的直线称为目标函数等 位线,当 z 变动时,我们得到一族平行直线。对于例 1,显然等位线越趋于右上方,其 上的点具有越大的目标函数值。不难看出,本例的最优解为 T x* = (2,6) ,最优目标值 z* = 26 。 从上面的图解过程可以看出并不难证明以下断言: (1)可行域 R 可能会出现多种情况。R 可能是空集也可能是非空集合,当 R 非空 时,它必定是若干个半平面的交集(除非遇到空间维数的退化)。R 既可能是有界区域, 也可能是无界区域。 (2)在 R 非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其 目标函数值无界)
“顶点》若线性规划存在有限最优锅,则必可找到具有最优目标函数位的可行域尺的 上述论断可以推广到一般的线性规划问题,区别只在于空间的维数。在一般的n绚 空间中,满足一线性等式立,x,=b的点集被称为一个超平面,而满足一线性不等式 a,≤b(或立0,2b)的点集被称为一个半空间(其中(a,a,)为一n维行 向量,b为一实数)。若干个半空间的交集被称为多胞形,有界的多胞形又被称为多面 体。易见,线性规划的可行域必为多胞形(为统一起见,空集中也被视为多胞形)。 在一般维空间中,要直接得出多胞形“顶点”概念还有一些困难。二维空间中的顶点 可以看成为边界直线的交点,但这一几何概念的推广在一般雏空间中的几何意义并不 十分直观。为此,我们将采用另一途径来定义它。 定义1称n维空间中的区域R为一凸集,若x',x2∈R及2∈(0,1),有 x+(1-2)x2eR 定义2设R为n维空间中的一个凸集,R中的点x被称为R的一个极点,若不 存在x、x2∈R及∈(0,1),使得x=元x+(1-)x2。 定义1说明凸集中任意两点的连线必在此凸集中:而定义2说明,若x是凸集R 的一个极点,则x不能位于R中任意两点的连线上。不难证明,多胞形必为凸集。同 样也不难证明, 二维空间中可行域R的顶点均为R的极点(R也没有其它的极点)。 15求解线性规划的Matlab解法 解线性规划问愿的最常 最有效的算法之一。 这里我们就不介绍 旅纯形法有兴趣的饰看可容看买它缓在规划霜。面我阶留领在爱划的血 Matlab中线性规划的标准型为 minc'x s.t.Aea.x=bea b≤x≤b 基本函数形式为linprog(c,A,b,它的返回值是向量x的值。还有其它的一些函数调用形 大在民的式如 这里fval返回目标函数的值,LB和UB分别是变量x的下界和上界,x。是x的初始值, OPTIONS是控制参数 例2求解下列线性规划问颗 max=2x+3x2-5x s.t+=7 2x-5x2+x3210 为+3x2+x3≤12 3
-3- (3)若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域 R 的 “顶点”。 上述论断可以推广到一般的线性规划问题,区别只在于空间的维数。在一般的n 维 空间中,满足一线性等式 ∑= = n i ai xi b 1 的点集被称为一个超平面,而满足一线性不等式 ∑= ≤ n i ai xi b 1 (或∑= ≥ n i ai xi b 1 )的点集被称为一个半空间(其中( , , ) a1 L 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 解法 单纯形法是求解线性规划问题的最常用、最有效的算法之一。这里我们就不介绍 单纯形法,有兴趣的读者可以参看其它线性规划书籍。下面我们介绍线性规划的 Matlab 解法。 Matlab 中线性规划的标准型为 c x x T min s.t. ⎪ ⎩ ⎪ ⎨ ⎧ ≤ ≤ ⋅ = ≤ lb x ub Aeq x beq Ax b 基本函数形式为 linprog(c,A,b),它的返回值是向量 x 的值。还有其它的一些函数调用形 式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式),如: [x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS) 这里 fval 返回目标函数的值,LB 和 UB 分别是变量 x 的下界和上界, 0 x 是 x 的初始值, OPTIONS 是控制参数。 例 2 求解下列线性规划问题 max 2 1 3 2 5 3 z = x + x − x s.t. x1 + x2 + x3 = 7 2x1 −5x2 + x3 ≥10 x1 + 3x2 + x3 ≤12 x1, x2 , x3 ≥ 0
解()编写M文件 i(-c,a,b,aed,bed zero(3,1)) 例3求解线性规划问题 min:=2x+3x+ [x1+4x2+2x28 3x1+2x2≥6 x,x2,x320 解编写Matlabi程序如下 c=[2:3:1]月 [x,y]=linprog(c,-a,-b,[][]zeros(3,1)) 1.6可以转化为线性规划的问题 很多看起来不是线性规划的问题也可以通过变换变成线性规划的问题来解决。如: 例4规划间题为 min|x|+lx2l+.+|x.l s.L Ar≤b 其中x=x.x了,A和b为相应维数的矩阵和向量。 要把上面的问题变换成线性规划问题,只要注意到事实:对任意的x,存在 ,,>0满足 x=4,-,|x=4,+y, 事实上,我们只要取认=+)L,y=)一三就可以满足上面的条件 2 2 这样,记u=[4,.n]了,v=y.v]了,从而我们可以把上面的问题 变成 min∑(u,+y,) s.t. 「A(u-v)sb L.v20 例5 min(max,} 其中6,=x-y,。 对于这个问题,如果我们取x。=max6,I,这样,上面的问题就变换成 -4
-4- 解 (i)编写 M 文件 c=[2;3;-5]; a=[-2,5,-1;1,3,1]; b=[-10;12]; aeq=[1,1,1]; 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 L 其中 T n x [x x ] = 1 L , 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 L , T n v [v v ] = 1 L ,从而我们可以把上面的问题 变成 ∑= + n i i i u v 1 min ( ) ⎩ ⎨ ⎧ ≥ − ≤ , 0 ( ) s. t. u v A u v b 例 5 min{max | |} i x y i i ε 其中 i i i ε = x − y 。 对于这个问题,如果我们取 max | | 0 i yi x = ε ,这样,上面的问题就变换成
min xo s.t. -≤x0,.,xn-yn≤x0 此即我们通常的线性规划问题。 2运输问题(产销平衡 。 某商品有m个产地、n个销地,各产地的产量分别为a,.,an,各销地的 需求量分别为b,.,b,。若该商品由i产地运到j销地的单位运价为C,问应该如何调 运才能使总运费最省? 解:引入变量X,其取值为由1产地运往了销地的该商品数量,数学模型为 m S.L 2x=j=12.,n 20 显然是一个线性规划问题,当然可以用单纯形法求解 对产销平衡的运输问题,由于有以下关系式存在: 4北升 §3指派问题 3.1指派问题的数学模型 例7拟分配n人去干n项工作,每人干且仅干一项工作,若分配第i人去干第 项工作,需花费C单位时间,问应如何分配工作才能使工人花费的总时间最少? 容易看出,要给出一个指派问题的实例,只需给出矩阵C=(C),C被称为指派 问题的系数矩阵。 引入变量x,若分配1千j工作,则取x,=1,否则取x,=0。上述指派问题的 数学模型为 min∑c, sL,=1
-5- min 0 x 1 1 0 0 s. t. x y x , , x y x − ≤ L n − n ≤ 此即我们通常的线性规划问题。 §2 运输问题(产销平衡) 例 6 某商品有m 个产地、n 个销地,各产地的产量分别为a am , , 1 L ,各销地的 需求量分别为b bn , , 1 L 。若该商品由i 产地运到 j 销地的单位运价为 ij c ,问应该如何调 运才能使总运费最省? 解:引入变量 ij x ,其取值为由i 产地运往 j 销地的该商品数量,数学模型为 ∑∑= = 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 L L 显然是一个线性规划问题,当然可以用单纯形法求解。 对产销平衡的运输问题,由于有以下关系式存在: ∑ ∑∑ ∑ ∑ ∑ = == = = = ⎟ = ⎠ ⎞ ⎜ ⎝ ⎛ =⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ = m i i n j n j m i ij m i n j bj xij x a 1 11 1 1 1 其约束条件的系数矩阵相当特殊,可用比较简单的计算方法,习惯上称为表上作业法(由 康托洛维奇和希奇柯克两人独立地提出,简称康—希表上作业法)。 §3 指派问题 3.1 指派问题的数学模型 例 7 拟分配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. ∑= = n j ij x 1 1