程蓓-动态规划

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动态规划
Dynamic Programming
Chapter 1 基本概念、性质 §1.1 动态规划简介
● 对于一个多阶段策略问题,各个阶段所采取的策略一般来说是与时间有关的,
决策依赖于当前的状态,又随即引起状态的转移,一个决策序列就是在变化中产生的,故有“动态”的含义。

● 但是一些与时间没有关系的静态规划(如线性规划、非线性规划等)问题,只
要人为的引进充当“时间”的因素,也可以将其视为多阶段决策问题,用动态规划的方法来处理。

● 动态规划大约产生于上世纪50年代,由美国数学家R.Bellman 等人提出。

● 动态规划作为求解某类问题的一种方法,是考察问题的一种途径,而不是一种
特殊的算法。

● 动态规划模型的分类,根据多阶段决策过程的时间参量是离散的还是连续的变
量,过程分为离散决策过程和连续决策过程。

根据决策过程的演变是确定性的还是随机性的,过程又可以分为确定性决策过程和随机性决策过程,组合起来就有离散确定性、离散随机性、连续确定性、连续随机性四种决策过程模型。

§1.2引例
例1.1 最短路径问题
图1.1表示从起点A 到终点E 之间各点的距离。

求A 到E 的最短路径。

决策
● 用穷举法
如果从A 到C 的站点有k 个,则总共有3k-1×2条路径。

用穷举法求最短路径总共要进行(k+1)3k-1×2次加法,3k-1×2-1次比较。

当k 的值增加时,需要进行的加法和比较的次数将迅速增加。

例如当k=10时,加法次数为433026次,比较39365次。

● 将以上求从A 到E 的最短路径问题,转化为三个性质完全相同,但规模较
小的子问题,即分别从B 1、B 2、B 3到E 的最短路径问题。

最终结果示意图: 以上过程,仅用了18次加法,11次比较,计算效率远高于穷举法。

图1.1
图1.2
§1.3 动态规划的基本概念、性质最短路径问题
●动态规划问题具有以下基本特征:
1、问题具有多阶段决策的特征。

阶段可以按时间划分,也可以按空间划分。

2、每一阶段都有相应的“状态”与之对应,描述状态的量称为“状态变量”。

3、每一阶段都面临一个决策,选择不同的决策将会导致下一阶段不同的状态,同时,不同的决策将会导致这一阶段不同的目标函数值。

4、每一阶段的最优解问题可以递归地归结为下一阶段各个可能状态的最优解问题,各子问题与原问题具有完全相同的结构。

能否构造这样的递推归结,是解决动态规划问题的关键。

这种递推归结的过程,称为“不变嵌入”。

●动态规划的基本概念:
阶段k:表示决策顺序的离散的量,阶段可以按时间或空间划分。

状态S k:能确定地表示决策过程当前特征的量。

状态可以是数量,也可以是字符,数量状态可以是连续的,也可以是离散的。

要注意的是,我们这里所说的状态应具有“无后效性”,即马尔科夫性。

如果某阶段状态给定后,则在这个阶段以后过程的发展不受这阶段以前各阶段状态的影响。

换句话说,过程的过去历史只能通过当前的状态去影响它未来的发展,当前的状态是以往历史的一个总结。

在处理问题时,如果状态的某种规定方式可能导致不满足无后效性,应适当的改变状态的规定方法,达到能使他满足无后效性的要求。

状态变量x k:表示每一状态可以取不同值的变量。

决策(Decision)d k:从某一状态向下一状态过度时所做的选择。

决策是所在状态的函数,记为d k(x k)。

决策允许集合D k(x k):在状态x k下,允许采取决策的全体。

状态转移方程x k+1=T(x k,d k):某一状态以及该状态下的决策,与下一状态之间的函数关系。

阶段指标函数v k(x k,d k):从状态x k出发,选择决策d k所产生的第k阶段指标。

过程指标函数V(x k ,d k ,d k+1,…,d n ):从状态x k 出发,选择决策d k ,d k +1,…,d n 所产生的过程指标。

动态规划要求过程指标具有可分离性,即
V k ,n (x k , d k ,d k +1,…,d n )=v k (x k ,d k )+V k +1(x k +1,d k +1,…,d n ) 称指标具有可加性,或
V k ,n (x k , d k ,d k +1,…,d n )=v k (x k ,d k )×V k +1(x k +1,d k +1,…,d n ) 称指标具有可乘性。

最优指标函数f k (x k ):从状态x k 出发,对所有的策略P k ,n ,过程指标V k ,n 的最优值,即
)}P ,x (V {max(min))x (f n ,k k n ,k )
x (D d k k k k k ∈=
对于可加性指标函数,上式可以写为
n ,,2,1k )}
x (f }d ,x (v {max(min))x (f 1k 1k k k k )
x (D d k k k k k =+=++∈
对于可乘性指标函数,上式可以写为
n ,,2,1k )}
x (f }d ,x (v {max(min))x (f 1k 1k k k k )
x (D d k k k k k =⨯=++∈
以上式子称为动态规划最优指标的递推方程,是动态规划的基本方程。

上面给出的基本方程是逆序解法,适用于初始状态给定时;相对应的还有顺序解法(将终端和始端的选取颠倒),适用于终止状态给定时,其基本方程为:
1111()
(){(,}()}
1,2,,max(min)k k k k k k k k k k d D x f x v x d f x k n +++-∈=+= 1111()
(){(,}()}
1,2,,max(min)k k k k k k k k k k d D x f x v x d f x k n +++-∈=⨯=
终端条件:为了使以上的递推方程有递推的起点,必须要设定最优指标的终端条件,即确定最后一个状态n 下最优指标f n (x n )的值。

§1.4 动态规划的最优性原理/定理
动态规划的最优性原理:作为整个过程的最优策略应具有这样的性质, 无论过去的
状态和决策如何, 对由前面的决策所确定的状态而言, 余下的诸决策必须构成最优策略。

简言之, 一个最优策略的子策略总是最优的。

亦即,若允许策略*
0,1n p -是最优策略,则对任意的k ,01k n <<-,它的子策略*,1k n p -对于以***
111(,)k k k k s T s u ---=为起点的k 到1n -子过程来说,必是最优策略。

(k 段状态)*
k s 是由0s 和*0,1k p -所决定的。

动态规划的最优性定理:考虑阶段数为n 的多阶段决策过程,其阶段编号为
0,1,,1k n =- .允许策略****0,1011(,,,)n n p u u u --= 是最优策略的充要条件是:对任
一个k ,01k n <<-和00s S ∈,有
式中0,n-10,k-1k,n-1(,)p p p =,k 111(,)k k k s
T s u ---= ,它是由初始状态和子策略所确定的k 阶段状态。

当V 是效益函数时,opt 取max ;当V 是损失函数时,opt 取min .
注意:动态规划的最优性定理是策略最优性的充要条件;最优性原理仅仅是策略最优性的必要条件。

最优性原理是最优性定理的推论。

§1.5 建立动态规划模型的一般步骤 最短路径问题
⑴ 将问题的发展过程划分成恰当的阶段;
⑵ 正确选择状态变量k x ,使它既能描述过程的演变,又要满足无后效性; ⑶ 选定决策变量k d 及相应的允许决策集合;
⑷ 正确写出状态转移方程;
⑸ 正确写出效益函数(,)k k k v x d 的关系,使之满足下面三个性质:
a ) 是定义在全过程和所有后部子过程上的数量函数;
b ) 要具有可分离性, 并满足递推关系(可加性,可乘性);
c ) 函数(,)k k k v x
d 关于()k k f x 严格单调。

()()()0,k 10,k 10k,n-1k,n 1k 0,n 100,n 10,k 100,k-1k,n-1k k,n-1p P (s )p P (s ),,,V s p opt V s p opt V s p ---*
---∈∈⎧⎫=+⎨⎬⎩⎭
例1.2 利用以上基本概念,重新求解例1.1。

将问题分成五个阶段,第k 阶段到达的具体地点用状态变量x k 表示,这里状态变量取字符值而不是数值。

将决策定义为到达下一站所选择的路径,例如目前的状态是x 2=B 3,这时决策允许集合包含三个决策,它们是
D 2(x 2)=D 2(B 3)={B 3→C 1, B 3→C 2, B 3→C 3}
最优指标函数f k (x k )表示从目前状态到E 的最短路径。

终端条件为 f 5(x 5)=f 5(E)=0
其含义是从E 到E 的最短路径为0。

第四阶段的递推方程为: f x v x d f x d D x 4444455444()min {(,)()}()
=
+∈
从f 5(x 5)到f 4(x 4)的递推过程用下表表示:
其中*表示最优值,在上表中,由于决策允许集合D 4(x 4)中的决策是唯一的,因此这个值就是最优值。

图1.3
阶段1 阶段2
阶段3 阶段4 阶段5
由此得到f 4(x 4)的表达式。

由于这是一个离散的函数,取值用列表表示: f 4(x 4) 的表达式
第三阶段的递推方程为:
f x v x d f x d D x 3333344333()min {(,)()}()
=
+∈
从f 4(x 4)到f 3(x 3)的递推过程用表格表示如下:
由此得到f 3(x 3)的表达式:
第二阶段的递推方程为:
f x v x d f x d D
x 2222233222()min {(,)()}()
=
+∈
从f 3(x 3)到f 2(x 2)的递推过程用表格表示如下:
由此得到f 2(x 2)的表达式:
第一阶段的递推方程为:
f x v x d f x d D x 1111122111()min {(,)()}()
=+∈
从f 2(x 2)到f 1(x 1)的递推过程用表格表示如下:
由此得到f 1(x 1)的表达式: 从表达式f 1(x 1)可以看出,从A 到E 的最短路径长度为19。

由f 1(x 1)向f 4(x 4)回朔,得到最短路径为:
A →
B 2 →
C 1→
D 1→ E
§1.6 动态规划的评价
动态规划方法的优越性 : ⑴ 易于确定全局最优解;
⑵ 能得到一族解,有利于分析结果;
⑶ 能利用经验及实际问题的演变,提高求解的效率。

动态规划方法的不足之处 :
(1)没有一个统一的标准模型;
(2)在数值求解时, 内存占有量与计算量随问题维数的增大而指数增长, 此即所谓的维数灾难。

为了克服动态规划常规算法的维数灾难,微分动态规划方法在解决动态系统最优化问题向前迈进了一步。

参阅:
Jacobson, D.H & D. Q. Mayne, Differential Dynamic Programming, Amer, Elsevier Publ. Comp. Inc. N.Y. 1970
北京工业学院吴沧浦教授编著的《微分动态规划》。

Chapter 2 应用实例
§2.1资源分配问题
例2.1有资金4万元,投资A、B、C三个项目,每个项目的投资效益与投入该项目的资金有关。

三个项目A、B、C的投资效益(万吨)和投入资金(万元)的关系见下表:
求对三个项目的最优投资分配,使总投资效益最大。

阶段k:每投资一个项目作为一个阶段;
状态变量x k:投资第k个项目前的资金数;
决策变量d k:第k个项目的投资;
决策允许集合:0≤d k≤x k
状态转移方程:x k+1=x k-d k
阶段指标:v k(x k,d k)见表中所示;
递推方程:f k(x k)=max{v k(x k,d k)+f k+1(x k+1)}
终端条件:f4(x4)=0
k=4,f4(x4)=0
k=3,0≤d3≤x3,x4=x3-d3
x3D3(x3) x4v3(x3,d3) v3(x3,d3)+f4(x4) f3(x3) d3*
0 0 0 0 0+0=0 0 0
1 0 1 0 0+0=0
11 1 1 0
11 11+0=11*
2 0 2 0 0+0=0
30 2
1 1 11 11+0=11
2 0 30 30+0=30*
3 0 3 0 0+0=0
45 3
1 2 11 11+0=11
2 1 30 30+0=30
3 0 45 45+0=45*
4 0 4 0 0+0=0
58 4 1 3 11 11+0=11
2 2 30 30+0=30
3 1 45 45+0=45
4 0 58 58+0=58*
k=2,0≤d2≤x2,x3=x2-d2
x2D2(x2) x3v2(x2,d2) v2(x2,d2)+f3(x3) f2(x2) d2*
0 0 0 0 0+0=0 0 0
1 0 1 0 0+11=11
13 1 1 0 13 13+0=13*
2 0 2 0 0+30=30*
30 0
1 1 13 13+11=24
2 0 29 29+0=29
3 0 3 0 0+45=45*
45 0
1 2 13 13+30=43
2 1 29 29+11=40
3 0 43 43+0=43
4 0 4 0 0+58=58
59 2
1 3 13 13+45=58
2 2 29 29+30=59*
3 1 43 43+11=54
4 0 5
5 55+0=55
k=1,0≤d1≤x1,x2=x1-d1
x1D1(x1) x2v1(x1,d1) v1(x1,d1)+f2(x2) f1(x1) d1*
4 0 4 0 0+59=59
60 1
1 3 15 15+45=60*
2 2 28 28+30=58
3 1 40 40+13=53
4 0 51 51+0=51
最优解为x1=4, d1*=1, x2=x1-d1=3, d2*=0, x3=x2-d2*=3, d3=3, x4=x3-d3=0,
即项目A投资1万元,项目B投资0万元,项目C投资3万元,最大效益为60万吨。

§2.2 背包问题
例2.2 设有n 种物品,每一种物品数量无限。

第i 种物品每件重量为w i 公斤,每件价值c i 元。

现有一只可装载重量为W 公斤的背包,求各种物品应各取多少件放入背包,使背包中物品的价值最高。

这个问题可以用整数规划模型来描述。

设第i 种物品取x i 件(i=1,2,…,n ,xi 为非负整数),背包中物品的价值为z ,则
max z= c 1x 1 +c 2x 2 +… +c n x n
s.t. w 1x 1 +w 2x 2 +… +w n x n
≤W
x 1,
x 2,…, x n
为非负整数 阶段k : 第k 次装载第k 种物品(k=1,2,…,n )
状态变量x k : 第k 次装载时背包还可以装载的重量; 决策变量d k : 第k 次装载第k 种物品的件数; 决策允许集合: D k (x k )={d k |0≤ d k ≤x k /w k ,d k 为整数}; 状态转移方程: x k +1=x k -w k d k 阶段指标: v k =c k d k
递推方程: f k (x k )=max{c k d k +f k +1(x k +1)}=max{c k d k +f k +1(x k -w k d k )} 终端条件:
f 4(x 4)=0
对于一个具体问题: c 1=65,c 2=80,c 3=30 w 1=2,w 2=3,w 3=1 以及 W=5
用动态规划求解 对于k=3
}
d 30{max )}x (f d c {max )x (f 3w /x d 04433w /x d 0333
33333≤≤≤≤=
+=
列出f 3(x 3)的数值表
f 3(x 3)
对于k=2
)}
d 3x
(f d 80{max )}
x (f d c {max )x (f 22323
/x d 03322w /x d 02222222-+=+=
≤≤≤≤
列出f 2(x 2)的数值表
f 2(x 2) 对于
)}
d 2x (f d 65{max )}
x (f d c {max )x (f 11212
/x d 02211w /x d 01111111-+=+=
≤≤≤≤
列出f 1(x 1)的数值表
f 1(x 1)
由题意知,x 1=5,由表f 1(x 1)、f 2(x 2)、f 3(x 3),经回朔可得:
d 1*=2,x 2=x 1-2d 1=1,d 2*=0,x 3=x 2-3d 2=1,d 3*=1,x 4=x 3-d 3=0 即应取第一种物品2件,第三种物品1件,最高价值为160元,背包没有余量。

由f 1(x 1)得列表可以看出,如果背包得容量为W=4,W=3,W=2和W=1时,相应的最优解立即可以得到。

§2.3具有转向费用的最短路径问题
设城市的道路结构如右图所示。

两个路口之间标的数字表示通过这一段道路所需的费用(单位:元),该城市有一项奇怪的交通规则:车辆经过每个路口时,向左或向右转弯一次,要收取“转弯费”3元。

现有一辆汽车从A 点出发到P 点,求包括转弯费用在内,费用最小的行驶路线。

与前面介绍的最短路线问题不同,由于考虑转弯费用,从任一
路口出发到达终点的最优路线不仅取决于当前的位置,而且与如何
到达当前位置有关。

如果仍旧用当前所在位置作为状态变量,用行进的方向作为决
策变量,这样,从某一状态出发的最优决策,不仅与当前状态有关,还与这一状态以前的决策有关。

这样就不满足动态规划“状态的无后效性”的要求。

为了满足动态规划的这一要求,必须重新构造状态变量。

现将这个问题的动态规划模型构造如下:
阶段k :设起点A 为第一阶段,到达B 或C 为第二阶段,如此等等。

到达终点P 为第七阶段。

状态变量:(x k , r k ), (k=1, 2, …, 6),其中x k 为第k 阶段所在位置,r k 为从x k 出发行进的方向:
r u up d down k =⎧⎨
⎪⎩⎪()()上行下行
终点P 的状态变量为(P, Φ),Φ表示行进方向为空集。

由图可见,点G ,J ,K ,M ,N ,O ,P 只有一个状态,其余的点都有两个状态。

由于状态变量包括所在位置和行进方向两个因素,决策变量也就已经包含在状态变量之中了。

最优指标:f k (x k , r k )表示从x k 出发,按r k 方向前进一步,最终到达P 的最小费
A
B D G
C
F
M O P
K N E 2
I H 1 5 2 3 1 2 4 5 2
4 1 0
3 4 4 1
3
1
2 2 2 L 8 4 图2.1
用(包括转弯费用)。

阶段指标:
u k (x k )—从x k 出发上行一步的路程费用(不包括转弯费用); d k (x k )—从x k 出发下行一步的路程费用(不包括转弯费用)。

递推方程:
⎭⎬

⎩⎨⎧++=⎭


⎩⎨⎧+++=++++++++3)d ,x (f )u ,x (f min )x (u 3)d ,x (f )x (u )u ,x (f )x (u min )u ,x (f 1k 1k 1k 1k k k 1k 1k k k 1k 1k k k k k



⎩⎨⎧++=⎭⎬

⎩⎨⎧+++=++++++++)d ,x (f 3)u ,x (f min )x (d )d ,x (f )x (d 3)u ,x (f )x (d min )d ,x (f 1k 1k 1k 1k k k 1
k 1k k k 1k 1k k k k k
终端条件: f 7(P, Φ)=0 k=7
对应于P 只有一个状态x 7=(P, Φ),相应的最优指标为:
f 7(x 7)=f 7(P, Φ)=0
k=6
对应于N 只有一个状态x 6=(N, d),相应的最优指标为:
f 6(N, d)=d 6(N, d)+f 7(P, Φ)=2+0=2, 最优路线上的下一状态为x 7*=(P, Φ)。

对应于点O 只有一个状态x 6=(O, u),相应的最优指标为:
f 6(O, u)=u 6(O, u)+f 7(P, Φ)=1+0=1,
x 7*=(P, Φ)
k=5
对应于K 只有一个状态x 5=(K, d),相应的最优指标为:
f 5(K, d)=d 5(K, d)+f 6(N, d)=1+2=3,
x 6*=(N, d) 对应于L 有两个状态x 5=(L, u),x 5=(L, d),相应的最优指标分别为:
f 5(L, u)=u 5(L, u)+f 6(N, d)+3=2+2+3=7,
x 6*=(N, d)
f 5(L, d)=d 5(L, d)+f 6(O, u)+3=8+1+3=12, x 6*=(O, u)
对应于M 只有一个状态x 5=(M, u),相应的最优指标为:
f 5(M, u)=u 5(M, u)+f 6(O, u)=4+1=5,
x 6*=(O, u)
k=4
对应于G 只有一个状态x 4=(G , d),相应的最优指标为:
f 4(G, d)=d 4(G , d)+f 5(K, d)=3+3=6, x 5*=(K, d)
对应于H 有两个状态x 4=(H, u)和x 4=(H, d),相应的最优指标分别为:
f 4(H, u)=u 4(H, u)+f 5(K, d)+3=3+3+3=9, x 5*=(K, d)
)
u ,L (x ,
141041237min 4)d ,L (f 3)u ,L (f min )d ,H (d )d ,H (f *55544==+=⎭⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
对应于I 有两个状态x 4=(I, u)和x 4=(I, d),相应的最优指标分别为:
)
u ,L (x ,
9723127min 23)d ,L (f )u ,L (f min )u ,I (d )u ,I (f *55544==+=⎭
⎬⎫
⎩⎨⎧++=⎭⎬

⎩⎨⎧++=
f 4(I, d)=d 4(I, d)+f 5(M, u)+3=2+5+3=10, x 5*=(M, u)
对应于J 只有一个状态x 4=(J, u),相应的最优指标为:
f 4(J, u)=u 4(J, u)+f 5(M, u)=2+5=7,
x 5*=(M, u)
k=3
对应于D 有两个状态x 3=(D, u)和x 3=(D, d),相应的最优指标为:
f 3(D, u)=u 3(D, u)+f 4(G, d)+3=2+6+3=11, x 5*=(G , d)
)
u ,H (x ,
131211439min 1)d ,H (f 3)u ,H (f min )d ,D (d )d ,D (f *44433==+=⎭⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
对于E 有两个状态x 3=(E, u)和x 3=(E, d),相应的最优指标为:
)
u ,H (x ,
10913149min 13)d ,H (f )u ,H (f min )u ,E (u )u ,E (f *44433==+=⎭⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
)
d ,I (x ,
121021039min 2)d ,I (f 3)u ,I (f min )d ,E (d )d ,E (f *44433==+=⎭
⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
对于F 有两个状态x 3=(F, u)和x 3=(F, d),相应的最优指标为:
)
u ,I (x ,
14953109min 53)d ,I (f )u ,I (f min )u ,F (u )u ,F (f *44433==+=⎭
⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
f 3(F, d)=d 3(F, d)+f 4(J, u)+3=4+7+3=14,
x 4*=(J, u)
k=2
对于B 有两个状态x 2=(B, u)和x 2=(B, d),相应的最优指标为:
)
u ,D (x ,
1611531311min 53)d ,D (f )u ,D (f min )u ,B (u )u ,B (f *33322==+=⎭⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
)
d ,E (x ,
1612412310min 4)d ,E (f 3)u ,E (f min )d ,B (d )d ,B (f *33322==+=⎭
⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
对于C 有两个状态x 2=(C, u)和x 2=(C, d),相应的最优指标为:
)
u ,E (x ,
1410431210min 43)d ,E (f )u ,E (f min )u ,C (u )u ,C (f *33322==+=⎭⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
)
d ,F (x ,
1714314314min 3)d ,F (f 3)u ,F (f min )d ,C (d )d ,C (f *33322==+=⎭
⎬⎫
⎩⎨⎧++=⎭⎬

⎩⎨⎧++=
k=1
对于A 有两个状态x 1=(A, u)和x 1=(A, d),相应的最优指标为:
)
u ,B (x ,
1716131616min 13)d ,B (f )u ,B (f min )u ,A (u )u ,A (f *22211==+=⎭
⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=
)
d ,C (x )u ,C (x ,
1717017314min 0)d ,C (f 3)u ,C (f min )d ,A (d )d ,A (f *
2*22211===+=⎭
⎬⎫
⎩⎨⎧++=⎭


⎩⎨⎧++=或由于f 1(A, u)=f 1(A, d)=17,因此从A 出发有两条最优路线,第一条从A 出发上行,
通过对最优指标相应的下一状态的回朔,得到相应的最优路线:
(A, u)→(B, u)→(D, u)→(G , d)→(K, d)→(N, d)→(P, Φ) 路程费用为14,转弯费用为3,总费用为17。

第二条从A 出发下行的最优路线,由于从A 出发下行一步到达C 后,有两个后续最优状态(C, u)和(C, d),因此,从A 出发下行的最优路线有两条,它们是:
(A, d)→(C, u)→(E, u)→(H, u)→(K, d)→(N, d)→(P,Φ)
路程费用为11,转弯费用为6,总费用为17。


(A, d)→(C, d)→(F, d)→(J, u)→(M, u)→(O, u)→(P, Φ)。

§2.4货郎担问题(Traveling Salesman Problem)
设有n个城市, 其中每两个城市之间都有道路相连,城市i和城市j之间的距离为C ij。

从某城市出发周游所有城市,经过每个城市一次且仅一次,最后回到出发地,求总行程最短的周游路线。

对于一般的情况可以假设两城市之间往返距离不相等。

在此例中,为了简化问题,设往返距离相等,即C ij=C j i。

这就是所谓的货郎担问题(Traveling Salesman Problem,简称TSP)。

这个问题与最短路径问题不同,最短路径问题以当前所在的位置作为状态变量,而在货郎担问题中,状态变量除了要指明当前所在位置外,还要指明已经经过哪几个城市。

由于货郎担问题经过的路线是一条经过所有城市的闭合回路,因此从哪一点出发是无所谓的,因此不妨设从城市1出发。

问题的动态规划模型构造如下:
阶段k:已经历过的城市个数,包括当前所在的城市。

k=1, 2, …, n , n+1,k=1表示出发时位于起点,k=n+1表示结束时回到终点。

状态变量:x k=(i, S k),其中i表示当前所在的城市,Sk表示尚未访问过的城市的集合。

很明显
S1={2,3,…,n},…,S n=S n+1=Φ
其中Φ表示空集。

并且有
x n=(i, Φ) i=2,3,…,n, x n+1=(1, Φ)
决策变量:d k=( i , j ),其中i为当前所在的城市,j为下一站将要到达的城市。

状态转移方程:若当前的状态为
x k=( i ,S k)
采取的决策为
d k=( i , j )
则下一步到达的状态为
x k+1=T(x k,d k)=( j ,S k\ {j})
阶段指标:v k (x k ,d k )=C ij
最优指标函数:f k (x k )=f k (i,S k ) 表示从城市i 出发,经过S k 中每个城市一次且仅一次,最后返回城市1的最短距离。

终端条件:f n+1(x n+1)=f n+1(1, Φ)=0
对于如图所示的一个五个城市的货郎担问题,求解步骤如下:
对于k=5,有
f 5(i, Φ)=min{C ij +f 6(1, Φ)}=C i1
i=2,3,4,5
d 5∈(i,1)
f 5(I,Φ)的值列表如下:
i f 5(i, Φ) 2 2 3 7 4 2 5
5
对于k=4,有
f 4(i, S 4)=min{C ij +f 5(j,S 5)}
j ∈S4
f 4(i,S 4)的值列表如下: (i,S 4) j C ij S 5
C ij +f 5(j,S 5) f 4(i,S 4) j* (2,{3}) {3} 3 Φ 3+f 5(3,Φ)=3+7=10 10 3 (2,{4}) {4} 5 Φ 5+f 5(4,Φ)=5+2=7 7 4 (2,{5}) {5} 1 Φ 1+f 5(5,Φ)=1+5=6 6 5 (3,{2}) {2} 3 Φ 3+f 5(2,Φ)=3+2=5 5 2 (3,{4}) {4} 4 Φ 4+f 5(4,Φ)=4+2=6 6 4 (3,{5}) {5} 6 Φ 6+f 5(5,Φ)=6+5=11 11 5 (4,{2}) {2} 5 Φ 5+f 5(2,Φ)=5+2=7 7 2 (4,{3}) {3} 4 Φ 4+f 5(3,Φ)=4+7=11 11 3 (4,{5}) {5} 3 Φ 3+f 5(5,Φ)=3+5=8 8 5 (5,{2}) {2} 1 Φ 1+f 5(2,Φ)=1+2=3 3 2 (5,{3}) {3} 6 Φ 6+f 5(3,Φ)=6+7=13 13 3 (5,{4})
{4}
3
Φ
3+f 5(4,Φ)=3+2=5
5
4
对于k=3,有
图2.2
f3(i,S3)=min{C ij+f4(j,S4)}
j S3
f3(i,S3)的值列表如下:
(i,S3) j C ij S4C ij+f4(j,S4) f3(i,S3) j*
(2,{3,4}) {3}
{4} 3
5
{4}
{3}
3+f4(3,{4})=3+6=9*
5+f4(4,{3})=5+11=16
9 3
(2,{3,5}) {3}
{5} 3
1
{5}
{3}
3+f4(3,{5})=3+11=14*
1+f4(5,{3})=1+13=14*
14 3,5
(2,{4,5}) {4}
{5} 5
1
{5}
{4}
5+f4(4,{5})=5+8=13
1+f4(5,{4})=1+5=6*
6 5
(3,{2,4}) {2}
{4} 3
4
{4}
{2}
3+f4(2,{4})=3+7=10*
4+f4(4,{2})=4+7=11
10 2
(3,{2,5}) {2}
{5} 3
6
{5}
{2}
3+f4(2,{5})=3+6=9*
6+f4(5,{2})=6+3=9*
9 2,5
(3,{4,5}) {4}
{5} 4
6
{5}
{4}
4+f4(4,{5})=4+8=12
6+f4(5,{4})=6+5=11*
11 5
(4,{2,3}) {2}
{3} 5
4
{3}
{2}
5+f4(2,{3})=5+10=15
4+f4(3,{2})=4+5=9*
9 3
(4,{2,5}) {2}
{5} 5
3
{5}
{2}
5+f4(2,{5})=5+6=11
3+f4(5,{2})=3+3=6*
6 5
(4,{3,5}) {3}
{5} 4
3
{5}
{3}
4+f4(3,{5})=4+11=15*
3+f4(5,{3})=3+13=16
15 3
(5,{2,3}) {2}
{3} 1
6
{3}
{2}
1+f4(2,{3})=1+10=11*
6+f4(3,{2})=6+5=11*
11 2,3
(5,{2,4}) {2}
{4} 1
3
{4}
{2}
1+f4(2,{4})=1+7=8*
3+f4(4,{2})=3+7=10
8 2
(5,{3,4}) {3}
{4} 6
3
{4}
{3}
6+f4(3,{4})=6+6=12*
3+f4(4,{3})=3+11=14
12 3
对于k=2有
(i,S2) j C ij S3C ij+f3(j,S3) f2(i,S2) j*
(2,{3,4,5}) {3}
{4}
{5} 3
5
1
{4,5}
{3,5}
{3,4}
3+f3(3,{4,5})=3+11=14
5+f3(4,{3,5})=5+15=20
1+f3(5,{3,4})=1+12=13*
13 5
(3,{2,4,5}) {2}
{4}
{5} 3
4
6
{4,5}
{3,5}
{2,4}
3+f3(2,{4,5})=3+6=9*
4+f3(4,{2,5})=4+6=10
6+f3(5,{2,4})=6+8=14
9 2
(4,{2,3,5}) {2}
{3}
{5} 5
4
3
{3,5}
{2,5}
{2,3}
5+f3(2,{3,5})=5+14=19
4+f3(3,{2,5})=4+9=13*
3+f3(5,{2,3})=3+11=14
13 3
(5,{2,3,4}) {2}
{3}
{4} 1
6
3
{3,4}
{2,4}
{2,3}
1+f3(2,{3,4})=1+9=10*
6+f3(3,{2,4})=6+10=16
3+f3(4,{2,3})=3+9=12
10 2
对于k=1,有
f1(1,S1)=min{C1j+f2(j,S2)}
f1(1,S1)的值列表如下:
(1,S1) j C ij S2C ij+f2(j,S2) f1(1,S1) j*
(1,{2,3,4,5}) {2}
{3}
{4}
{5}
2
7
2
5
{3,4,5}
{2,4,5}
{2,3,5}
{2,3,4}
2+f2(2,{3,4,5})=2+13=15*
7+f2(3,{2,4,5})=7+9=16
2+f2(4,{2,3,5})=2+13=15*
5+f2(5,{2,3,4})=5+10=15*
15 2,4,5
由状态x1=(1,{2,3,4,5})开始回朔,得到
(1,{2,3,4,5})
j*=2
(2,{3,4,5}) (5,{2,3,4}) (4{2,3,5})
j*=5 j*=2 j*=3
(5,{3,4}) (2,{3,4}) (3,{2,5})
j*=3 j*=3 j*=2
(3,{4}) (3,{4}) (2,{5}) (5,{2})
j*=4 j*=4 j*=4 j*=2
(4,Φ) (4,Φ) (5,Φ) (2,Φ) 即得到以下四条回路:
(1) ①→②→⑤→③→④→①
(2) ①→⑤→②→③→④→①
(3) ①→④→③→②→⑤→①
(4) ①→④→③→⑤→②→①
其中(1)和(4)是同一条回路,(2)和(3)是同一条回路,这两条回路的图示如下: 容易验证,两条回路的长度都是15。

图2.3
图2.4。

相关文档
最新文档