第一章 线性规划
§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小时,问该厂应生产甲、乙机床各几台,才能使总利润最大?
上述问题的数学模型:设该厂生产x1台甲机床和x2乙机床时总利润最大,则x1,x2
应满足
(目标函数)maxz=4x1+3x2 (1)
?2x1+x2≤10?x+x≤8?12
s.t.(约束条件)? (2)
≤7x?2??x1,x2≥0
(1)式被称为问题的目标函数,(2)中的几个不等式这里变量x1,x2称之为决策变量,
是问题的约束条件,记为s.t.(即subject to)。由于上面的目标函数及约束条件均为线性
函数,故被称为线性规划问题。
总之,线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。
在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往也是困难的一步,模型建立得是否恰当,直接影响到求解。而选适当的决策变量,是我们建立有效模型的关键之一。
1.2 线性规划的Matlab标准形式
线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号。为了避免这种形式多样性带来的不便,Matlab中规定线性规划的标准形式为
min cTx x
?Ax≤b?
s.t. ?Aeq?x=beq
?lb≤x≤ub?
其中c和x为n维列向量,A、Aeq为适当维数的矩阵,b、beq为适当维数的列向量。
-1-
例如线性规划
max cTx s.t. Ax≥b x
的Matlab标准型为
min ?cx s.t. ?Ax≤?b
T
x
1.3 线性规划问题的解的概念
一般线性规划问题的(数学)标准型为
max
z=∑cjxj (3)
j=1
n
?n
?∑aijxj=bii=1,2,L,ms.t. ?j=1 (4)
?x≥0j=1,2,L,n?j
可行解 满足约束条件(4)的解x=(x1,x2,L,xn),称为线性规划问题的可行解,而使目标函数(3)达到最大值的可行解叫最优解。
可行域 所有可行解构成的集合称为问题的可行域,记为R。 1.4 线性规划的图解法 10987654321z=1200246810x1+x2=8(2,6)x2=72x1+x2=10图1 线性规划的图解示意图
图解法简单直观,有助于了解线性规划问题求解的基本原理。我们先应用图解法来求解例1。对于每一固定的值z,使目标函数值等于z的点构成的直线称为目标函数等位线,当z变动时,我们得到一族平行直线。对于例1,显然等位线越趋于右上方,其上的点具有越大的目标函数值。不难看出,本例的最优解为x*=(2,6),最优目标值
T
z*=26。
从上面的图解过程可以看出并不难证明以下断言:
(1)可行域R可能会出现多种情况。R可能是空集也可能是非空集合,当R非空时,它必定是若干个半平面的交集(除非遇到空间维数的退化)。R既可能是有界区域,也可能是无界区域。
(2)在R非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其目标函数值无界)。
-2-
(3)若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域R的“顶点”。
上述论断可以推广到一般的线性规划问题,区别只在于空间的维数。在一般的n维空间中,满足一线性等式
∑ax
ii=1
n
i
=b的点集被称为一个超平面,而满足一线性不等式
∑ax
ii=1
n
i
≤b(或∑aixi≥b)的点集被称为一个半空间(其中(a1,L,an)为一n维行
i=1
n
向量,b为一实数)。若干个半空间的交集被称为多胞形,有界的多胞形又被称为多面体。易见,线性规划的可行域必为多胞形(为统一起见,空集Φ也被视为多胞形)。 在一般n维空间中,要直接得出多胞形“顶点”概念还有一些困难。二维空间中的顶点可以看成为边界直线的交点,但这一几何概念的推广在一般n维空间中的几何意义并不十分直观。为此,我们将采用另一途径来定义它。
定义1 称n维空间中的区域R为一凸集,若?x,x∈R及?λ∈(0,1),有
1
2
λx1+(1?λ)x2∈R。
定义2 设R为n维空间中的一个凸集,R中的点x被称为R的一个极点,若不存在x、x∈R及λ∈(0,1),使得x=λx+(1?λ)x。
定义1 说明凸集中任意两点的连线必在此凸集中;而定义2 说明,若x是凸集R的一个极点,则x不能位于R中任意两点的连线上。不难证明,多胞形必为凸集。同样也不难证明,二维空间中可行域R的顶点均为R的极点(R也没有其它的极点)。
1.5 求解线性规划的Matlab解法
单纯形法是求解线性规划问题的最常用、最有效的算法之一。这里我们就不介绍单纯形法,有兴趣的读者可以参看其它线性规划书籍。下面我们介绍线性规划的Matlab解法。
Matlab中线性规划的标准型为
1
2
1
2
min cTx x?Ax≤b?
s.t. ?Aeq?x=beq
?lb≤x≤ub?
基本函数形式为linprog(c,A,b),它的返回值是向量x的值。还有其它的一些函数调用形式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式),如:
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
这里fval返回目标函数的值,LB和UB分别是变量x的下界和上界,x0是x的初始值,OPTIONS是控制参数。
例2 求解下列线性规划问题 max z=2x1+3x2?5x3
s.t. x1+x2+x3=7 2x1?5x2+x3≥10 x1+3x2+x3≤12
x1,x2,x3≥0
-3-
解 (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 z=2x1+3x2+x3
?x1+4x2+2x3≥8?
?3x1+2x2≥6 ?x,x,x≥0?123
解 编写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 规划问题为
min|x1|+|x2|+L+|xn|
s. t. Ax≤b
T
其中x=[x1Lxn],A和b为相应维数的矩阵和向量。
要把上面的问题变换成线性规划问题,只要注意到事实:对任意的xi,存在
ui,vi>0满足
xi=ui?vi,|xi|=ui+vi
|x|?xix+|xi|
事实上,我们只要取ui=i,vi=i就可以满足上面的条件。
22TT
这样,记u=[u1Lun],v=[v1Lvn],从而我们可以把上面的问题
变成
min s. t. ?
xi
∑(u
i=1
n
i
+vi)
?A(u?v)≤b
?u,v≥0
例5 min{max|εi|}
yi
其中εi=xi?yi。
对于这个问题,如果我们取x0=max|εi|,这样,上面的问题就变换成
yi
-4-
min
x0
s. t. x1?y1≤x0,L,xn?yn≤x0
此即我们通常的线性规划问题。
§2 运输问题(产销平衡)
例6 某商品有m个产地、n个销地,各产地的产量分别为a1,L,am,各销地的需求量分别为b1,L,bn。若该商品由i产地运到j销地的单位运价为cij,问应该如何调运才能使总运费最省?
解:引入变量xij,其取值为由i产地运往j销地的该商品数量,数学模型为
min
∑∑cx
i=1j=1
mn
ijij
?n
?∑xij=ai,i=1,L,m?j=1?m
s.t. ?∑xij=bj,j=1,2,L,n
?i=1
?xij≥0??
显然是一个线性规划问题,当然可以用单纯形法求解。
对产销平衡的运输问题,由于有以下关系式存在:
?n?n?m?m
?bj=∑?∑?∑xij?=∑?∑xij?=∑ai
j=1i=1?j=1?j=1?i=1?i=1
n
m
其约束条件的系数矩阵相当特殊,可用比较简单的计算方法,习惯上称为表上作业法(由
康托洛维奇和希奇柯克两人独立地提出,简称康—希表上作业法)。
§3 指派问题
3.1 指派问题的数学模型
例7 拟分配n人去干n项工作,每人干且仅干一项工作,若分配第i人去干第j项工作,需花费cij单位时间,问应如何分配工作才能使工人花费的总时间最少?
容易看出,要给出一个指派问题的实例,只需给出矩阵C=(cij),C被称为指派问题的系数矩阵。
引入变量xij,若分配i干j工作,则取xij=1,否则取xij=0。上述指派问题的数学模型为
min
∑∑cx
i=1j=1
nn
ijij
s.t. xij=1
j=1
∑
n
-5-