基於多階段決策的動態規劃算法

        在我們的現實生活中,存在着這樣的活動過程:一般由初始狀態開始,通過對中間階段決策的選擇,達到結束狀態。它可以分爲幾個相互聯繫的階段,在每個階段,我們都需要爲其作出決策,從而使總體上得到最優的結果。每次決策依賴於當前狀態,又隨即引起狀態的轉移。一個決策序列就是在變化的狀態中產生出來的,所以,這種基於多階段決策求解最優化問題的過程就稱爲動態規劃

     動態規劃與分治法的聯繫與區別: 

     動態規劃與分治法有個相似之處,就是它們都是通過組合子問題的解來解決原問題。但是,不同的是,當子問題有重疊情況時,分治法會重複做許多不必要的工作,它會反覆求解那些公共子問題。而動態規劃算法避免了這種不必要的計算工作。動態規劃算法只會對每個子問題求解一次,將已解決的子問題的答案保存在一個表格中,而在需要時再找出已求得的答案,這樣避免大量的重複計算,節省時間。這二者最大的區別即:適合於用動態規劃法求解的問題,經分解後得到的子問題往往不是互相獨立的(即下一個子階段的求解是建立在上一個子階段的解的基礎上,進行進一步的求解)

        

         設計動態規劃算法的4個基本步驟:

         1. 刻畫一個最優解的特徵。明確滿足什麼條件的解纔是最優解。

         2. 遞歸地定義最優解的值。處在哪種情況下可能靠近最優解。

         3. 計算最優解的值,自底向上的方法。需要保留哪些局部解,捨棄哪些局部解使之可能得到最優解。

         4. 利用計算出的信息構造最優解。

        

 具體步驟:

1.劃分階段:動態規劃是基於多階段決策的,因此應該先把問題分爲若干個階段。在劃分階段時,注意劃分後的階段一定要是有序的或者是可排序的,否則問題就無法求解。

2.確定狀態和狀態變量:將問題發展到各個階段時所處於的各種客觀情況用不同的狀態表示出來。

3.確定決策並寫出狀態轉移方程:因爲決策和狀態轉移有着天然的聯繫,狀態轉移就是根據上一階段的狀態和決策來導出本階段的狀態。所以如果確定了決策,狀態轉移方程也就可寫出。但事實上常常是反過來做,根據相鄰兩個階段的狀態之間的關係來確定決策方法和狀態轉移方程

4.尋找邊界條件:給出的狀態轉移方程是一個遞推式,需要一個遞推的終止條件或邊界條件。

    一般,只要解決問題的階段、狀態和狀態轉移決策確定了,就可以寫出狀態轉移方程(包括邊界條件)。

 其中最重要的就是三要素:① 問題的階段;② 問題的狀態;③ 遞推關係;確定了動態規劃的這三要素,整個求解過程就可以用一個最優決策表來描述最優決策表是一個二維表,其中行表示決策的階段,列表示問題狀態,表格需要填寫的數據一般對應此問題的在某個階段某個狀態下的最優值(如最短路徑,最長公共子序列,最大價值等),填表的過程就是根據遞推關係,最後根據整個表格的數據通過簡單的取捨或者運算求得問題的最優解。


点赞