(本文適合入門理解思想,後期多刷題)算法
動態規劃是運籌學的一個分支,是求解多階段決策過程最優化問題的數學方法,在經濟管理、工程技術、工農業生產及軍事部門中都有着普遍的應用,而且得到了顯著的效果。函數
學習動態規劃,咱們首先要了解多階段決策問題。學習
多階段決策問題例子:優化
最短路徑問題spa
揹包問題
3d
生產決策問題:企業在生產過程當中,因爲需求是隨時間變化的,所以企業爲了得到整年的最佳生產效益,就要在整個生產過程當中逐月或逐季度地根據庫存和需求決定生產計劃。blog
機器負荷分配問題:某種機器能夠在高低兩種不一樣的負荷下進行生產。要求制定一個五年計劃,在每一年開始時,決定如何從新分配無缺的機器在兩種不一樣的負荷下生產的數量,使在五年內產品的總產量達到最高。get
航天飛機飛行控制問題:因爲航天飛機的運動的環境是不斷變化的,所以就要根據航天飛機飛行在不一樣環境中的狀況,不斷地決定航天飛機的飛行方向和速度(狀態),使之能最省燃料和完成飛行任務(如軟着陸)。數學
多階段決策過程的特色:產品
根據過程的特性能夠將過程按空間、時間等標誌分爲若干個互相聯繫又互相區別的階段。
在每個階段都須要作出決策,從而使整個過程達到最好的效果。
各個階段決策的選取不是任意肯定的,它依賴於當前面臨的狀態,又影響之後的發展。
當各個階段的決策肯定後,就組成了一個決策序列,於是也就決定了整個過程的一條活動路線,這樣的一個先後關聯具備鏈狀結構的多階段過程就稱爲多階段決策問題。
針對多階段決策過程的最優化問題,美國數學家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)。(需考慮第1、第二個工廠如何進行投資分配,以取得最大的總利潤)
根據公式,對應的最優策略:
第三階段:求 f3(x)。(需考慮第1、第二及第三個工廠如何進行投資分配,以取得最大的總利潤)
第四階段:同理求 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
總結:解動態規劃的通常方法:從終點逐段向始點方向尋找最小(大)的方法。