动态规划--运筹学课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南农业大学
综合设计报告
综合设计五
动态规划算法
学生姓名:曾俊扬
学号:200840204219
年级专业:2008级信息与计算科学2班
指导老师:王明春老师
学院:理学院
评阅成绩:
评阅意见:
成绩评定教师签名:时间:
湖南·长沙
提交日期:2011年6月
动态规划之最短线路问题
1设计目的、要求
熟悉动态规划的相关概念,掌握使用动态规划的基本方法求解生活实际问题。本设计主要研究最短路问题,利用JAVA 实现最短路算法。
2设计原理
在求解的各个阶段,利用了k 阶段与k+1阶段之间的递推关系:
{}11()55444()min (,())()4,3,2,1
()0(()(,))
k k k k k k k k k k u D s f s d s u s f s k f s f s d s E ++∈⎧=+=⎪⎨==⎪⎩或
3采用软件、设备
微型电子计算机、MyEclipse 6.5
4设计内容
1.动态规划基本认识:
动态规划是运筹学的一个分支,它是解决多阶段决策过程最优化问题的一种方法。该方法是由美国数学家贝尔曼(R .Bellman)等人在本世纪50年代初提出的。他们针对多阶段决策问题的特点,提出了解决这类问题的“最优化原理”,并成功地解决了生产管理、工程技术等方面的许多实际问题,从而建立了运筹学的一个新分支——动态规划。他的名著《动态规划》于1957年出版,该书是动态规划的第一本著作。
动态规划是现代企业管理中的一种重要决策方法,在工程技术、经济管理、工农业生产及军事及其它部们都有广泛的应用,并且获得了显著的效果。动态规划可用于解决最优路径问题、资源分配问题、生产计划与库存问题、投资分配问题、装载问题、设备更新与维修问题、排序问题及生产过程的最优控制等。由于它所具有独特的解题思路,在处理某些优化问题时,常常比线性规划或非线性规划方法更有效。
本设计从实际问题展开对动态规划算法最短路问题的实现。
2.实际问题:某工厂需要把一批货物从城市A 运到城市E ,中间可经过B 1 、
B 2、B 3、
C 1、C 2、C 3、
D 1、D 2等城市,各城市之间的交通线和距离如下图所示,问应该选择一条什么路线,使得从A 到
E 的距离最短?
3.分析求解:基本概念及相关符号
(1) 阶段
把所给问题的过程,按时间和空间特征划分成若干个相互联系的阶段,以便按次序去求每个阶段的解,阶段总数一般用字母n 表示,用字母k 表示阶段变量。 (2) 状态
状态表示每个阶段开始时系统所处的自然状况或客观条件,它描述了研究问题过程状况。描述各阶段状态的变量称为状态变量,常用字母s k 表示第k 阶段的状态变量,状态变量的取值范围称为状态集,用S k 表示。 (3) 决策
当系统在某阶段处于某种状态,可以采取的行动(或决定、选择),从而确定下一阶段系统将到达的状态,称这种行动为决策。描述决策的变量,称为决策变量。常用字母u k (s k )表示第k 阶段系统处于状态s k 时的决策变量。决策变量的取值范围称为决策集,用D k (s k )表示。
下面利用动态规划的逆推归纳法,将问题从最后一个城市E 逐步推算到第一个城市A ,在此()k k f s 表示第k 阶段从城市s k 到城市E 最短路。
1)当 k = 4 时,由于第四阶段只有两个城市 D 1、D 2
显然,*41141()(,)4,()f D d D E u D E ===,*
42242()(,)3,()f D d D E u D E ===。
2)当 k = 3 时,s 3取值C 1、C 2、C 3 ,从C 1出发到E 有两条路,一条是经过
D 1到
E ,另一条是经过D 2到E ,显然:
1141*31311
1242(,)()34()min min 7,
()(,)()53d C D f D f C u C D d C D f D ++⎧⎫⎧⎫
====⎨⎬⎨⎬++⎩⎭⎩⎭
即从1C 到E 的最短距离是7,相应的决策为*311()u C D =,最短路线是
11C D E →→。
同理 2141*323222242(,)()64()5,
()(,)()23d C D f D f C u C D d C D f D ++⎧⎫⎧⎫
====⎨
⎬⎨⎬++⎩⎭
⎩⎭
3141*333313242(,)()14()5,
()(,)()33d C D f D f C u C D d C D f D ++⎧⎫⎧⎫
====⎨⎬⎨⎬++⎩⎭
⎩⎭
3)当 k = 2 时,s 2的取值为B 1、B 2、B 3,从B 1出发到E 有三条路,分别是
经过C 1、C 2、C 3到E ,则有:
1131*2112322121333(,)()67()(,)()459,
()55(,)()d B C f C f B d B C f C u B C d B C f C ++⎧⎫⎧⎫⎪⎪⎪⎪
=+=+==⎨⎬⎨⎬⎪⎪⎪⎪
++⎩⎭⎩
⎭
同理 2131*2222322232333(,)()87()(,)()7511,
()65(,)()d B C f C f B d B C f C u B C d B C f C ++⎧⎫⎧⎫
⎪⎪⎪⎪
=+=+==⎨⎬⎨⎬⎪⎪⎪⎪
++⎩⎭⎩⎭
3131*233232233333(,)()77()(,)()8512,
()75(3,)()d B C f C f B d B C f C u B C d B C f C ++⎧⎫⎧⎫
⎪⎪⎪⎪
=+=+==⎨⎬⎨⎬⎪⎪⎪⎪
++⎩⎭⎩
⎭
4)当k = 1时,s 1的只有一个取值为A. 从A 出发到E 有三条路,分别经
过B 1、B 2、B 3到E ,则有:
121*122211323(,)()89()min (,)()min 91117,
()612(,)()d A B f B f A d A B f B u A B d A B f B ++⎧⎫⎧⎫⎪⎪⎪⎪
=+=+==⎨⎬⎨⎬⎪⎪⎪⎪
++⎩⎭⎩
⎭
于是得到从A 到E 的最短距离17,为了找出最短路线,按计算的顺序逆
推回去,可得到最优策略为:
****1,41121232242(){(),(),(),()}p A u A B u B C u C D u D E =====, 最短路线是A →B 1→C 2→D 2→E 。
4.代码实现: 利用MyEclipse 采用java 语言实现对实际问题的代码求解 (1)创建了两个类Node 、Status
Node 是节点类,对应于各城市,包含节点标识(id )、指向(所指向的节 点)以及对应的权值即距离三个属性,方法getW()用于获得两节点之间的距离。
Status 是阶段类,对应于各决策阶段,包含阶段标识(id)、节点数、节点三个属性。
(2)主程序:ShortLineDemo.java 创建各节点,生成各阶段状态。 遍历各状态中的各节点:
for(int i=s.length-1;i>=0;i--){ System.out .print("k="+(i+1)+"时,"); for(int j=0;j