全稱: goal-oriented action planning
參考:goap 是讓 ai 自己去找到解決問題的方法,我們給ai 提供可以執行的行為,對世界的描述,每個行為執行的先決條件,以及執行行為對世界產生的影響效果。
ai 需要有目標(乙個或多個均可),通過世界狀態,根據自身行為,找到一組或多組可以完成某個目標的行為列表,根據優先順序或者綜合排序,決策出乙個最佳行為佇列,並按照順序執行一系列行為。
例子:ai 餓了,要找吃的填飽肚子。
ai 有行為:去飯店、買菜、做飯、翻冰箱找麵包、吃東西
1.去到飯店可以吃飯
2.買菜回來可以做飯然後吃飯
3.翻冰箱找麵包,找到麵包可以吃
4.有吃的就可以去吃東西
以上五中行為可以組合成 4 組 達到吃東的目的。
每個行為都是有先決條件和執行效果的。行為是否能夠執行必須要考慮到先決條件是否滿足。
行為先決條件
執行效果
cost
去飯店有飯店
買到飯(有吃的)
30買 菜
有超市買到菜
15做 飯
有 菜做好飯(有吃的)
10翻冰箱
冰箱有麵包
找到麵包(有吃的)
30吃 飯
有吃的吃東西(完成吃東西目標)
5ai 遍歷所有行為,根據當前世界狀態,獲取滿足執行條件的行為a。將行為a新增到可執行列表中,將a 作為乙個行為鏈的開始,繼續遍歷剩下的行為,直到可以完成目標為止,為乙個可以完成目標的行為鏈。如此下去最終找到 n 組可以完成目標的行為鏈。
第一次遍歷
世界狀態:有超市、沒吃的、沒菜、沒冰箱、有飯店。
遍歷所有行為,行為序列為:去飯店、做飯、翻冰箱、買菜、吃飯
去飯店行為要求有飯店 :條件滿足,加入可執行佇列
做飯行為要求有菜:不滿足跳過
翻冰箱行為要求有冰箱:不滿足跳過
買菜行為要求有超市 :條件滿足,加入可執行佇列
吃飯行為要求有吃的 :不滿足跳過
第一次遍歷完成,可執行行為佇列中有行為:去飯店、買菜
遍歷可執行行為佇列,以佇列中每乙個行為為開端,重新遍歷,這樣就會生成兩個分支,
分支 1:去飯店
分支 2:去超市買菜
以去超市買菜分支為例,買菜行為做為開端開始遍歷
拷貝當前世界狀態為 newworldstate。拷貝行為序列 newactionlist,排除掉買菜行為。
注意:以任何行為為開端開始執行遍歷,都要將該行為從行為序列中刪除,否則會出現無限迴圈,且沒有意義
以 newworldstate 為世界狀態,newactionlist 為行為序列,開始新一輪遍歷,將買菜行為執行效果(買到菜/有菜)更新到 newworldstate,判斷 newworldstate 是否包含目標吃飯,如果包含則視為可以完成目標,退出遍歷。
newworldstate沒有包含吃飯,沒有完成目標繼續
此時 newworldstate 世界狀態為:有超市、沒吃的、有菜、沒冰箱、有飯店
newactionlist 為行為序列為: 去飯店、做飯、翻冰箱、吃飯
去飯店行為要求有飯店 :條件滿足,加入到新的行為佇列,以買菜行為為父節點
做飯行為要求有菜 :條件滿足,加入到新的行為佇列,以買菜行為為父節點
翻冰箱行為要求有冰箱 :不滿足跳過
吃飯行為要求有吃的 :不滿足跳過
遍歷結束,以買菜行為為開端,加入乙個去飯店行為,乙個做飯行為。
到此去買菜行為又產生兩個分支,這兩個分支都是從 分支 2 上產生的。
分支 2.1 : 去超市買菜 -> 去飯店
分支 2.2 :去超市買菜 -> 做飯
然後遍歷 分支 2.1 和 2.2,繼續查詢可執行序列
以 分支 2.2 為例,做飯行為作為開端開始遍歷
拷貝newworldstate狀態為 newworldstate_2_2。拷貝newactionlist行為序列 newactionlist_2_2,排除掉做飯行為。
以 newworldstate_2_2為世界狀態,newactionlist_2_2 為行為序列,開始新一輪遍歷,將做飯行為執行效果(有飯/有吃的)更新到 newworldstate_2_2,判斷 newworldstate_2_2 是否包含目標吃飯,如果包含則視為可以完成目標,退出遍歷。
newworldstate_2_2 沒有包含吃飯,沒有完成目標繼續
此時 newworldstate_2_2 世界狀態為:有超市、有吃的、有菜、沒冰箱、有飯店
newactionlist 為行為序列為: 去飯店、翻冰箱、吃飯
去飯店行為要求有飯店 :條件滿足,加入到新的行為佇列,以買菜行為為父節點
翻冰箱行為要求有冰箱 :不滿足跳過
吃飯行為要求有吃的 :條件滿足,加入到新的行為佇列,以買菜行為為父節點
遍歷結束,以分支 2.2 做飯行為為開端,加入乙個去飯店行為,乙個吃飯行為。
到此去做飯行為又產生兩個分支,這三個分支都是從 分支 2.2 上產生的。
分支 2.2.1 : 去超市買菜 -> 做飯 -> 去飯店
分支 2.2.2 : 去超市買菜 -> 做飯 -> 吃飯
到此 分支 2.2.2 分支已可以完成 吃飯目標了,為乙個完整的達到目標的可執行序列。儲存起來。
上面所有分支都要遍歷完成,這裡只是講述原理,不能做到將所有分
引用塊內容支都走一遍。
最終結果大概有如下幾種
a :去飯店 -> 吃飯
b :去飯店 -> 買 菜 -> 做飯 -> 吃飯
c :買 菜-> 做飯 -> 去飯店 -> 吃飯
d: 買 菜 -> 做飯 -> 吃飯
e: 買 菜-> 去飯店-> 做飯 -> 吃飯
如何找到最有解,設定每種行為的 消耗 cost,每中方案 總消耗為 所有行為的 cost 相加,找到 總 cost 最小的乙個。
那麼如上 a - e 幾種方案的消耗如下
方案行為序列
cost
a去飯店 -> 吃飯
30+5 = 35
b去飯店 -> 買 菜 -> 做飯 -> 吃飯
30 + 15 + 10 + 5 = 60
c買 菜-> 做飯 -> 去飯店 -> 吃飯
15 + 10 + 30 + 5 = 60
d買 菜 -> 做飯 -> 吃飯
15 + 10 + 5 = 30
e買 菜-> 去飯店-> 做飯 -> 吃飯
15 + 30 + 10 + 5 = 60
最終確定執行 d 方案為最優解
任務導向型對話系統
任務導向型對話系統 對話管理模型研究最新進展 building task oriented dialogue systems for online shopping 我分享了 dm sequicity simplifying task oriented dialogue systems with s...
About Face 一 目標導向設計
1.目標導向設計 設計是 為賦予有意義的秩序,做出有意識或直覺的努力 以人為導向的設計活動 當今數字產品的一些問題 原因 2.實現模型和心理模型 使用者介面應該按照使用者心理模型來實現,但當今大多數軟體是按照實現模型來設計的。3.新手 專家和中間使用者 大多數是中間使用者,沒有人願意停留在新手級別。...
職業生涯點評(一) 體驗式還是目標導向式
程式設計師跨越鴻溝之二 彷徨與微笑 編者按 同樣有許多人,覺得定位人生目標,不是個問題。在家吃飯,父母會諄諄教導 你要學會賺錢,而出去在餐廳點菜,服務員臉色隨著價位高低陰晴變化,也在暗示 你最好是有錢人。人為財死,鳥為食亡,在如今的商品社會裡,不會有人質疑把 生命的顛峰 一步到位直接等同成 金山 有...