談談動態規劃的思想

  動態規劃( dynamic programming )算法是解決多階段決策過程最優化問題的一種經常使用方法,難度比較大,技巧性也很強。利用動態規劃算法,能夠優雅而高效地解決不少貪婪算法或分治算法不能解決的問題。動態規劃算法的基本思想是:將待求解的問題分解成若干個相互聯繫的子問題,先求解子問題,而後從這些子問題的解獲得原問題的解;對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案保存起來,讓之後再次遇到時直接引用答案,沒必要從新求解。動態規劃算法將問題的解決方案視爲一系列決策的結果,與貪婪算法不一樣的是,在貪婪算法中,每採用一次貪婪準則,便作出一個不可撤回的決策;而在動態規劃算法中,還要考察每一個最優決策序列中是否包含一個最優決策子序列,即問題是否具備最優子結構性質。算法

    動態規劃算法的有效性依賴於待求解問題自己具備的兩個重要性質:最優子結構性質和子問題重疊性質。數組

1 、最優子結構性質。若是問題的最優解所包含的子問題的解也是最優的,咱們就稱該問題具備最優子結構性質(即知足最優化原理)。最優子結構性質爲動態規劃算法解決問題提供了重要線索。函數

2 、子問題重疊性質。子問題重疊性質是指在用遞歸算法自頂向下對問題進行求解時,每次產生的子問題並不老是新問題,有些子問題會被重複計算屢次。動態規劃算法正是利用了這種子問題的重疊性質,對每個子問題只計算一次,而後將其計算結果保存在一個表格中,當再次須要計算已經計算過的子問題時,只是在表格中簡 單地查看一下結果,從而得到較高的解題效率。優化

當咱們已經肯定待解決的問題須要用動態規劃算法求解時,一般能夠按照如下步驟設計動態規劃算法:spa

1 、分析問題的最優解,找出最優解的性質,並刻畫其結構特徵;設計

2 、遞歸地定義最優值;htm

3 、採用自底向上的方式計算問題的最優值;遞歸

4 、根據計算最優值時獲得的信息,構造最優解。ip

1 ~ 3 步是動態規劃算法解決問題的基本步驟,在只須要計算最優值的問題中,完成這三個基本步驟就能夠了。若是問題須要構造最優解,還要執行第 4 步; 此時,在第 3 步一般須要記錄更多的信息,以便在步驟 4 中,有足夠的信息快速地構造出最優解。ci

 

本文來自CSDN博客

*************************************************************************************************

     動態規劃其實質上是經過開闢記錄表,記錄已求解過的結果,當再次須要求解的時候,能夠直接到
那個記錄表中去查找,從而避免重複計算子問題來達到下降時間複雜度的效果。其實是一個空間
換時間的算法。動態規劃,一般能夠把指數級的複雜度下降到多項式級別。
通常算法書都會講能不能用動態規劃來求解問題,一般是判斷有沒有最有解結構,一般是經過「剪
切技術」來判斷:即證實問題的一個最優解中,使用的子問題的解自己也必須是最優的。一般是假
設一個子問題不是最優的,那麼找到一個最優的子問題來替換這個子問題,那麼產生的最優解將優
於已找到的那個最優解,從而矛盾。
         其實用不用動態規劃來求解問題,還有一個關鍵是有沒有重複的子問題。這也是使用動態規劃
與貪心法的區別所在。。貪心法求解的問題也知足最優解結構,只是它可以在每一步都可以「貪婪的
」選出當前惟一的最優子問題,而且當前的選擇,是不依賴之前的選擇的,經過這種「貪婪的選擇」
選到最後時,就獲得了全局的最優解了,不會產生重複的子問題。而動態規劃,在一步選擇的時候,
是經過從之前求出的若干個與本步驟相關的子問題最優解中選擇最好的那個,加上這一步的值,來構
造這一步那個子問題的最優解,而若是之前求出的若干個子問題不保存下來,就須要從新求(一般是遞
歸所致)。動態規劃用武之地也無非是保存這些重複的子問題而避免從新求解而達到高效的目的。
         動態規劃的難點在於寫出遞推式。動態規劃的步驟實際上是很固定的,而每個問題的遞推式如何下手
獲得會因不一樣的問題而不一樣,這是個最關鍵的問題,沒有通用的方法。一般是根據題目的問題,最終要求的問題,都會
有幾個數,以兩個數M,N爲例,而後讓求最優值。你就可使用v[M][N]數組來保存最有解,而後把問題
替換成i,j兩個數的問題,試圖經過v[i][j]與前面求出來的解創建遞推關係。創建遞推關係後,你能夠簡單
的寫出遞歸形式的程序,這個程序只須要加上一條if(v[i][j]已求出) return v[i][j];就輕鬆改稱了動
態規劃,這就是lookup的形式。固然若是已經有了遞推式,你也很容易寫出從底向上推的迭代形式。
        通常的算法書講的動態規劃都是來求解最優解的問題,或許最初是用來求解規劃問題的,而規劃必然是最
優解問題,其實大多數的問題只要存在重複的子問題均可以使用動態規劃的思路,就看你的重複的子問題
是否是多的值得使用空間來換時間這個思路了。

***********************************

因爲本人是數學系的,因此喜歡用數學離散的角度來思考:

 

多階段決策問題

多階段決策過程,是指這樣的一類特殊的活動過程,問題能夠按時間順序分解成若干相互聯繫的階段,在每個階段都要作出決策,所有過程的決策是一個決策序列。要使整個活動的整體效果達到最優的問題,稱爲多階段決策問題。

例1是一個多階段決策問題的例子,下面是另外一個多階段決策問題的例子:

[例2] 生產計劃問題

工廠生產某種產品,每單位(千件)的成本爲1(千元),每次開工的固定成本爲3(千元),工廠每季度的最大生產能力爲6(千件)。經調查,市場對該產品的需求量第1、2、3、四季度分別爲 2,3,2,4(千件)。若是工廠在第1、二季度將整年的需求都生產出來,天然能夠下降成本(少付固定成本費),可是對於第3、四季度才能上市的產品需付存儲費,每季每千件的存儲費爲0.5(千元)。還規定年初和年底這種產品均無庫存。試製訂一個生產計劃,即安排每一個季度的產量,使一年的總費用(生產成本和存儲費)最少。

決策過程的分類

根據過程的時間變量是離散的仍是連續的,分爲離散時間決策過程(discrete-time decision process),即多階段決策過程和連續時間決策過程(continuous-time decision process);根據過程的演變是肯定的仍是隨機的,分爲肯定性決策過程(deterministic decision process)和隨機性決策過程(stochastic decision process),其中應用最廣的是肯定性多階段決策過程。

動態規劃模型的基本要素

一個多階段決策過程最優化問題的動態規劃模型一般包含如下要素:

1.階段

階段(step)是對整個過程的天然劃分。一般根據時間順序或空間特徵來劃分階段,以便按階段的次序解優化問題。階段變量通常用k=1,2,..,n表示。在例1中由A出發爲k=1,由Bi(i=1,2)出發爲k=2,依此下去從Di(i=1,2,3)出發爲k=4,共n=4個階段。在例2中按照第1、2、3、四季度分爲k=1,2,3,4,共4個階段。

2.狀態

狀態(state)表示每一個階段開始時過程所處的天然情況。它應該可以描述過程的特徵而且具備無後向性,即當某階段的狀態給定時,這個階段之後過程的演變與該階段之前各階段的狀態無關,即每一個狀態都是過去歷史的一個完整總結。一般還要求狀態是直接或間接能夠觀測的。

描述狀態的變量稱狀態變量(state variable)。變量容許取值的範圍稱容許狀態集合(set of admissible states)。用xk表示第k階段的狀態變量,它能夠是一個數或一個向量。用Xk表示第k階段的容許狀態集合。在例1中x2可取B1,B2,X2={B1,B2}。

n個階段的決策過程有n+1個狀態變量,xn+1表示xn演變的結果,在例1中x5取E。

根據過程演變的具體狀況,狀態變量能夠是離散的或連續的。爲了計算的方便有時將連續變量離散化;爲了分析的方便有時又將離散變量視爲連續的。

狀態變量簡稱爲狀態。

3.決策

當一個階段的狀態肯定後,能夠做出各類選擇從而演變到下一階段的某個狀態,這種選擇手段稱爲決策(decision),在最優控制問題中也稱爲控制(control)。

描述決策的變量稱決策變量(decision variable)。變量容許取值的範圍稱容許決策集合(set of admissible decisions)。用uk(xk)表示第k階段處於狀態xk時的決策變量,它是xk的函數,用Uk(xk)表示了xk的容許決策集合。在例1中u2(B1)可取C1,C2,C3

決策變量簡稱決策。

4.策略

決策組成的序列稱爲策略(policy)。由初始狀態x1開始的全過程的策略記做p1n(x1),即p1n(x1)={u1(x1),u2(x2),...,un(xn)}。由第k階段的狀態xk開始到終止狀態的後部子過程的策略記做pkn(xk),即pkn(xk)={uk(xk),uk+1(xk+1),...,un(xn)}。相似地,由第k到第j階段的子過程的策略記做pkj(xk)={uk(xk),uk+1(xk+1),...,uj(xj)}。對於每個階段k的某一給定的狀態xk,可供選擇的策略pkj(xk)有必定的範圍,稱爲容許策略集合(set of admissible policies),用P1n(x1),Pkn(xk),Pkj(xk)表示。

5.狀態轉移方程

在肯定性過程當中,一旦某階段的狀態和決策爲已知,下階段的狀態便徹底肯定。用狀態轉移方程(equation of state)表示這種演變規律,寫做

例1中狀態轉移方程爲:xk+1=uk(xk)

6.指標函數和最優值函數

指標函數(objective function)是衡量過程優劣的數量指標,它是關於策略的數量函數,從階段k到階段n的指標函數用Vkn(xk,pkn(xk))表示,k=1,2,...,n。

可以用動態規劃解決的問題的指標函數應具備可分離性,即Vkn可表爲xk,uk,Vk+1 n 的函數,記爲:

其中函數是一個關於變量Vk+1 n單調遞增的函數。這一性質保證了最優化原理(principle of optimality)的成立,是動態規劃的適用前提。

過程在第j 階段的階段指標取決於狀態xj和決策uj,用vj(xj,uj)表示。階段k到階段n的指標由vj(j=k,k+1,..n)組成,常見的形式有:

階段指標之和,即

階段指標之積,即

階段指標之極大(或極小),即

這些形式下第k到第j階段子過程的指標函數爲Vkj(xk,uk,xk+1,...,xj+1)。能夠發現,上述(3)-(5)三個指標函數的形式都知足最優性原理。在例1中指標函數爲(3)的形式,其中vj(xj,uj)是邊<xj,uj(xj)>的權(邊的長度),uj(xj)表示從xj出發根據決策uj(xj)下一步所到達的節點。

根據狀態轉移方程,指標函數Vkn還能夠表示爲狀態xk和策略pkn的函數,即Vkn(xk,pkn)。在xk給定時指標函數Vkn對pkn的最優值稱爲最優值函數(optimal value function),記做fk(xk),即

其中opt可根據具體狀況取max或min。上式的意義是,對於某個階段k的某個狀態xk,從該階段k到最終目標階段n的最優指標函數值等於從xk出發取遍全部能策略pkn所獲得的最優指標值中最優的一個。

7.最優策略和最優軌線

使指標函數Vkn達到最優值的策略是從k開始的後部子過程的最優策略,記做pkn*={uk*,..un*},p1n*又是全過程的最優策略,簡稱最優策略(optimal policy)。從初始狀態x1(=x1*)出發,過程按照p1n*和狀態轉移方程演變所經歷的狀態序列{x1*,x2*,..,xn+1*}稱最優軌線(optimal trajectory)。

相關文章
相關標籤/搜索