談談動態規划的思想


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

    動態規划算法的有效性依賴於待求解問題本身具有的兩個重要性質:最優子結構性質和子問題重疊性質。

1 、最優子結構性質。如果問題的最優解所包含的子問題的解也是最優的,我們就稱該問題具有最優子結構性質(即滿足最優化原理)。最優子結構性質為動態規划算法解決問題提供了重要線索。

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

當我們已經確定待解決的問題需要用動態規划算法求解時,通常可以按照以下步驟設計動態規划算法:

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

2 、遞歸地定義最優值;

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

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

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

 

本文來自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(千件)。經調查,市場對該產品的需求量第一、二、三、四季度分別為 2,3,2,4(千件)。如果工廠在第一、二季度將全年的需求都生產出來,自然可以降低成本(少付固定成本費),但是對於第三、四季度才能上市的產品需付存儲費,每季每千件的存儲費為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中按照第一、二、三、四季度分為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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM