- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章动态规划讲解
第六章 动态规划
6.1 动态规划的思想方法
6.1.1 动态规划的最优决策原理
活动过程划分为若干个阶段,每一阶段的决策,依赖于前一阶段的状态,由决策所采取的动作,使状态发生转移,成为下一阶段的决策依据。
图6.1 动态规划的决策过程
最优性原理:无论过程的初始状态和初始决策是什么,其余决策都必须相对于初始决策所产生的状态,构成一个最优决策序列。
令最优状态为,由此倒推:
最优决策序列,
状态转移序列:
赖以决策的策略或目标,称为动态规划函数。
整个决策过程,可以递归地进行,或用循环迭代的方法进行。
动态规划函数可以递归地定义,也可以用递推公式来表达。
最优决策是在最后阶段形成的,然后向前倒推,直到初始阶段;
而决策的具体结果及所产生的状态转移,却是由初始阶段开始进行计算的,然后向后递归或迭代,直到最终结果。
6.1.2 动态规划实例、货郎担问题
例6.1 货郎担问题。
在有向赋权图中,寻找路径最短的哈密尔顿回路问题。
一、解货郎担问题的过程
令:从顶点出发,经中各顶点一次,最终回到顶点的最短路径的长度,
开始时,。
动态规划函数:
(6.1.1)
(6.1.2)
4个城市的费用矩阵是:
根据(6.1.1)式,由城市1出发,经城市2,3,4然后返回1的最短路径长度为:
它必须依据的计算结果:
这一阶段的决策,又必须依据下面的计算结果:
再向前倒推,有:
有了这些结果,再向后计算,有:
路径顺序是:2,3,4,1
路径顺序是:3,2,4,1
路径顺序是:4,3,2,1
最后:
路径顺序是:1,2,3,4,1
图6.2 货郎担问题求解过程示意图
二、复杂性分析
令是计算从顶点出发,返回顶点所需计算的形式为的个数。
开始计算时,集合中有个城市。
以后,在计算时,集合的城市数目,在不同的决策阶段,分别为,┅,0。
在整个计算中,需要计算大小为的不同城市集合的个数为,。因此,总个数为:
当集合中的城市个数为时,为计算,需次加法, 次比较。从城市出发,经其它城市再回到,总的运算时间为:
由二项式定理:
令;可得:
则用动态规划方法求解货郎担问题,总的花费为:
6.2 多段图的最短路径问题
6.2.1 多段图的决策过程
定义6.1 有向连通赋权图,顶点集合划分成个不相交的子集,,,使得中的任一边,必有,,。称为多段图。
令,称为源点,为收点。
多段图的最短路径问题,是求从源点到达收点的最小花费的通路
一、顶点编号:
根据多段图的个不相交的子集,把多段图划分为段,每一段包含顶点的一个子集。
把顶点集合中的所有顶点,按照段的顺序进行编号。
子集中的顶点互不邻接,它们之间的相互顺序无关紧要。
顶点个数为,顶点的编号为0,则收点的编号为,
对中的任何一条边,顶点的编号小于顶点的编号。
二、决策过程
数组元素:存放顶点到达收点的最小花费
数组元素:存放顶点到达收点的最小花费通路上的前方顶点编号
数组:存放从源点出发,到达收点的最短通路上的顶点编号
第一阶段,确定第段的所有顶点到达收点的花费最小的通路。
第二阶段,用第一阶段的信息,确定第段的所有顶点到达收点的花费最小的通路。
如此依次进行,直到最后确定源点到达收点的花费最小的通路。
最后,从源点的信息中,确定它的前方顶点编号,
从的信息中,确定的前方顶点编号,
如此递推,直到收点。
动态规划函数:
(6.2.1)
(6.2.2)
三、步骤:(n为顶点个数)
1. 对所有的,把初始化为最大值,初始化为-1;初始化为0;
2. 令;
3. 根据(6.2.1)式和(6.2.2)式计算和;
4. ,若,转3;否则,转5;
5. 令,;
6. 如果,算法结束;否则,转7;
7. ,;转6;
例6.2 求解图6.3所示的最短路径问题。
图6.3 动态规划方法求解多段图的例子
(i表示顶点编号)
:
:
:
:
:
:
:
:
:
最后,得到最短的路径为0,2,3,5,8,9,费用是15。
6.2.2 多段图动态规划算法的实现
struct NODE { /* 邻接表结点的数据结构 */
int v_num; /* 邻接顶点的编号 */
Type len; /* 邻接顶点与该顶点的费用 */
struct NODE *next; /* 下一个邻接顶点 */
};
struct NODE node[n]; /* 多段图邻接表头结点 */
Type cost[n]; /* 在阶段决策中,各个顶点到收点的最小费用 */
int
您可能关注的文档
最近下载
- 期末默写、文言基础复习 统编版高中语文必修上册.docx VIP
- 对水果产业发展的调研报告.pdf
- 海水提取氯化钾项目节能评估报告.docx VIP
- 【一诊】绵阳市高三2022级(2025届)第一次诊断性考试数学试卷(含答案逐题解析).docx
- 2023-2024学年天津市河北区八年级第一学期期中数学试卷及参考答案完整版.pdf VIP
- 海水提取氯化钾项目节能分析报告.docx VIP
- 地基承载力标准值、特征值、允许值辨析.pdf
- 山东省烟台市2023至2024学年高二上学期期中考试化学试题附参考答案(解析).docx
- 利用PDCA降低乳腺癌改良根治术后患肢功能障碍发生率【24页】.pptx
- 高中英语课件:The Face-down Generation.pptx
文档评论(0)