planning algorithms chapter 2
planning algorithms chapter 2 :Discrete Planning
離散可行規劃導論
問題定義
在離散規劃中,狀態是“可數”的,有限的。
離散可行規劃:
為了方便表達離散可行規劃的定義,通常采用有向狀態轉移圖來表示,圖上的頂點集合表示狀態空間 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‘)。
其他搜索算法
- 反向搜索算法
- 雙向搜索算法
當兩棵搜索樹相遇時,搜索結束,返回成功。如果其中任一搜索樹的優先級隊列為空, 且兩顆樹未相遇,則搜索結束,返回失敗。
搜索算法的統一視角
上述所有的搜索算法遵循以下一些共同的模式:
搜索開始時,搜索圖 G(V,E)中 E為空集,V只包含初始狀態
從V中選擇一個頂點,這通常是通過維護一個優先級隊列實現
基于V中選擇的某個頂點,應用動作后,生成一個新的狀態 x = f(x0, u)
新狀態 x 如果不在 V 中,則將 x 插入到 V 中
如果只有一顆搜索樹,根據搜索圖 G 得到從初始狀態到目標狀態的路徑會比較簡單。如果搜索樹數量大于 1 顆,復雜度會增加。
迭代直到找到一個解決方案。
離散最優規劃
最優定長規劃
\(L\left ( \pi _{K} \right ) = \sum_{k=1}^{K}l(x_{k},u_{k}) + l_{F}(x_{F})\)
通過引入代價項Lf(xf)這一技巧,將離散可行規劃中的約束轉換為優化問題代價函數中的一項。
基本思想: 最優規劃解決方案的子組成方案也是最優的,于是可以通過動態規劃方法解決。在最優定長規劃中,采用一種迭代算法,稱為 值迭代,它的主要思想是在狀態空間中迭代計算最優的 cost-to-go(或 cost-to-come)。Dijkstra’s algorithm 也是 值迭代的一種方式。
反向值迭代
基本思想: 在狀態空間中迭代計算最優的 cost-to-go 代價值。在特殊場景下,該方法退化為 Dijkstra 方法。
符號: $ G_{k}^{ \ast} $ :F 表示最后一步,$ G_{k}^{ \ast} $ 表示從第 k 步到 最后一步(F 步)最佳計劃下的累計代價
初始條件: $ 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 $,通過引入動態規劃,極大降低了復雜度。
舉例:
如上圖,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 代價值表。
最優不定步長規劃
\(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 表示法
舉例: 放電池到手電筒內
轉載于:https://www.cnblogs.com/zwk-coder/p/11097876.html
總結
以上是生活随笔為你收集整理的planning algorithms chapter 2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简述css样式的三种引入html的方式,
- 下一篇: 哈工大自然语言处理实验1——汉语分词系统