好,現在可以準備進入稍微正式一點的部分了
前面的部分已經基本介紹了Agent以及AI的定義,那麼我們這章就要介紹最基本的Planning,翻譯的話應該要翻做計劃,不過大部分人應該還是會直接講英文,總之這章的部分會Focus在搜尋(Search)解的部分。
這章分做三個部分:
- 介紹Planning
- Planning中的抽象化
- Planning的結構
一、介紹Planning
一個Planning的問題可以由四樣東西組成:
- 初始狀態(Initial State)
- 後繼函數(Successor Function)(State X Action→ State)
- 是否達到目的(Goal Test)
- 路徑耗費資源(Path Cost)
一個Plan的解即是由初始狀態通往目的的一連串的Action
而Planning Problem本身則是為了找出耗費資源最少的解
例子:
Example of Planning Problem
上面就是一個Planning Problem的例子
Initial State是位在Arad
Successor function是每一個位置可以前往的其他程式,如S(Arad) = {〈Arad→ Zerind, Zerind〉,〈Arad→ Sibiu, Sibiu〉, ……}
Goal Test則是到達Burcharest
Path Cost則是每一個經過的路徑的Distance總和
二、Planning的抽象化
抽象化其實簡單來說,就是為了讓電腦或者使用者可以更方便的去理解並專注在問題本身,因為現實世界往往是非常複雜的,比如說上面的例子,從一個城市到另一個城市通常不會是一條直線的,路上也不會完全沒有其他地方,甚至到達的方法可能也有好多種,但是我們可能會簡化成方便我們處理問題的模式,也就是利用簡化問題,來讓解決問題變得更加簡單。
那麼Planning的抽象化應該如何進行?這時候就可以用到上一章學過的PEAS來做判斷了!只把跟Performance還有Action、Successor必要的Environment資訊保留下來,就可以達到簡化問題的效果。舉例來說,一般用Google map搜尋路徑的時候,我們不太會在乎這條路是雙線道還是單線道,因此在地圖上呈現出來的就只是一條可以通過的線而已,而不需要儲存多餘的資訊。
三、Planning的結構
有一種最常見的方式就是上面那張圖了,也就是State Space Graph,他把城市之間的路線圖簡化成只有城市的名字、距離與連通的線,這麼一來就可以非常方便讓人理解問題。
雖然這樣的方式在實作上不太可行,因為對記憶體來講,問題一旦變大,就沒有足夠的容量了。不過他依然是個有助於思考的方法。
接下來要介紹的是另外一種:Search tree
簡單來說,就是把你所有可能的動作都延伸成leaf nodes,然後再看每個leaf node可以做哪些動作,一路延伸下去。
同樣的,這樣的方式在實作上也依然不太可行,因為leaf nodes的數量會成指數性成長。
因此這兩種結構,更多是讓使用者可以更加直覺的理解這些電腦怎麼將Seach的方法應用在Planning Problem上。
總結
- Planning Problem由Initial State、Successor function、Goal Test、Path Cost組成。
- Planning Problem需要抽象化以方便電腦處理。
- Planning Problem的結構有Graph及Tree兩種