動態規劃程序設計是對解最優化問題的一種途徑、一種方法,而不是一種特殊算法。不像前面所述的那些搜索或數值計算那樣,具備一個標準的數學表達式和明確清晰的解題方法。動態規劃程序設計每每是針對一種最優化問題,因爲各類問題的性質不一樣,肯定最優解的條件也互不相同,於是動態規劃的設計方法對不一樣的問題,有各具特點的解題方法,而不存在一種萬能的動態規劃算法,能夠解決各種最優化問題。所以讀者在學習時,除了要對基本概念和方法正確理解外,必須具體問題具體分析處理,以豐富的想象力去創建模型,用創造性的技巧去求解。咱們也能夠經過對若干有表明性的問題的動態規劃算法進行分析、討論,逐漸學會並掌握這一設計方法。算法
在現實生活中,有一類活動的過程,因爲它的特殊性,可將過程分紅若干個互相聯繫的階段,在它的每一階段都須要做出決策,從而使整個過程達到最好的活動效果。固然,各個階段決策的選取不是任意肯定的,它依賴於當前面臨的狀態,又影響之後的發展,當各個階段決策肯定後,就組成一個決策序列,於是也就肯定了整個過程的一條活動路線,這種把一個問題看做是一個先後關聯具備鏈狀結構的多階段過程就稱爲多階段決策過程,這種問題就稱爲多階段決策問題。以下圖所示:學習
多階段決策過程,是指這樣的一類特殊的活動過程,問題能夠按時間順序分解成若干相互聯繫的階段,在每個階段都要作出決策,所有過程的決策是一個決策序列。優化
【題目】最短路徑問題。下圖給出了一個地圖,地圖中的每一個頂點表明一個城市,兩個城市間的一條連線表明道路,連線上的數值表明道路的長度。如今想從城市A到達城市E,怎樣走路程最短?最短路程的長度是多少? spa
【算法分析】設計
把A到E的全過程分紅四個階段,用K表示階段變量,第1階段有一個初始狀態A,有兩條可供選擇的支路A-B1、A-B2;第2階段有兩個初始狀態B1、B2,B1有三條可供選擇的支路,B2有兩條可供選擇的支路……。用DK(XI,X+1J)表示在第K階段由初始狀態XI到下階段的初始狀態X+1J的路徑距離,FK(XI)表示從第K階段的XI到終點E的最短距離,利用倒推的方法,求解A到E的最短距離。 數學
具體計算過程以下:程序設計
S1: K = 4 有變量
F4(D1)= 3,原理
F4(D2)= 4,搜索
F4(D3)= 3;
S2: K = 3 有
F3(C1)= MIN{ D3(C1,D1)+ F4(D1),D3(C1,D2)+ F4(D2)}
= MIN{ 5+3,6+4 } = 8
F3(C2)= D3(C2,D1)+ F4(D1)= 5+3 = 8
F3(C3)= D3(C3,D3)+ F4(D3)= 8+3 = 11
F3(C4)= D3(C4,D3)+ F4(D3)= 3+3 = 6
S3: K = 2 有
F2(B1)= MIN{ D2(B1,C1)+ F3(C1),D2(B1,C2)+ F3(C2),
D2(B1,C3)+ F3(C3)} = MIN{ 1+8,6+8,3+11} = 9
F2(B2)= MIN{ D2(B2,C2)+ F3(C2),D2(B2,C4)+ F3(C4)}
= MIN{ 8+8,4+6 } = 10
S4: K = 1 有
F1(A)= MIN{ D1(A,B1)+ F2(B1),D1(A,B2)+ F2(B2)}
= MIN{ 5+9,3+10} = 13
所以由A點到E點的全過程最短路徑爲A→B2→C4→D3→E;最短路程長度爲13。
從以上過程能夠看出,每一個階段中,都求出本階段的各個初始狀態到終點E的最短距離,當逆序倒推到過程起點A時,便獲得了全過程的最短路徑和最短距離。
在上例的多階段決策問題中,各個階段採起的決策,通常來講是與階段有關的,決策依賴於當前狀態,又隨即引發狀態的轉移,一個決策序列就是在變化的狀態中產生出來的,故有「動態」的含義,咱們稱這種解決多階段決策最優化的過程爲動態規劃程序設計方法。
如今咱們來介紹動態規劃的基本概念。
用動態規劃求解一個問題時,須要將問題的全過程恰當地分紅若干個相互聯繫的階段,以便按必定的次序去求解。描述階段的變量稱爲階段變量,一般用K表示,階段的劃分通常是根據時間和空間的天然特徵來劃分,同時階段的劃分要便於把問題轉化成多階段決策過程,如例題1中,可將其劃分紅4個階段,即K = 1,2,3,4。
某一階段的出發位置稱爲狀態,一般一個階段包含若干狀態。通常地,狀態可由變量來描述,用來描述狀態的變量稱爲狀態變量。如例題1中,C3是一個狀態變量。
在對問題的處理中做出的每種選擇性的行動就是決策。即從該階段的每個狀態出發,經過一次選擇性的行動轉移至下一階段的相應狀態。一個實際問題可能要有屢次決策和多個決策點,在每個階段的每個狀態中都須要有一次決策,決策也能夠用變量來描述,稱這種變量爲決策變量。在實際問題中,決策變量的取值每每限制在某一個範圍以內,此範圍稱爲容許決策集合。如例題1中,F3(C3)就是一個決策變量。
全部階段依次排列構成問題的全過程。全過程當中各階段決策變量所組成的有序整體稱爲策略。在實際問題中,從決策容許集合中找出最優效果的策略成爲最優策略。
前一階段的終點就是後一階段的起點,對前一階段的狀態做出某種決策,產生後一階段的狀態,這種關係描述了由k階段到k+1階段狀態的演變規律,稱爲狀態轉移方程。
上面已經介紹了動態規劃模型的基本組成,如今須要解決的問題是:什麼樣的「多階段決策問題」才能夠採用動態規劃的方法求解。
通常來講,可以採用動態規劃方法求解的問題,必須知足最優化原理和無後效性原則:
1、動態規劃的最優化原理。做爲整個過程的最優策略具備:不管過去的狀態和決策如何,對前面的決策所造成的狀態而言,餘下的諸決策必須構成最優策略的性質。也能夠通俗地理解爲子問題的局部最優將致使整個問題的全局最優,即問題具備最優子結構的性質,也就是說一個問題的最優解只取決於其子問題的最優解,而非最優解對問題的求解沒有影響。在例題1最短路徑問題中,A到E的最優路徑上的任一點到終點E的路徑,也必然是該點到終點E的一條最優路徑,即總體優化能夠分解爲若干個局部優化。
2、動態規劃的無後效性原則。所謂無後效性原則,指的是這樣一種性質:某階段的狀態一旦肯定,則此後過程的演變再也不受此前各狀態及決策的影響。也就是說,「將來與過去無關」,當前的狀態是此前歷史的一個完整的總結,此前的歷史只能經過當前的狀態去影響過程將來的演變。在例題1最短路徑問題中,問題被劃分紅各個階段以後,階段K中的狀態只能由階段K+1中的狀態經過狀態轉移方程得來,與其它狀態沒有關係,特別與未發生的狀態沒有關係,例如從Ci到E的最短路徑,只與Ci的位置有關,它是由Di中的狀態經過狀態轉移方程得來,與E狀態,特別是A到Ci的路徑選擇無關,這就是無後效性。
因而可知,對於不能劃分階段的問題,不能運用動態規劃來解;對於能劃分階段,但不符合最優化原理的,也不能用動態規劃來解;既能劃分階段,又符合最優化原理的,但不具有無後效性原則,仍是不能用動態規劃來解;誤用動態規劃程序設計方法求解會致使錯誤的結果。
感謝各位與信奧一本通的鼎力相助!