目的动态规划dynamicprogrammingDP是解决多.docx

上传人:b****3 文档编号:26560828 上传时间:2023-06-20 格式:DOCX 页数:13 大小:390.53KB
下载 相关 举报
目的动态规划dynamicprogrammingDP是解决多.docx_第1页
第1页 / 共13页
目的动态规划dynamicprogrammingDP是解决多.docx_第2页
第2页 / 共13页
目的动态规划dynamicprogrammingDP是解决多.docx_第3页
第3页 / 共13页
目的动态规划dynamicprogrammingDP是解决多.docx_第4页
第4页 / 共13页
目的动态规划dynamicprogrammingDP是解决多.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

目的动态规划dynamicprogrammingDP是解决多.docx

《目的动态规划dynamicprogrammingDP是解决多.docx》由会员分享,可在线阅读,更多相关《目的动态规划dynamicprogrammingDP是解决多.docx(13页珍藏版)》请在冰豆网上搜索。

目的动态规划dynamicprogrammingDP是解决多.docx

目的动态规划dynamicprogrammingDP是解决多

实验目的:

动态规划(dynamicprogramming,DP)是解决多阶段决策问题的一种有效的数量化方法,难度比较大,技巧性也很强。

Lindo/lingo是求解动态规划比较常用的软件之一,通过本实验,掌握动态规划模型在Lindo/lingo中的求解。

实验要求:

1.掌握动态规划的建模步骤及方法;

2.掌握动态规划模型在Lindo/lingo转化及求解;

3.学会动态规划的执行结果分析

实验内容及步骤:

例:

如图5-1所示,某地要从A向F地铺设一条输油管道,各点间连线上的数字表示距离。

问应选择什么路线,可是总距离最短?

                   图5-1

下面简单说明动态规划的求解建模过程,有助于下一步在Lindo/lingo中模型的表示,这是一个很重要的过程,建议读者不要跳过。

动态规划方法求解时注意事项:

(1)动态规划的三个基本要素:

阶段、状态、决策。

其中最关键的是状态的描述,最难的也是状态的设计,它关系到算法的时间、空间复杂度,也跟实现的复杂度息息相关。

(2)动态规划的两个条件:

最优子结构、无后效性,其中后效性往往容易被忽视。

(3)动态规划本质是用空间换时间,在有大量重叠子问题的时候其优势才能充分体现出来。

上例的求解过程如下:

(1)阶段与阶段变量:

先把问题从中间站B,C,D,E用空间位置分成5个阶段,阶段用阶段变量k来描述,k=1,表示第一阶段,k=2表示

第二阶段,…

(2)状态与状态变量:

每一阶段的左端点(初始条件)集合称为本阶段的状态(即开始的客观条件,或称阶段初态)。

如第三阶段有四个状

态S3={C1,C2,C3,C4},第四阶段有三个状态S4={D1,D2,D3},…

描述过程状态的变量称为状态变量:

用小写s1,s2,s3…表示第一,第二,第三…阶段的状态变量。

当处在状态C2时,我们可记s3=C2

(3)决策与决策变量:

如当处于C2状态时,下一步怎么走?

如何选择路线?

即如何决策。

是走向D1,还是走向D2?

当过程处于某一阶段的某一状态时,可以作出不同的决策(或选择),从而确定下一阶段的状态,这种决定(或选择)叫决策。

如选择D2,记u3(C2)=D2即当处于C2状态时,下一步的决策为D2。

其中uk(sk)表示第k阶段当状态处于sk时的决策变量。

一般地,用Dk(sk)表示第k阶段从状态sk出发的允许决策集合。

D3(C2)={D1,D2}显然,uk(sk)∈Dk(sk)。

(4)策略与最优策略:

每一阶段产生一个决策,5个阶段的决策就构成一个决策序列:

  u1(s1),u2(s2),u3(s3),u4(s4),u5(s5)

称为一策略。

所谓策略是指按一定的顺序排列的决策组成的集合,也称决策序列。

这里的最短路径成为最优策略。

动态规划就是在允许策略集中选最优策略。

(5)状态转移方程:

是描述由第k阶段到第k+1阶段状态转移规律

的关系式。

sk+1=Tk(sk,uk)

上例中状态转移方程为:

sk+1=uk(sk)

(6)指标函数与最优指标函数:

用于衡量所选定策略优劣的数量指标称为指标函数。

相当于动态的目标函数,最后一个阶段的目标函数就是总的目标函数。

它分阶段指标函数和过程指标函数。

阶段指标函数是指第k阶段,从状态sk出发,采用决策uk时的效益,用dk(sk,uk)表示。

最优指标函数是指从第k阶段状态sk采用最优策略到过程终止时的最佳效益值,用fk(sk)表示。

例如:

d(C2,D1)是指由C2出发,下一阶段的决策是D1的两点间的距离。

即d(C2,D1)=4。

f2(B1)表示从B1到F的最短距离。

整个问题即为f1(A)=?

在这里我们选择逆序递推法求解:

倒退着从F向A走,每倒退一步,思想上问自己:

“从现在出发,退向何处?

到F的距离最短?

”我们分5步来解决问题:

(1)k=5时

求f5(s5)=?

此时状态集S5={E1,E2},故分情况讨论,由E1到终点F的最短距离为f5(E5)=5同理,f5(E2)=3。

故最优决策为:

u5∗(E1)=F,u5∗(E2)=F

k=4时下求f4(s4)=?

由于S4={D1,D2,D3}下分四种情况进行讨论:

(5)k=1时,S1={A}

再按计算顺序的反推可得最优策略:

u1∗(A)=B1.u2∗(B1)=C2.u3∗(C2)=D2.u∗4(D2)=E2.u5∗(E2)=F

从而得最优路径:

a58

最短距离为:

f1(A)=17。

由上面的过程可以看出,在求解的各个阶段利用了第k段和第k+1段的如下关系:

此递推关系称为动态规划的基本方程。

式(7.2)称为边界条件。

每步的计算过程及最路径如图5-2所示。

          图5-2

当然本题也可用顺序法求解,但与逆序法无本质的区别。

一般来说,当初始状态给定时,用逆序解法,当终止状态给定时,用顺序解法。

若既给定了初始状态又给定了终止状态,则两种方法均可使用。

下面用lingo来求解动态规划问题

可以看出上面的求解过程是比较复杂的,用lingo来求解动态规划问题可以节省大量时间,但使用前要把问题进行一个转化,让lingo知道我们在用它做什么。

为了完成模型的转化,有必要对最短路问题的本质进行探讨。

其实最终路问题用数学语言来表示就变成如下问题:

给定N个点Pi(i=1,2,...,N)组成集合{Pi},由集合中任一点Pi到另一点Pj的距离用dij表示,两点之间的没有路径,则设dij=+∞,显然dii=(0≤i≤N),指定始点为P1终点PN,要求从点P1出发到PN的最短路线。

下面把上例进行转化:

(1)描述点

上述图5-1中的城市和点的对应关系如表7-1所示

表7-1城市和点的对应关系

(2)确定N,可见N=13

(3)确定dij,可得d12=4,d13=5,…,d1213=3

(4)表示状态转移方程。

在这里,定义f(i)是由Pi点出发至终点PN的最短路程,则状态转移方程就变成如的递推方程。

这是一个简单的函数方程,用LINGO可以很方便的解决。

下面说明lingo求解步骤:

第一步,在Lingo的命令窗口中输入此动态规划的模型,如图5-3所示:

然后单击File菜单下的Save,将模型保存,以供以后使用。

(当然也可以不保存模型。

其程序的源代码如下:

其程序的源代码如下:

model:

!

输入个新的模型;

data:

n=13;!

定义城市的个数;

enddata

sets:

cities/1..n/:

F;!

13个城市;!

结构类型名为cities,结构变量是F,其包含n个成员,F

(1),…,F(n),

其中F(i)表示将表示从第i个城市到第n个城市的最短路。

;

roads(cities,cities)/!

roads类型中有n*n个成员,分别表示每两个城市之间是否有路(直接相连);

1,2 1,3!

表示城市1和城市2之间有路,下同;

2,4 2,5 2,6

3,5 3,6 3,7

4,8 4,9

5,8 5,9

6,9 6,10

7,9 7,10

8,11 8,12

9,11 9,12

10,11 10,12

11,13

12,13

/:

D,P;!

D(i,j)将表示城市i到j的距离;

endsets

data:

D=

 4 5 

 2 3 6

 8 7 7

 5 8

 4 5

 3 4

 8 4

 3 5

 6 2

 1 3

 4

 3;

 enddata

F(@SIZE(CITIES))=0;!

其实"@SIZE(CITIES)"就等于n.如果你计算n个城市的最短距离,则第n个城市到第n个城市的旅行费用是0;

@FOR(CITIES(i)|i#LT#@SIZE(CITIES):

F(i)=@MIN(ROADS(i,j):

D(i,j)+F(j))

);!

从城市i到城市n最短的距离一定是与i相连的所有城市j到城市n的最短距离(即F(j))与城市i到城市j距离(即D(i,j))之和的最小值。

;

@for(roads(i,j):

P(i,j)=@if(F(i)#eq#D(i,j)+F(j),1,0)!

显然,如果P(i,j)=1,则点i到点n的最短路径的第一步是i-->j,否则就不是。

由此,我们就可方便的确定出最短路径;

);

end

第二步,单击Lingo菜单下的Solver菜单项(或点击

也可),对模型进行求解。

其结果如图5-4所示:

下面是其详细结果:

因篇幅有限,这里把“RowSlackorSurplus”结果省去。

第三步,对结果进行分析,得出结论。

F

(1),…,F(13)分别显示了从P1,.....,P13点到终的距离,可以看出从始点到终点的最短距离为17,与手工求解结果一样。

D(i,j)显示的是Pi到Pj的距离如“D(1,2)4.000000”表从点P1到点Pj的距离为4,这些值是在模型初始化时进行设定的。

P(i,j)显示的是从某点到终点的最短路径中是否过Pi到Pj的路径,如“P(1,2)1.000000”表从某点到终点的最短路径过P1与Pj的路径,注意这里的某点不一定是始点。

由此可以得出结论,某点到终点的最短路径分别为:

根据“表7-1城市和点的对应关系”即可推出图7-2所示的各最短路径。

实验条件:

1.清华出版社《运筹学教程》教材;

     2.Lindo/lingo计算机软件;

实验思考:

1、求下列网络图从起点到终点的最短路线及长度。

2、货郎担问题(travelingsalesmanproblem,TSP):

一货郎从某城市

出发要经过n个城市,每个城市都要经过且只能经过一次,最后还要回到原先出发的城市,问应如何选择旅行路线可使总行程最短。

设有6个城市,每个城市之间的距离如表5-2所示:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1