动态规划求最短旅行路线.doc
动态规划求最短旅行路线摘要在我们日常生活和旅行中经常遇到求最短路径的问题,将动态规划思想运用到求解旅行问题最短路径中,将过程划分为几个阶段,在每阶段中选取最优策略,最后将找到整个过程的总体优化目标即最短路径。给出了动态规划方法的基本原理,尽力了动态规划数学模型,通过一个实际应用例子具体说明动态规划求解旅行问题最短路径过程,并总结出动态规划在此类问题中的优越性。关键词动态规划,最短路径,多阶段决策,MATLAB一、预备知识1基本理论11动态规划基本思想动态规划是一种强有力的算法设计技术,它被广泛用于求解组合最优化问1题。这种方法是采用自底向上的方式递推求值,将待求解的问题分解成若干个子问题,先求解子问题,并把子问题的解存储起来以便以后用来计算所需要求的解。总言之,动态规划的基本思想就是把全局的问题化为局部的问题,为了全局最优必须局部最优。动态规划基本步骤(1)找出最优解的性质,并刻划其结构特征;(2)递归的定义最优值;(3)以自底向上的方式计算出最优值;(4)根据计算最优值时的信息,构造最优解。12多阶段决策过程分析多阶段决策问题是根据问题本身的特点,将其求解的过程划分为若干个3相互独立又相互联系的阶段,在每一个阶段都需要做出决策,并且在一个阶段的决策确定以后再转移到下一个近阶段,在每一阶段选取其最优决策,从而实现整个过程总体决策最优的目的。适合用动态规划方法求解的问题是一类特殊的多阶段决策问题,具有“无后效性”的多阶段决策问题,一般具有以下特点(1)可以划分成若干个阶段,问题的求解过程是对若干个阶段的一系列决策过程。(2)每个阶段有若干个可能状态。(3)一个决策将你从一个阶段的一种状态带到下一阶段的某钟状态。(4)在任一阶段,最佳的决策序列和该阶段以前的决策无关。(5)各阶段状态之间的转换有明确定义的费用,而且在选择最佳决策时有递推关系(即状态转移方程)。2、动态规划求最短旅行路线21问题重述设某旅行者要从A点出发到终点B,他事先得到一张路线图如图1所示,各阶段距离如图上所标数值,旅行者沿着箭头方向行走总能到达B点。试求出A到B点两点间的最短旅行路线及距离。图1旅游路线图22问题模型建立(两种方法)221逆序递推法模型首先根据网络图建立数学模型,我们可以将旅行过程划分成六个阶段。阶段便两用K表示;状态变量S。表示K阶段初可能的位置;决策X表示K阶段初可能选择的路线;状态转移方程KXS1;阶段指标KV表示K阶段与所选择的路段相应的路长;KF表示第K阶段点KS到终点层的旅行费用;递推公式}MIN{1KFVF,K6,5,4,3,2,1;KX表示最优决策;边界条件K7时,07F。222DIJKSTRA算法模型求A到B点最短路,对于每个顶点,定义两个标记,VZL,其中VL表从起点A到V的一条路的权。ZV的父亲点,用以确定最短路的路线算法的过程就是在每一步改进这两个标记,使最终VL为从顶点A到B的最短的权。S具有永久标号的顶点集输入带权邻接矩阵,VUW。23模型求解两种解法231逆序递推法逆序递推方程为},{MIN1KKUKSFSDSFKK6,5,4,3,2,1;07整个计算过程分六个阶段,从最后一个阶段开始直到第一阶段结束,利用MATLAB最后求得最短路径。42最后求得16},MIN{,,MIN21DFADCFADF于是从A到B的最短路线为ACFJMOB,其长度为16。MATLAB代码如下A043INFINFINFINFINFINFINFINFINFINFINFINFINFINF0INF54INFINFINFINFINFINFINFINFINFINFINFINFINF0INF73INFINFINFINFINFINFINFINFINFINFINFINFINF0INFINF21INFINFINFINFINFINFINFINFINFINFINFINF0INFINF12INFINFINFINFINFINFINFINFINFINFINFINF0INFINF74INFINFINFINFINFINFINFINFINFINFINFINF0INFINFINF3INFINFINFINFINFINFINFINFINFINFINFINF0INFINF34INFINFINFINFINFINFINFINFINFINFINFINF0INFINF25INFINFINFINFINFINFINFINFINFINFINFINF0INFINF2INFINFINFINFINFINFINFINFINFINFINFINFINF0INFINF5INFINFINFINFINFINFINFINFINFINFINFINFINF0INF28INFINFINFINFINFINFINFINFINFINFINFINFINF0INF4INFINFINFINFINFINFINFINFINFINFINFINFINFINF0INF2INFINFINFINFINFINFINFINFINFINFINFINFINFINF01INFINFINFINFINFINFINFINFINFINFINFINFINFINFINF0S11A11,14A14,16S12MINA12,14A14,16,A12,15A15,16S13A13,15A15,16S7A7,11S11S8MINA8,11S11,A8,12S12S9MINA9,12S12,A9,13S13S10A10,13S13S4MINA4,7S7,A4,8S8S5MINA5,8S8,A5,9S9S6MINA6,9S9,A6,10S10S2MINA2,4S4,A2,5S5S3MINA3,5S5,A3,6S6S1MINA1,2S2,A1,3S3程序运行结果于是从A到B的最短路线为ACFJMOB,其长度为16。232DIJKSTRA算法算法步骤(1)赋初值令A顶点为,S={},0,,令U00LU0VSV\LV,WUV0ZU0(2)更新、,若LVV\LVW,则令,WZVU(3)设是使取最小值的中的顶点,则令SS∪{},LSVUV(4)若Φ,转2,否则,停止。S用上述算法求出的就是A到其它顶点的最短路的权,从的父亲标记LV追溯到A,就得到A到B的最短路的路线。VZMATLAB代码如下W043INFINFINFINFINFINFINFINFINFINFINFINFINFINF0INF54INFINFINFINFINFINFINFINFINFINFINFINFINF0INF73INFINFINFINFINFINFINFINFINFINFINFINFINF0INFINF21INFINFINFINFINFINFINFINFINFINFINFINF0INFINF12INFINFINFINFINFINFINFINFINFINFINFINF0INFINF74INFINFINFINFINFINFINFINFINFINFINFINF0INFINFINF3INFINFINFINFINFINFINFINFINFINFINFINF0INFINF34INFINFINFINFINFINFINFINFINFINFINFINF0INFINF25INFINFINFINFINFINFINFINFINFINFINFINF0INFINF