当前位置:
文档之家› 算法201008-动态规划1
算法201008-动态规划1
V1
9
V2 2
1 3 4 11 5 11
V3 4 2 6 2 7 7 8 6 5 4 5 6
V4 9
V5
4 2 12 t
s 1
7 3 2
3
10 11
5
8
多段图的向前处理算法
为了使写出的算法更简单一些,可事先对结点集V的结 点按下述方式排序:首先将s 结点编成1号,然后对V2 中的结点编号,V3的结点接着V2中的最后一个编号继 续往下编……最后将t 编成n号。 经过这样编号,Vi+1中结点的编号Vi 均大于中结点的 编号。于是,COST和D都可按n-1,n-2,……,1的次序计 算,而无需考虑COST、P和D中标识结点所在段数的 第一下标,因此它们的第一下标可在算法中略去。
求解多段图问题的动态规划算法
首先根据前面介绍的向前处理法列出求取s到t的最小成本路径的 递推式。 边的成本
多段图向前处理的算法 设P(i, j)是一条从Vi中的节点j 到汇点t 的最小成本路径, COST(i, j)表示这条路径的成本,根据向前处理方法有 (5-1): (i, j) min {c( j , l ) COST (i 1, l )} COST
V4
V5
6
9
2 5 6 11
s 1
7 3 2
3
4
7
5
10
12 t
4 11
5
11
8
8
COST(3,6)=min{6+COST(4,9), 5+COST(4,10)}=7 COST(3,7)=min{4+COST(4,9), 3+COST(4,10)}=5 COST(3,8)=min{5+COST(4,10), 6+COST(4,11)}=7
V1
V2 2 9 1 4 2 2 7
V3 6 5 4 3V4V5 Nhomakorabea6
9
2 5 6 11
s 1
7 3 2
3
4
7
5
10
12 t
4 11
5
11
8
8
COST(2,2)=min{4+COST(3,6), 2+COST(3,7), 1+COST(3,8)}=7 COST(2,3)= min{2+COST(3,6), 7+COST(3,7)}= 9 COST(2,4)= min{11+COST(3,8)}= 18 COST(2,5)= min{11+COST(3,7), 8+COST(3,8)}= 15
lVi 1 j ,l E
V1 9
s 1 7 3 2
V2 2 3
4 1
V3 4
V4
V5 4 2 5
12 t
2 2 7
8
6 7 8
5 4
6
3 6
9 10 11
11 5 11
5
多段图的向前处理算法
若<j, t> ∈E成立,有COST(k-1,j)=c(j,t),若<j, t> ∈E不 成立,则有COST(k-1,j)=∞,所以可以通过如下步骤解 式公式(5-1),并最终求出COST(1,s)。 首先对于所有j∈Vk-2,计算COST(k-2, j),然后对所有 的j∈Vk-3, 计算COST(k-3, j)等等,最后计算出 COST(1, s)
多段图的向前处理算法
Line procedure FGRAP(E,k,n,P) real COST(n),integer D(n-1),P(k),r,j,k,n COST(n)0 for jn -1 to 1 by –1 do 设r是一个这样的结点,<j, r>∈E且使c(j,r)+COST(r)取小值 COST(j)c(j,r)+COST(r) D(j)r 计算出COST(j)的值, repeat 并找出一条最小成本 P(1)1;P(k)n 路径 for j2 to k-1 do P(j)D(P(j-1)) 找出最小成本路径 repeat 上的第j个结点 End FGRAPH
n=12 , k=5 ;
COST(n)=COST(12)=0;执行For循环,计算出各COST(j)的值:
j=n-1=11 , COST(11)=5 , D(11)=12 ; j=n-2=10,COST(10)=2 , D(10)=12; j=n-3=9,COST(9)=4, D(9)=12 ; j=n-4=8 , COST(8)=7, D(8) =10 ; j=n-5=7 , COST(7)=5 , D(7) =10; j=n-6=6 , COST(6)=7, D(6) =10 ; j=n-7=5 , COST(5)=15 , D(5) =8; V1 9 V2 2 1 7 3 2 3 4 11 5 11 8 8 V3 4 2 2 7 6 7 5 4 5 6 11 V4
•可以使用多段图的路径总数来度量游戏好玩度,路径总数 越多则玩法越多,则玩家越认为好玩。 •最长路径代表游戏最长通关时间,因此若发现最长路径太 长,玩家会厌倦,则调整边,使之适合。 •若出现环,则游戏无法结束,则为游戏设计的失败。 •最短路径代表游戏的最短通关时间,若路径太短,则代表 游戏有Bug,使玩家进入无敌状态,游戏很快被玩完,则为 游戏设计失败。 流水装配线
V1
V2 2
V3 4 1
V4 6 5 4 3 6
V5
9
s 1 7 3 2
3 4 11 5
11
2 6 2 7 7
8
9 10
11 2 5
4 12 t
5
8
设这条最小成本路径是s=l ,v2,v3,…,vk-1, t=12。则可得 知: v2=D(1, 1)=2,v3=D(2 , D(1,1))= D(2,2)= 7 和 v4=D(3 , D(2, D(1, 1)))= D(3, D(2,2))= D(3, 7)=10 所以最短路径的结点序列为:s -> 2 -> 7 -> 10 -> t 。
F0 F1 1
动态规划是运筹学的一个分支,是求解决策过程(Decision Process)最优化的数学方法。
20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决 策过程(multistep decision process)的优化问题时,提出 了著名的最优化原理(Principle of Optimality),将多阶段决 策过程转化为一系列的单阶段决策问题,并创立了解决这类过程 优化问题的新方法—动态规划,于1957年出版了他的名著 《Dynamic Programming》,是该领域的第一本著作。
V5
4
6
9
s 1
3
10
2
5
12 t
j=n-8=4 , COST(4)=18 , D(4)=8 ; j=n-9=3 , COST(3)=9 , D(3)=6 ; j=n-10=2 , COST(2)=7, D(2) =7 ; j=n-11=1 , COST(1)=16 , D(1)=2; 找出最小成本路径上的各个结点编号:P(1)=1; P(k)=P(5)=n=12; 执行For循环,求出各P(j)的值:P(2)=D(P(1))=D(1)=2;
多段图问题的最优化原理证明
证明最优化原理对多段图成立: 假设s,v2,v3,…,vk-1,t是一条由s到t的最短路径 再假设从源点s开始,已作出了到结点v2的决策,因此 v2就是初始决策所产生的状态 如果把v2看成是原问题的一个子问题的初始状态,解 决这个子问题就是找出一条由v2到t的最短路径 这条最短路径显然是v2,v3,…,vk-1,t 如果不是,设v2,q3,…,qk-1,t由v2到t的一条更短路径, 则s,v2,q3,…,qk-1,t是一条比路径s,v2,v3,…,vk-1,t更短的由 s到t的路径。这与假设矛盾,因此最优性原理成立。
V3 V 22 4 6 31 2 27 7 4 11 8 5 11 8
6 5 43 56
V4 9
10
11
V5 4 2 5
12
t
游戏的多段图描述
玩游戏的过程本质为一个多阶段决策过程,即玩家目前所采取的操 作(决策)影响以后的游戏状态以及决策,玩家经过多个决策过程 成才可将游戏玩完通关。
游戏可描述为多段图(并且游戏多为关卡回合制)即游 戏关卡的拓扑结构可以用多段图来表示。从而可以利用多 段图来描述游戏的某些性质。 游戏好玩度为游戏性质之一,因此,可以用多段图理论对此 游戏性质进行量化评价,并且可用多段图理论指导游戏关卡 设计.
多段图问题
多段图问题
V2 2 9 1 7 3 3 4 2 2 7 6 6 5 4 3 9 2 5 6 11 4 V3 V4 V5
V1
s 1
7
5
10
12 t
2
4 11 5 11 8 8
多段图问题
V1
9 1 7 s 3 多段图G=(V, E)是—个有向图。 2
它具有如下特性: 图中的结点被划分成k≥ 2个不相交的集合 Vi ,1≤i≤k,其中V1和Vk分别只有一个结点s (源点) 和 t ( 汇点)。 图中所有的边<u,v>均具有如下性质:若u∈Vi ,则 v ∈Vi+1 ,1≤i≤k,且每条边<u, v>均附有成本c(u, v)。 从s到t的一条路径成本是这条路径上边的成本和。 多段图问题(multistage graph problem)是求由s到 t的最小成本路径。
在计算每一个COST(i, j)的同时,记下每个状态(结点j)所做出的决策 (即,使 c(j,l )+cost(i+1,l )取最小值的l 值),设它为D(i, j),则可容 易地求出这条最小成本路径。 D(3,6)=10 D(3,7)=10 D(3,8)=10 D(2,2)=7 D(2,3)=6 D(2,4)=8 D(2,5)=8 D(1,1)=2