动态规划的技巧阶段的划分和状态的表示.docx
- 文档编号:27628301
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:8
- 大小:39.98KB
动态规划的技巧阶段的划分和状态的表示.docx
《动态规划的技巧阶段的划分和状态的表示.docx》由会员分享,可在线阅读,更多相关《动态规划的技巧阶段的划分和状态的表示.docx(8页珍藏版)》请在冰豆网上搜索。
动态规划的技巧阶段的划分和状态的表示
动态规划的技巧——阶段的划分和状态的表示
在动态规划的设计过程中,阶段的划分和状态的表示是非常重要的两步,这两步会直接影响该问题的计算复杂性,有时候阶段划分或状态表示的不合理还会使得动态规划法不适用。
[例9] 街道问题
在下图中找出从左下角到右上角的最短路径,每步只能向右方或上方走。
这是一道简单而又典型的动态规划题,许多介绍动态规划的书与文章中都拿它来做例子。
通常,书上的解答是这样的:
按照图中的虚线来划分阶段,即阶段变量k表示走过的步数,而状态变量xk表示当前处于这一阶段上的哪一点。
这时的模型实际上已经转化成了一个特殊的多段图。
用决策变量uk=0表示向右走,uk=1表示向上走,则状态转移方程如下:
(这里的row是地图竖直方向的行数)
我们看到,这个状态转移方程需要根据k的取值分两种情况讨论,显得非常麻烦。
相应的,把它代入规划方程而付诸实现时,算法也很繁。
因而我们在实现时,一般是不会这么做的,而代之以下面方法:
(这里Distance表示相邻两点间的边长)
这样做确实要比上面的方法简单多了,但是它已经破坏了动态规划的本来面目,而不存在明确的阶段特征了。
如果说这种方法是以地图中的行(A、B、C、D)来划分阶段的话,那么它的"状态转移"就不全是在两个阶段之间进行的了。
也许这没什么大不了的,因为实践比理论更有说服力。
但是,如果我们把题目扩展一下:
在地图中找出从左下角到右上角的两条路径,两条路径中的任何一条边都不能重叠,并且要求两条路径的总长度最短。
这时,再用这种"简单"的方法就不太好办了。
如果非得套用这种方法的话,则最优指标函数就需要有四维的下标,并且难以处理两条路径"不能重叠"的问题。
而我们回到原先"标准"的动态规划法,就会发现这个问题很好解决,只需要加一维状态变量就成了。
即用xk=(ak,bk)分别表示两条路径走到阶段k时所处的位置,相应的,决策变量也增加一维,用uk=(xk,yk)分别表示两条路径的行走方向。
状态转移时将两条路径分别考虑
在写规划方程时,只要对两条路径走到同一个点的情况稍微处理一下,减少可选的决策个数:
从这个例子可以看出,合理地划分阶段和选择状态可以给解题带来方便。
[例10]LITTLESHOPOFFLOWERS(IOI’99)
PROBLEM
Youwanttoarrangethewindowofyourflowershopinamostpleasantway.Youhave F bunchesofflowers,eachbeingofadifferentkind,andatleastasmanyvasesorderedinarow.Thevasesaregluedontotheshelfandarenumberedconsecutively1through V,where V isthenumberofvases,fromlefttorightsothatthevase1istheleftmost,andthevase V istherightmostvase.Thebunchesaremoveableandareuniquelyidentifiedbyintegersbetween1and F.Theseid-numbershaveasignificance:
Theydeterminetherequiredorderofappearanceoftheflowerbunchesintherowofvasessothatthebunch imustbeinavasetotheleftofthevasecontainingbunch j whenever i < j.Suppose,forexample,youhaveabunchofazaleas(id-number=1),abunchofbegonias(id-number=2)andabunchofcarnations(id-number=3).Now,allthebunchesmustbeputintothevaseskeepingtheirid-numbersinorder.Thebunchofazaleasmustbeinavasetotheleftofbegonias,andthebunchofbegoniasmustbeinavasetotheleftofcarnations.Iftherearemorevasesthanbunchesofflowersthentheexcesswillbeleftempty.Avasecanholdonlyonebunchofflowers.
Eachvasehasadistinctcharacteristic(justlikeflowersdo).Hence,puttingabunchofflowersinavaseresultsinacertainaestheticvalue,expressedbyaninteger.Theaestheticvaluesarepresentedinatableasshownbelow.Leavingavaseemptyhasanaestheticvalueof0.
VASES
1
2
3
4
5
Bunches
1(azaleas)
7
23
-5
-24
16
2(begonias)
5
21
-4
10
23
3(carnations)
-21
5
-4
-20
20
Accordingtothetable,azaleas,forexample,wouldlookgreatinvase2,buttheywouldlookawfulinvase4.
Toachievethemostpleasanteffectyouhavetomaximizethesumofaestheticvaluesforthearrangementwhilekeepingtherequiredorderingoftheflowers.Ifmorethanonearrangementhasthemaximalsumvalue,anyoneofthemwillbeacceptable.Youhavetoproduceexactlyonearrangement.
ASSUMPTIONS
∙1<= F <=100where F isthenumberofthebunchesofflowers.Thebunchesarenumbered1through F.
∙F <= V <=100where V isthenumberofvases.
∙-50<= Aij <=50where Aij istheaestheticvalueobtainedbyputtingtheflowerbunch i intothevase j.
INPUT
Theinputisatextfilenamed flower.inp.
∙Thefirstlinecontainstwonumbers:
F, V.
∙Thefollowing F lines:
Eachoftheselinescontains V integers,sothat Aij isgivenasthe jth numberonthe(i+1)st lineoftheinputfile.
OUTPUT
Theoutputmustbeatextfilenamed flower.out consistingoftwolines:
∙Thefirstlinewillcontainthesumofaestheticvaluesforyourarrangement.
∙Thesecondlinemustpresentthearrangementasalistof F numbers,sothatthe k’thnumberonthislineidentifiesthevaseinwhichthebunch k isput.
EXAMPLE
flower.inp:
35
723-5-2416
521-41023
-215-4-2020
flower.out:
53
245
EVALUATION
∙Yourprogramwillbeallowedtorun2seconds.
∙Nopartialcreditcanbeobtainedforatestcase.
本题虽然是IOI’99中较为简单的一题,但其中大有文章可作。
说它简单,是因为它有序,因此我们一眼便可看出这题应该用动态规划来解决。
但是,如何动态规划呢?
如何划分阶段,又如何选择状态呢?
<方法1>
以花束的编号来划分阶段。
在这里,第k阶段布置第k束花,共有F束花,有F+1个阶段,增加第F+1阶段是为了计算的方便;状态变量xk表示第k束花所在的花瓶。
而对于每一个状态xk,决策uk就是第k+1束花放置的花瓶号;最优指标函数fk(xk)表示从第k束花到第n束花所得到的最大美学值;A(i,j)是花束i插在花瓶j中的美学值,V是花瓶总数,F是花的总数。
状态转移方程为
规划方程为
边界条件为:
事实上这是一个虚拟的边界。
最后要求的最大美学价值是
<方法2>
方法1的规划方程中的允许决策空间:
xk+1≤uk≤V-(F-k)+1比较麻烦,因此有待改进。
还是以花束的编号来划分阶段,第k阶段布置第k束花;状态变量xk表示第k束花所在的花瓶;注意,这里我们考虑倒过来布置花瓶,即从第F束花开始布置到第1束花。
于是状态变量uk表示第k-1束花所在的花瓶;最优指标fk(xk)表示从第一束花到第k束花所获得的美学价值;A(i,j)是花束i插在花瓶j中的美学值,V是花瓶总数,F是花的总数。
则状态转移方程为:
规划方程为:
增加的虚拟边界条件为:
最后要求的最大美学价值是:
可以看出,这种方法实质上和方法1没有区别,但是允许决策空间的表示变得简单了。
<方法3>
以花瓶的数目来划分阶段,第k个阶段决定花瓶k中是否放花;状态变量xk表示前k个花瓶中放了多少花;而对于任意一个状态xk,决策就是第xk束花是否放在第k个花瓶中,用变量uk=1或0来表示。
最优指标函数fk(xk)表示前k个花瓶中插了xk束花,所能取得的最大美学值。
注意,这里仍然是倒过来考虑。
状态转移方程为
规划方程为
边界条件为
三种不同的方法都成功地解决了问题,只不过因为阶段的划分不同,状态的表示不同,决策的选择有多有少,所以算法的时间复杂度也就不同。
这个例子具有很大的普遍性。
有很多的多阶段决策问题都有着不止一种的阶段划分方法,因而往往就有不止一种的规划方法。
有时各种方法所产生的效果是差不多的,但更多的时候,就像我们的例子一样,两种方法会在某个方面有些区别。
所以,在用动态规划解题的时候,可以多想一想是否有其它的解法。
对于不同的解法,要注意比较,好的算法好在哪里,差一点的算法差在哪里。
从各种不同算法的比较中,我们可以更深刻地领会动态规划的构思技巧。
出师表
两汉:
诸葛亮
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。
然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。
诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
宫中府中,俱为一体;陟罚臧否,不宜异同。
若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。
侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:
愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为督:
愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。
先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。
侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也。
臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。
先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。
后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。
受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。
今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。
此臣所以报先帝而忠陛下之职分也。
至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。
若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。
臣不胜受恩感激。
今当远离,临表涕零,不知所言。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 规划 技巧 阶段 划分 状态 表示