MATLAB/Simulink/C++/Java等编程援助
联系方式:
QQ:806268790
邮箱:806268790@qq.com
QQ 空间:http://806268790.qzone.qq.com
更多学习资料,请加我为 QQ 好友,或者访问我的 QQ 空间
有编程问题的朋友,请直接加我为QQ好友,提供在线答疑
如果我QQ不在线,请将问题发到我的邮箱,及时给你答复
专业提供以下方向的编程援助:
1. MATLAB/Simulink/C++/Java等编程问题;
2. 数字图像处理、信号处理、通信仿真设计;
3. 机器人路径规划、轨迹规划、机器人控制;
4. 各类数值计算、小波分析算法、优化设计;
5. 自动控制、电机控制、智能控制、模糊控制;
6. 粒子群算法、神经网络、遗传算法等智能算法;
7. 其他编程和仿真问题。
郑重声明:本资料整理于网络,仅限交流使用,切勿用做商业用途!
-1-
第一章 线性规划
§1 线性规划
在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济
效益的问题。此类问题构成了运筹学的一个重要分支—数学规划,而线性规划(Linear
Programming 简记 LP)则是数学规划的一个重要分支。自从 1947 年 G. B. Dantzig 提出
求解线性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深
入。特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性
规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之一。
1.1 线性规划的实例与定义
例 1 某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元。
生产甲机床需用
BA、 机器加工,加工时间分别为每台 2 小时和 1 小时;生产乙机床
需用
CBA 、、 三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时
数分别为
A
机器 10 小时、
B
机器 8 小时和 C 机器 7 小时,问该厂应生产甲、乙机床各
几台,才能使总利润最大?
上述问题的数学模型:设该厂生产
1
x 台甲机床和
2
x 乙机床时总利润最大,则
21
, xx
应满足
(目标函数)
21
34max xxz
+
=
(1)
s.t.(约束条件)
⎪
⎪
⎩
⎪
⎪
⎨
⎧
≥
≤
≤+
≤+
0,
7
8
102
21
2
21
21
xx
x
xx
xx
(2)
这里变量
21
, xx 称之为决策变量,(1)式被称为问题的目标函数,(2)中的几个不等式
是问题的约束条件,记为 s.t.(即 subject to)。由于上面的目标函数及约束条件均为线性
函数,故被称为线性规划问题。
总之,线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最
小的问题。
在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往
也是困难的一步,模型建立得是否恰当,直接影响到求解。而选适当的决策变量,是我
们建立有效模型的关键之一。
1.2 线性规划的 Matlab 标准形式
线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以
是小于号也可以是大于号。为了避免这种形式多样性带来的不便,Matlab 中规定线性
规划的标准形式为
xc
x
T
min
s.t.
⎪
⎩
⎪
⎨
⎧
≤≤
=⋅
≤
ubxlb
beqxAeq
bAx
其中
c 和
x
为 n 维列向量, A 、 Aeq 为适当维数的矩阵, b 、 beq 为适当维数的列向
量。
-2-
例如线性规划
bAxxc
x
T
≥ s.t. max
的 Matlab 标准型为
bAxxc
x
T
−≤−− s.t. min
1.3 线性规划问题的解的概念
一般线性规划问题的(数学)标准型为
∑
=
=
n
j
jj
xcz
1
max (3)
s.t.
⎪
⎩
⎪
⎨
⎧
=≥
==
∑
=
njx
mibxa
j
n
j
ijij
,,2,10
,,2,1
1
L
L
(4)
可行解 满足约束条件(4)的 解
),,,(
21 n
xxxx L
=
,称为线性规划问题的可行解,
而使目标函数(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 线性规划的图解示意图
图解法简单直观,有助于了解线性规划问题求解的基本原理。我们先应用图解法来
求解例 1。对于每一固定的值
z ,使目标函数值等于 z 的点构成的直线称为目标函数等
位线,当
z
变动时,我们得到一族平行直线。对于例 1,显然等位线越趋于右上方,其
上的点具有越大的目标函数值。不难看出,本例的最优解为
T
x )6,2(* = ,最优目标值
26* =z 。
从上面的图解过程可以看出并不难证明以下断言:
(1)可行域
R
可能会出现多种情况。
R
可能是空集也可能是非空集合,当
R
非空
时,它必定是若干个半平面的交集(除非遇到空间维数的退化)。
R
既可能是有界区域,
也可能是无界区域。
(2)在
R
非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其
目标函数值无界)。
-3-
(3)若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域
R
的
“顶点”。
上述论断可以推广到一般的线性规划问题,区别只在于空间的维数。在一般的
n 维
空间中,满足一线性等式
∑
=
=
n
i
ii
bxa
1
的点集被称为一个超平面,而满足一线性不等式
∑
=
≤
n
i
ii
bxa
1
(或
∑
=
≥
n
i
ii
bxa
1
)的点集被称为一个半空间(其中 ),,(
1 n
aa L 为一 n 维行
向量,
b 为一实数)。若干个半空间的交集被称为多胞形,有界的多胞形又被称为多面
体。易见,线性规划的可行域必为多胞形(为统一起见,空集
Φ
也被视为多胞形)。
在一般
n 维空间中,要直接得出多胞形“顶点”概念还有一些困难。二维空间中的顶点
可以看成为边界直线的交点,但这一几何概念的推广在一般
n 维空间中的几何意义并不
十分直观。为此,我们将采用另一途径来定义它。
定义 1 称
n
维空间中的区域
R
为一凸集,若 Rxx ∈∀
21
, 及 )1,0(∈∀
λ
,有
Rxx ∈−+
21
)1(
λλ
。
定义 2 设
R
为 n 维空间中的一个凸集,
R
中的点
x
被称为
R
的一个极点,若不
存在
Rxx ∈
21
、 及 )1,0(∈
λ
,使得
21
)1( xxx
λλ
−+= 。
定义 1 说明凸集中任意两点的连线必在此凸集中;而定义 2 说明,若
x
是凸集
R
的一个极点,则
x
不能位于
R
中任意两点的连线上。不难证明,多胞形必为凸集。同
样也不难证明,二维空间中可行域
R
的顶点均为
R
的极点(
R
也没有其它的极点)。
1.5 求解线性规划的 Matlab 解法
单纯形法是求解线性规划问题的最常用、最有效的算法之一。这里我们就不介绍
单纯形法,有兴趣的读者可以参看其它线性规划书籍。下面我们介绍线性规划的 Matlab
解法。
Matlab 中线性规划的标准型为
xc
x
T
min
s.t.
⎪
⎩
⎪
⎨
⎧
≤≤
=⋅
≤
ubxlb
beqxAeq
bAx
基本函数形式为 linprog(c,A,b),它的返回值是向量
x
的值。还有其它的一些函数调用形
式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式),如:
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X
0
,OPTIONS)
这里 fval 返回目标函数的值,LB 和 UB 分别是变量
x
的下界和上界,
0
x 是
x
的初始值,
OPTIONS 是控制参数。
例 2 求解下列线性规划问题
321
532max xxxz
−
+=
s.t.
7
321
=++ xxx
1052
321
≥+− xxx
123
321
≤+
+
xxx
0,,
321
≥xxx
-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 求解线性规划问题
321
32 min xxxz +
+
=
⎪
⎩
⎪
⎨
⎧
≥
≥+
≥++
0,,
623
824
321
21
321
xxx
xx
xxx
解 编写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 规划问题为
bAx
xxx
n
≤
+
++
t.s.
||||||min
21
L
其中
T
n
xxx ][
1
L= ,
A
和 b 为相应维数的矩阵和向量。
要把上面的问题变换成线性规划问题,只要注意到事实:对任意的
i
x ,存在
0, >
ii
vu 满足
iii
vux −= ,
iii
vux +=||
事实上,我们只要取
2
||
ii
i
xx
u
+
=
,
2
||
ii
i
xx
v
−
= 就可以满足上面的条件。
这样,记
T
n
uuu ][
1
L= ,
T
n
vvv ][
1
L= ,从而我们可以把上面的问题
变成
∑
=
+
n
i
ii
vu
1
)(min
⎩
⎨
⎧
≥
≤−
0,
)(
t.s.
vu
bvuA
例 5
|}|max{min
i
y
x
i
i
ε
其中
iii
yx −=
ε
。
对于这个问题,如果我们取
||max
0 i
y
i
x
ε
=
,这样,上面的问题就变换成