planning algorithms chapter 2

planning algorithms chapter 2 :Discrete Planning

離散可行規劃導論

問題定義

離散可行規劃

在離散規劃中,狀態是「可數」的,有限的。
離散可行規劃:算法

  1. 非空狀態空間 X
  2. 對於每一個狀態 x,存在一個有限的動做空間 U(x)
  3. 對於每一個狀態和動做空間,存在狀態轉移方程,產生一個新的狀態
  4. 一個初始狀態 xi
  5. 一個目標集 Xg

爲了方便表達離散可行規劃的定義,一般採用有向狀態轉移圖來表示,圖上的頂點集合表示狀態空間 X,只有當兩頂點之間可狀態轉移時,圖上兩頂點之間的有向邊才存在。初始狀態和目標集能夠表示爲圖上特別指定的頂點。數據結構

有向狀態轉移圖

離散規劃的例子

  • 2D 網格上移動(「迷宮」)

迷宮

  • 魔方拼圖

拼圖

圖搜索算法

前向搜索算法

通用前向圖搜索算法模板

上圖顯示了通用圖搜索算法模板,其中有幾點須要注意:Q 內部如何排序,如何判斷狀態屬於目標狀態,如何獲得計劃(動做序列),如何判斷該狀態是否已經訪問過,是否須要更新狀態代價值(如在Dijkstra 和 A* 算法)函數

幾種前向搜索算法,區別在於定義了Q 這個優先級隊列內部不一樣的排序方式優化

  • 廣度優先:FIFO
  • 深度優先:LIFO
  • Dijkstra :一種圖單源最短路徑搜索算法,一種特殊的動態規劃形式
    在Dijkstra中,圖上每條邊附帶一個代價(l(x, u) >= 0),Q 內部是按照從初始狀態到達該狀態的累計代價(C(x),cost-to-come)排序。cost-to-come 在搜索過程當中經過DP方式來增量計算(C(x‘) = C(x) + l(x, u), 表明最優)。
    Dijkstra 能夠保證一旦某個狀態被訪問,則該狀態的 cost-to-come必定是最優的。Dijkstra 內部 Q 實現採用的 Fibonacci heap 這種數據結構,能夠實如今常數時間內判斷某個狀態是否被訪問過。
  • A-star :基於Dijkstra進行擴展,引入啓發項值(G(x),cost-to-go),當G(x) = 0 時, A-star 退化成Dijkstra,Q 內部是按照從初始狀態到達目標狀態的預估最優代價( C(x’) + G(x‘)) 進行排序。
  • 最佳優先搜索:Q 內部是按照 cost-to-go 排序,一種貪心搜索,不保證最優,但搜索速度快。
  • 迭代加深搜索:經過不斷增長深度優先搜索深度的一種搜索,將深度優先搜索轉換爲一種系統性搜索方式(可以訪問可到達的全部狀態)。
    迭代加深搜索相比 BFS 使用更少的內存,迭代加深搜索結合 A-star 的思想,造成了 IDA* 算法,在每次迭代過程當中,最大深度步長爲C(x’) + G(x‘)。

其餘搜索算法

  • 反向搜索算法

通用反向搜索算法模板

  • 雙向搜索算法

通用雙向搜索算法模板
當兩棵搜索樹相遇時,搜索結束,返回成功。若是其中任一搜索樹的優先級隊列爲空, 且兩顆樹未相遇,則搜索結束,返回失敗。spa

搜索算法的統一視角

上述全部的搜索算法遵循如下一些共同的模式:3d

  1. 初始
    搜索開始時,搜索圖 G(V,E)中 E爲空集,V只包含初始狀態
  2. 選擇頂點
    從V中選擇一個頂點,這一般是經過維護一個優先級隊列實現
  3. 應用動做
    基於V中選擇的某個頂點,應用動做後,生成一個新的狀態 x = f(x0, u)
  4. 向搜索圖中插入有向邊
    新狀態 x 若是不在 V 中,則將 x 插入到 V 中
  5. 檢查解決方案
    若是隻有一顆搜索樹,根據搜索圖 G 獲得從初始狀態到目標狀態的路徑會比較簡單。若是搜索樹數量大於 1 顆,複雜度會增長。
  6. 返回到步驟 2
    迭代直到找到一個解決方案。

離散最優規劃

最優定長規劃

離散定長最優規劃
\(L\left ( \pi _{K} \right ) = \sum_{k=1}^{K}l(x_{k},u_{k}) + l_{F}(x_{F})\)blog

經過引入代價項Lf(xf)這一技巧,將離散可行規劃中的約束轉換爲優化問題代價函數中的一項。排序

基本思想: 最優規劃解決方案的子組成方案也是最優的,因而能夠經過動態規劃方法解決。在最優定長規劃中,採用一種迭代算法,稱爲 值迭代,它的主要思想是在狀態空間中迭代計算最優的 cost-to-go(或 cost-to-come)。Dijkstra’s algorithm 也是 值迭代的一種方式。隊列

反向值迭代

基本思想: 在狀態空間中迭代計算最優的 cost-to-go 代價值。在特殊場景下,該方法退化爲 Dijkstra 方法。ip

符號: $ G_{k}^{ \ast} $ :F 表示最後一步,$ G_{k}^{ \ast} $ 表示從第 k 步到 最後一步(F 步)最佳計劃下的累計代價

G

初始條件: $ G_{F}^{ \ast}\left ( x_{F} \right ) = l_{F}\left ( x_{F} \right ) $
結論:

結論
推導過程:

推導

值迭代過程:
$ G_{F}^{ \ast}\rightarrow G_{K}^{ \ast}\rightarrow G_{K-1}^{ \ast}\cdots G_{k}^{ \ast}\rightarrow G_{k-1}^{ \ast}\rightarrow\cdots G_{2}^{ \ast}\rightarrow G_{1}^{ \ast} $

時間複雜度: $ O\left ( K\left | X \right |\left | U \right | \right ) $

離散最優規劃標準定義\(L\left ( \pi _{K} \right ) = \sum_{k=1}^{K}l(x_{k},u_{k}) + l_{F}(x_{F})\),該時間複雜度爲 $ O\left | U \right |^K $,經過引入動態規劃,極大下降了複雜度。

舉例:

最優cost-to-go
如上圖,a 列 $ G_{1}^{ \ast} $ 的值 $G_{1}^{ \ast}\left ( a \right ) $ 表明了 5 步定步長最優規劃的累計代價爲 6 。那麼如何體現動態規劃思想下降時間複雜度呢?
當計算 $ G_{4}^{ \ast} $ 的值時,只有 b 和 c 能夠只通過 1 步到達 d,再通過1 步到達目標 e,所以只有\(G_{4}^{ \ast}\left ( b \right )\)\(G_{4}^{ \ast}\left ( c \right )\)爲有限值。再計算 \(G_{3}^{ \ast}\) 的值時,只有通過 b 和 c 的路徑纔可能通過 5 步到達 目標 e,所以縮小了考慮的範圍,具體程序表現爲選擇到達下一頂點的最小累計代價的行爲。

那麼,獲得了最佳cost-to-go的表,如何提取最佳計劃(或路徑)?
一種解決方案是爲每一個頂點存儲最優 \(G_{n}^{ \ast}\)所對應的行爲,所以這樣須要的內存複雜度爲 \(O(K\left | X \right |)\)

正向值迭代

  • 爲何須要正向值迭代?正向值和反向值迭代的區別是什麼?
    反向:
    反向值迭代能夠同時找到各頂點到目標頂點的最優計劃;
    反向值迭代須要目標頂點是肯定不變的;
    正向:
    正向值迭代能夠用來找到從初始頂點出發到其餘各頂點的最優計劃;
    正向值迭代須要初始頂點是肯定不變的;

基本思想: 在狀態空間中迭代計算最優的 cost-to-come 代價值。
下圖爲上例,根據正向值迭代獲得的最優 cost-to-come 代價值表。
最優cost-to-come

最優不定步長規劃

離散不定長最優規劃

\(L\left ( \pi _{K} \right ) = \sum_{k=1}^{K}l(x_{k},u_{k}) + l_{F}(x_{F})\)

經過引入代價項Lf(xf)這一技巧,將離散可行規劃中的約束轉換爲優化問題代價函數中的一項。

對比最優定長規劃問題和最優不定步長規劃的區別,主要在於終止條件的設置。
定長問題:
定長問題
不定步長:容許不一樣長度的計劃
不定長問題

在最優不定步長問題中,從\(x_{I}\)\(X_{G}\)的兩步計劃\(\left ( u_{1}, u_{2}\right )\)等效於從\(x_{I}\)\(X_{G}\)的五步計劃\(\left ( u_{1}, u_{2},u_{T},u_{T},u_{T}\right )\),所以最優定長規劃中的正(反)向值迭代優化方法均可以擴展用於最優不定步長問題中。

使用邏輯定義離散規劃

當狀態空間巨大時,對於計算機去解決這樣的規劃問題會比較困難,基於邏輯的表示形式在定義離散規劃問題時比較流行,由於輸出的結果是邏輯可解釋的,可是因爲基於邏輯的表示形式難以泛化,所以在連續空間、感知不肯定、多決策的規劃問題中,狀態空間的表示形式仍然適用。

STRIPS-Like 表示法

舉例: 放電池到手電筒內
放電池

相關文章
相關標籤/搜索