動態規划
(本文適合入門理解思想,后期多刷題)
動態規划是運籌學的一個分支,是求解多階段決策過程最優化問題的數學方法,在經濟管理、工程技術、工農業生產及軍事部門中都有着廣泛的應用,並且獲得了顯著的效果。
學習動態規划,我們首先要了解多階段決策問題。
多階段決策問題例子:
生產決策問題:企業在生產過程中,由於需求是隨時間變化的,因此企業為了獲得全年的最佳生產效益,就要在整個生產過程中逐月或逐季度地根據庫存和需求決定生產計划。
機器負荷分配問題:某種機器可以在高低兩種不同的負荷下進行生產。要求制定一個五年計划,在每年開始時,決定如何重新分配完好的機器在兩種不同的負荷下生產的數量,使在五年內產品的總產量達到最高。
航天飛機飛行控制問題:由於航天飛機的運動的環境是不斷變化的,因此就要根據航天飛機飛行在不同環境中的情況,不斷地決定航天飛機的飛行方向和速度(狀態),使之能最省燃料和完成飛行任務(如軟着陸)。
多階段決策過程的特點:
根據過程的特性可以將過程按空間、時間等標志分為若干個互相聯系又互相區別的階段。
在每一個階段都需要做出決策,從而使整個過程達到最好的效果。
各個階段決策的選取不是任意確定的,它依賴於當前面臨的狀態,又影響以后的發展。
當各個階段的決策確定后,就組成了一個決策序列,因而也就決定了整個過程的一條活動路線,這樣的一個前后關聯具有鏈狀結構的多階段過程就稱為多階段決策問題。
針對多階段決策過程的最優化問題,美國數學家Bellman等人在20世紀50年代初提出了著名的最優化原理,把多階段決策問題轉化為一系列單階段最優化問題,從而逐個求解,創立了解決這類過程優化問題的新方法:動態規划。
對最佳路徑(最佳決策過程)所經過的各個階段,其中每個階段始點到全過程終點的路徑,必定是該階段始點到全過程終點的一切可能路徑中的最佳路徑(最優決策),這就是Bellman提出的著名的最優化原理。即 一個最優策略的子策略必然也是最優的。
最短路徑問題
A地到 E 地要鋪設一條煤氣管道,其中需經過三級中間站,兩點之間的連線上的數字表示距離。
如圖所示,問應該選擇什么路線,使總距離最短?
解:整個計算過程分為四個階段,從最后一個階段開始。
第四階段:有兩條路。 ①D1E=5,②D2E=2。②最優。
第三階段:有六條路。
經過C1點——①C1D1+5=8,②C1D2+2=11。 ①最優。
經過C2點——①C2D1+5=11,②C2D2+2=7。 ②最優。
經過C3點——①C3D1+5=13,②C3D2+2=12。 ②最優。
第二階段:有九條路。
經過B1點——①B1C1+8=20,②B1C2+7=21,③B1C3+12=22。 ①最優。
經過B2點——①B2C1+8=14,②B2C2+7=17,③B2C3+12=16。 ①最優。
經過B3點——①B3C1+8=21,②B3C2+7=19,③B3C3+12=23。 ②最優。
第一階段:有三條路。①2+20=22,②5+14=19,③1+19=20。 ②最優。
故最短路徑為:A→B2→C1→D1→E,最短距離為19。
動態規划是用來解決多階段決策過程最優化的一種數量方法。其特點在於,它可以把一個n 維決策問題變換為幾個一維最優化問題,從而一個一個地去解決。
需指出:動態規划是求解某類問題的一種方法,是考察問題的一種途徑,而不是一種算法。必須對具體問題進行具體分析,運用動態規划的原理和方法,建立相應的模型,然后再用動態規划方法去求解。
動態決策問題的特點:
系統所處的狀態和時刻是進行決策的重要因素;
即在系統發展的不同時刻(或階段)根據系統所處的狀態,不斷地做出決策;
找到不同時刻的最優決策以及整個過程的最優策略。
動態規划方法的關鍵:在於正確地寫出基本的遞推關系式和恰當的邊界條件(簡稱基本方程)。
要做到這一點,就必須將問題的過程分成幾個相互系的階段,恰當的選取狀態變量和決策變量及定義最優值函數,從而把一個大問題轉化成一組同類型的子問題,然后逐個求解。
即從邊界條件開始,逐段遞推尋優,在每一個子問題的求解中,均利用了它前面的子問題的最優化結果,依次進行,最后一個子問題所得的最優解,就是整個問題的最優解。
在多階段決策過程中,動態規划方法是既把當前一段和未來一段分開,又把當前效益和未來效益結合起來考慮的一種最優化方法。因此,每段決策的選取是從全局來考慮的,與該段的最優選擇答案一般是不同的。
在求整個問題的最優策略時,由於初始狀態是已知的,而每段的決策都是該段狀態的函數,故最優策略所經過的各段狀態便可逐段變換得到,從而確定了最優路線。
最優化原理:作為整個過程的最優策略具有這樣的性質:無論過去的狀態和決策如何,相對於前面的決策所形成的狀態而言,余下的決策序列必然構成最優子策略。也就是說,一個最優策略的子策略也是最優的。
動態規划求解的多階段問題的特點:
- 每個階段的最優決策過程只與本階段的初始狀態有關,而與以前各階段的決策無關(即為了到達本階段的初始狀態而采用哪組決策路線無關)。換言之,本階段之前的狀態與決策,只是通過系統在本階段所處的初始狀態來影響本階段及以后各個階段的決策。或者說,系統過程的歷史只能通過系統現階段的狀態去影響系統的未來。
- 具有這種性質的狀態稱為無后效性(即馬爾科夫性)狀態。
- 動態規划方法只適用於求解具有無后效性狀態的多階段決策問題。
投資分配問題
現有數量為a(萬元)的資金,計划分配給n 個工廠,用於擴大再生產。假設:xi 為分配給第i 個工廠的資金數量(萬元);gi(xi)為第i 個工廠得到資金后提供的利潤值(萬元)。
問題:如何確定各工廠的資金數,使得總的利潤為最大。
據此,有下式:
用fk(x) 表示 以數量為 x 的資金分配給前k 個工廠,所得到的最大利潤值。用動態規划求解,就是求 fn(a) 的問題。
所以,根據的動態規划的最優化原理,就有:
如果a 是以萬元為資金分配單位,則式中的y 只取非負整數0,1,2,…,x。上式可變為:
實際問題:設國家撥給60萬元投資,供四個工廠擴建使用,每個工廠擴建后的利潤與投資額的大小有關,投資后的利潤函數如下表所示。
按順序解法計算:
第一階段:求 f1(x)。
第二階段:求 f2(x)。(需考慮第一、第二個工廠如何進行投資分配,以取得最大的總利潤)
根據公式,對應的最優策略:
第三階段:求 f3(x)。(需考慮第一、第二及第三個工廠如何進行投資分配,以取得最大的總利潤)
第四階段:同理求 f4(60)。即問題的最優策略。
最優策略即(20,0,30,10),最大利潤為160萬元。
背包問題
有一個徒步旅行者,其可攜帶物品重量的限度為a 公斤,設有n 種物品可供他選擇裝入包中。已知每種物品的重量及使用價值(作用),問此人應如何選擇攜帶的物品(各幾件),使所起作用(使用價值)最大?
這就是背包問題。類似的還有工廠里的下料問題、運輸中的貨物裝載問題、人造衛星內的物品裝載問題等。
設 xj 為第 j 種物品的裝件數(非負整數)則問題的數學模型如下:
用動態規划方法求解,令fk(y) = 總重量不超過 y 公斤,包中只裝有前k 種物品時的最大使用價值。
其中y ≥0, k =1,2, …, n 。所以問題就是求 fn(a)。
其遞推關系式:
當 k=1 時,
例題:求下面背包問題的最優解。
解:a=5,問題是求 f3(5)
先從x3入手:
接下來要計算 f2(5) 和 f2(0) 。開始涉及x2。
最后算 f1(5)、f1(3)、f1(1)、f1(0) 。
於是,f2(5)=max{8,5+8,10} = 13。(x1=1,x2=1)
f2(0)=0。
所以,f3(5)=max{0+13,12+0}=13。(x1=1,x2=1,x3=0)
即優解為 X=(1 . 1 . 0),最優值為 Z = 13
總結:解動態規划的一般方法:從終點逐段向始點方向尋找最小(大)的方法。