動態規劃算法



1.基本概念

      動態規劃過程是:多階段最優化決策的過程,每次決策依賴於當前狀態,又隨即引起狀態的轉移(即狀態遞推方程),一個決策序列就是在變化的狀態中產生出來的,最終得到最優化的決策。

 

2.基本思想與策略

      該算法通常基於一個遞推公式(狀態轉移方程,即問題與子問題關係)及一個或多個初始狀態。當前子問題的解將由上一次子問題的解推出。使用動態規劃來解題只需要多項式時間複雜度。

      基本思想與分治法類似,也是將待求解的問題分解爲若干個子問題(階段),按順序求解子階段,前一子問題的解,爲後一子問題的求解提供了有用的信息。在求解任一子問題時,列出各種可能的局部解,通過決策保留那些有可能達到最優的局部解,丟棄其他局部解。依次解決各子問題,最後一個子問題就是初始問題的解。

     由於動態規劃解決的問題多數有重疊子問題這個特點,爲減少重複計算,對每一個子問題只解一次,將其不同階段的不同狀態保存在一個二維數組中。

與分治法最大的差別是:適合於用動態規劃法求解的問題,經分解後得到的子問題往往不是互相獨立的(即下一個子階段的求解是建立在上一個子階段的解的基礎上,進行進一步的求解)。

 

3.適用情況

1最優子結構性質

      當問題的最優解包含其子問題的最優解時,稱該問題具有最優子結構性質(隱含了最優解間的一種遞推關係,可推出遞推方程)。即如果把問題的最優解分解(劃分兩個或多個部分,或者刪除第一個或最後一個分量),得到一個子解,那麼該子解是特定子問題的最優解。通常由反證法證明最優子結構性質。動態規劃,利用問題的最優子結構性質,以自底向上的方式遞歸的從子問題的最優解逐步構造出整個問題的最優解。

2)重疊子問題性質

      動態規劃,避開了遞歸時,重複的計算相同子問題的過程(由遞推式知),對每個子問題只解一次,而後將其保存在一個表格(可能是高維表格)中,當再次需要的時候,只是簡單的用常數時間查看一下結果,實現了自底向上的求解。當然也可以通過備忘錄方法,實現自頂向下的遞歸求解。該性質並不是動態規劃適用的必要條件,但是如果沒有這條性質,動態規劃算法同其他算法相比就不具備優勢)

3)無後效性:即某階段狀態一旦確定,就不受這個狀態以後決策的影響。也就是說,某狀態以後的過程不會影響以前的狀態,只與當前狀態有關。

 

3.動態規劃求解步驟

      動態規劃所處理的問題是一個多階段決策問題,一般由初始狀態開始,通過對中間階段決策的選擇,達到結束狀態。這些決策形成了一個決策序列,同時確定了完成整個過程的一條活動路線(通常是求最優的活動路線)。動態規劃的設計都有着一定的模式,一般要經歷以下幾個步驟。

   初始狀態→決策1決策2決策n→結束狀態

1分析是否有最優子結構性質(通過使用反證法證明)

      子解分解法:基於劃分的方法,把問題劃分成兩個或者多個子問題,但劃分位置無法實現確定(一般採用枚舉);基於減一的方法,即依據問題性質縮減規模,減去最優解第一個或最後一個分量,得到規模少一個單位的子解;

2確定狀態表示和狀態遞推方程,遞歸定義最優值

      狀態表示本質上是子問題的表徵(以數學形式表示),用來描述該問題的子問題的解;該步是動態規劃的核心,是最優解的規劃過程,由此步構造算法;根據相鄰兩個階段的狀態之間的關係來確定決策方法和狀態轉移方程。狀態轉移方程,描述了狀態之間是如何轉移的

3確定狀態轉移順序,以自底向上方式計算出最優值

      該步體現了動態規劃的執行過程,即由易至難的求解過程(按順序逐階段求解),由子問題到原問題的求解過程;

4根據計算最優值時得到的信息,構造最優解


參考資料

http://www.360doc.com/content/14/1207/01/20831910_430949704.shtml

http://www.cnblogs.com/bourbon/archive/2011/08/23/2151044.html

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章