动态规划--运筹学课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档