1.定義
動態規劃(dynamic programming)是運籌學的乙個分支,是求解決策過程(decision process)最優化的數學方法。20世紀50年代初美國數學r.e.bellman等人在研究多階段決策過程(multistep decision process)的優化問題時,提出了著名的最優化原理(principle of optimality),把多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解,創立了解決這類過程優化問題的新方法——動態規劃。動態規劃演算法通常用於求解具有某種最優性質的問題。
在這類問題中,可能會有許多可行解。我們希望找到具有最優值的解。
3.問題特徵
動態規劃演算法的有效性依賴於問題本身所具有的兩個重要性質:
最優子結構:
重疊子問題:
在用遞迴演算法自頂向下解問題時,每次產生的子問題並不總是新問題,有些子問題被反覆計算多次。動態規劃演算法(自底向上)正是利用了這種子問題的重疊性質,對每乙個子問題只解一次,而後將其解儲存在乙個**中,在以後盡可能多地利用這些子問題的解
4.基本概念
1.階段和階段變數:
用動態規劃求解乙個問題時,需要將問題的全過程恰當地分成若干個相互聯絡的階段,以便按一定的次序去求解。
描述階段的變數稱為階段變數,階段的劃分一般是根據時間和空間的自然特徵來劃分,同時階段的劃分要便於把問題轉化成多階段決策過程,如例題1中,可將其劃分成4個階段,即k = 1,2,3,4。
2.狀態和狀態變數:
某一階段的出發位置稱為狀態,通常乙個階段包含若干狀態。一般地,狀態可由變數來描述,用來描述狀態的變數稱為狀態變數。如c3是乙個狀態變數。
3. 決策、決策變數和決策允許集合:
在對問題的處理中作出的每種選擇性的行動就是決策。即從該階段的每乙個狀態出發,通過一次選擇性的行動轉移至下一階段的相應狀態。
決策也可以用變數來描述,稱這種變數為決策變數。在實際問題中,決策變數的取值往往限制在某乙個範圍之內,此範圍稱為允許決策集合。如例題1中,f3(c3)就是乙個決策變數。
4.策略和最優策略:
所有階段依次排列構成問題的全過程。全過程中各階段決策變數所組成的有序總體稱為策略。在實際問題中,從決策允許集合中找出最優效果的策略成為最優策略
5. 狀態轉移方程:
前一階段的終點就是後一階段的起點,對前一階段的狀態作出某種決策,產生後一階段的狀態,這種關係描述了由k階段到k+1階段狀態的演變規律,稱為狀態轉移方程。
5.設計動態規劃的步驟
1.找出最優解的性質,並刻畫其結構特徵;
2.遞迴地定義最優值(寫出動態規劃方程);
3.以自底向上的方式計算出最優值;
4.根據計算最優值時得到的資訊,構造乙個最優解。
步驟1~3是動態規劃演算法的基本步驟。
在只需要求出最優值的情形,步驟4可以省略;
若需要求出問題的乙個最優解,則必須執行步驟4。
簡介動態規劃
這篇博文其實我是不想 也不敢寫的,因為自己還是半知半解,但又怕自己看了很久的東西和做題得來的體會以後給忘了,所以,還是寫下了。個人水平確實有限,若有錯誤的地方,歡迎指出!參考了 演算法導論 原書第3版 和網上的部落格。一 動態規劃的原理 1 動態規劃的用處 動態規劃與分治法相似,都是通過組合子問題的...
動態規劃基礎簡介
下邊就是自己的筆記 動態規劃演算法是將要解決的問題拆分成一系列相互交疊的子問題,通過推導關係定義子問題的求解策略,並隨時記錄子問題的解,最終獲得原始解,避免子相互交疊子問題的重複求解 這裡罵的是遞迴 動態規劃的三要素 中間結果儲存陣列 擅自加上的 最優子結構 每個階段最優狀態,可以從之前的某些狀態得...
動態規劃簡介及步驟
一 演算法介紹簡單來說,就是將乙個問題的多階段過程拆分為一系列單階段,逐步遞推,利用各階段間的關係,求出問題的最優解或解法之和。二 演算法思路 1.遞迴到動歸的一般轉化方法 遞迴函式有n個引數,就定義乙個n維的陣列,陣列下標是遞迴函式引數的取值範圍,陣列元素的指就是遞迴函式的返回值,這樣就可以從邊界...