基本概念
動(dòng)態(tài)規(guī)劃過(guò)程是:每次決策依賴于當(dāng)前狀態(tài)销部,又隨即引起狀態(tài)的轉(zhuǎn)移摸航。一個(gè)決策序列就是在變化的狀態(tài)中產(chǎn)生出來(lái)的制跟,所以,這種多階段最優(yōu)化決策解決問(wèn)題的過(guò)程就稱為動(dòng)態(tài)規(guī)劃酱虎。
基本思想與策略
基本思想與分治法類似雨膨,也是將待求解的問(wèn)題分解為若干個(gè)子問(wèn)題(階段),按順序求解子階段读串。
- 前一子問(wèn)題的解聊记,為后一子問(wèn)題的求解提供了有用的信息。在求解任一子問(wèn)題時(shí)恢暖,列出各種可能的局部解排监,通過(guò)決策保留那些有可能達(dá)到最優(yōu)的局部解,丟棄其他局部解杰捂。依次解決各子問(wèn)題舆床,最后一個(gè)子問(wèn)題就是初始問(wèn)題的解。
- 由于動(dòng)態(tài)規(guī)劃解決的問(wèn)題多數(shù)有重疊子問(wèn)題這個(gè)特點(diǎn)琼娘,為減少重復(fù)計(jì)算峭弟,對(duì)每一個(gè)子問(wèn)題只解一次,將其不同階段的不同狀態(tài)保存在一個(gè)二維數(shù)組中脱拼。
與分治法最大的差別是:適合于用動(dòng)態(tài)規(guī)劃求解的問(wèn)題瞒瘸,經(jīng)分解后得到的子問(wèn)題往往不是互相獨(dú)立的(即下一個(gè)子階段的求解是建立在上一個(gè)子階段的解的基礎(chǔ)上,進(jìn)行進(jìn)一步的求解)熄浓。
適用的情況
- 能采用動(dòng)態(tài)規(guī)劃求解的問(wèn)題的一般要具有3個(gè)性質(zhì):
- 最優(yōu)化原理:如果問(wèn)題的最優(yōu)解所包含的子問(wèn)題的解也是最優(yōu)的情臭,就稱該問(wèn)題具有最優(yōu)子結(jié)構(gòu),即滿足最優(yōu)化原理赌蔑。
- 無(wú)后效性:即某階段狀態(tài)一旦確定俯在,就不受這個(gè)狀態(tài)以后決策的影響。也就是說(shuō)娃惯,某狀態(tài)以后的過(guò)程不會(huì)影響以前的狀態(tài)跷乐,只與當(dāng)前狀態(tài)有關(guān)。
- 有重疊子問(wèn)題:即子問(wèn)題之間是不獨(dú)立的趾浅,一個(gè)子問(wèn)題在下一階段決策中可能被多次使用到愕提。(該性質(zhì)并不是動(dòng)態(tài)規(guī)劃適用的必要條件,但是如果沒有這條性質(zhì)皿哨,動(dòng)態(tài)規(guī)劃算法同其他算法相比就不具備優(yōu)勢(shì))
求解的基本步驟
動(dòng)態(tài)規(guī)劃所處理的問(wèn)題是一個(gè)多階段決策問(wèn)題浅侨,一般由初始狀態(tài)開始,通過(guò)對(duì)中間階段決策的選擇证膨,達(dá)到結(jié)束狀態(tài)如输。這些決策形成了一個(gè)決策序列,同時(shí)確定了完成整個(gè)過(guò)程的一條活動(dòng)路線(通常是求最優(yōu)的活動(dòng)路線)。動(dòng)態(tài)規(guī)劃的設(shè)計(jì)都有著一定的模式不见,一般要經(jīng)歷以下幾個(gè)步驟:
初始狀態(tài)→│決策1│→│決策2│→…→│決策n│→結(jié)束狀態(tài)
(1)劃分階段:按照問(wèn)題的時(shí)間或空間特征,把問(wèn)題分為若干個(gè)階段肆捕。在劃分階段時(shí),注意劃分后的階段一定要是有序的或者是可排序的,否則問(wèn)題就無(wú)法求解眼虱。
(2)確定狀態(tài)和狀態(tài)變量:將問(wèn)題發(fā)展到各個(gè)階段時(shí)所處于的各種客觀情況用不同的狀態(tài)表示出來(lái)喻奥。當(dāng)然,狀態(tài)的選擇要滿足無(wú)后效性捏悬。
(3)確定決策并寫出狀態(tài)轉(zhuǎn)移方程:因?yàn)闆Q策和狀態(tài)轉(zhuǎn)移有著天然的聯(lián)系,狀態(tài)轉(zhuǎn)移就是根據(jù)上一階段的狀態(tài)和決策來(lái)導(dǎo)出本階段的狀態(tài)甥厦。所以如果確定了決策,狀態(tài)轉(zhuǎn)移方程也就可寫出寇钉。但事實(shí)上常常是反過(guò)來(lái)做刀疙,根據(jù)相鄰兩個(gè)階段的狀態(tài)之間的關(guān)系來(lái)確定決策方法和狀態(tài)轉(zhuǎn)移方程。
(4)尋找邊界條件:給出的狀態(tài)轉(zhuǎn)移方程是一個(gè)遞推式扫倡,需要一個(gè)遞推的終止條件或邊界條件。
- 實(shí)際應(yīng)用中可以按以下幾個(gè)簡(jiǎn)化的步驟進(jìn)行設(shè)計(jì):
(1)分析最優(yōu)解的性質(zhì)撵溃,并刻畫其結(jié)構(gòu)特征。
(2)遞歸的定義最優(yōu)解缘挑。
(3)以自底向上或自頂向下的記憶化方式(備忘錄法)計(jì)算出最優(yōu)值
(4)根據(jù)計(jì)算最優(yōu)值時(shí)得到的信息,構(gòu)造問(wèn)題的最優(yōu)解
算法實(shí)現(xiàn)的說(shuō)明
- 使用動(dòng)態(tài)規(guī)劃求解問(wèn)題诲宇,最重要的就是確定動(dòng)態(tài)規(guī)劃三要素:
(1)問(wèn)題的階段
(2)每個(gè)階段的狀態(tài)
(3)從前一個(gè)階段轉(zhuǎn)化到后一個(gè)階段之間的遞推關(guān)系亏娜。
遞推關(guān)系必須是從次小的問(wèn)題開始到較大的問(wèn)題之間的轉(zhuǎn)化,從這個(gè)角度來(lái)說(shuō)维贺,動(dòng)態(tài)規(guī)劃往往可以用遞歸程序來(lái)實(shí)現(xiàn),不過(guò)因?yàn)檫f推可以充分利用前面保存的子問(wèn)題的解來(lái)減少重復(fù)計(jì)算虐秋,所以對(duì)于大規(guī)模問(wèn)題來(lái)說(shuō),有遞歸不可比擬的優(yōu)勢(shì)客给,這也是動(dòng)態(tài)規(guī)劃算法的核心之處。
確定了動(dòng)態(tài)規(guī)劃的這三要素靶剑,整個(gè)求解過(guò)程就可以用一個(gè)最優(yōu)決策表來(lái)描述,最優(yōu)決策表是一個(gè)二維表桩引,其中行表示決策的階段,列表示問(wèn)題狀態(tài)
坑匠,表格需要填寫的數(shù)據(jù)一般對(duì)應(yīng)此問(wèn)題的在某個(gè)階段某個(gè)狀態(tài)下的最優(yōu)值(如最短路徑厘灼,最長(zhǎng)公共子序列夹纫,最大價(jià)值等)设凹,填表的過(guò)程就是根據(jù)遞推關(guān)系,從1行1列開始围来,以行或者列優(yōu)先的順序,依次填寫表格桶错,最后根據(jù)整個(gè)表格的數(shù)據(jù)通過(guò)簡(jiǎn)單的取舍或者運(yùn)算求得問(wèn)題的最優(yōu)解胀蛮。
f(n,m)=max{f(n-1,m), f(n-1,m-w[n])+P(n,m)}