該專案是在node.js中使用人工智慧自動規劃庫strips的演示。
在線嘗試 https://stripsfiddle.meteorapp.com
npm install strips
如果您不熟悉 STRIPS 自動規劃,這裡有一個很棒的教學可以幫助您入門。
以下範例展示如何透過確定實現目標的最佳操作集來解決規劃問題。例如,堆疊積木、河內塔,甚至星海爭霸都可以透過人工智慧來解決(見下文,這非常簡潔!)。
該專案中包含了來自「積木世界」領域的幾個範例,其中人工智慧能夠成功規劃在一系列桌子上移動和堆疊積木的一系列步驟。
AI 規劃的工作原理是使用 PEG.js 語法表處理一個簡單的域,並使用簡單的 STRIPS 問題來執行結果。
域和問題 PDDL 檔案透過 PEG.js 進行解析,為給定域產生 JSON 物件。然後處理 JSON 以識別給定問題狀態下的適用操作。然後將這些操作應用於目前狀態,產生一組新的狀態。重複此過程,為新狀態確定適用的操作,應用並產生更多新狀態。然後可以使用 A* 演算法遍歷產生的可能狀態和動作樹,以找到實現問題中指定的目標狀態的最佳步驟集。
域名 |問題 將區塊 a、b 從表 x 移到表 y。一個表上允許有多個區塊。唯一可用的操作是“移動”。
域名 |問題 將區塊 a、b 從表 x 移到表 y 上的堆疊 ab。一個表上允許有多個區塊。可用的操作包括“移動”、“堆疊”和“取消堆疊”。
域名 |問題 將區塊 ba 從表 x 解壓縮到表 y 上的堆疊 ab。一個表上允許有多個區塊。可用的操作包括“移動”、“堆疊”和“取消堆疊”。
域名 |問題 有趣的一個!將表 1 中的區塊 ba 解壓縮到表 3 上的堆疊 ab。 AI 需要計劃將區塊暫時移動到表 2,同時設定在表 3 上堆疊的正確順序。
區塊被堆疊在表 1 的 ab 上。以下是解決方案。
*** Solution found in 6 steps!
1. unstack a b t1 t2
2. move b t1 t3
3. move a t2 t1
4. move b t3 t2
5. move a t1 t3
6. stack a t3 b t2
*** Solution found in 5 steps!
1. unstack a b t1 t2
2. move b t1 t3
3. move a t2 t1
4. move b t3 t2
5. stack a t1 b t2
*** Solution found in 5 steps!
1. unstack a b t1 t2
2. move a t2 t3
3. move b t1 t2
4. move a t3 t1
5. stack a t1 b t2
*** Solution found in 4 steps!
1. unstack a b t1 t2
2. move a t2 t3
3. move b t1 t2
4. stack a t3 b t2
*** Solution found in 4 steps!
1. unstack a b t1 t3
2. move b t1 t2
3. move a t3 t1
4. stack a t1 b t2
*** Solution found in 3 steps!
1. unstack a b t1 t3
2. move b t1 t2
3. stack a t3 b t2
這是人工智慧對方塊世界蘇斯曼異常的解決方案。
*** Solution found in 3 steps!
1. unstack2 c a x
2. stack2 b c x
3. stack3 a b c x
現在,為了一些樂趣。這裡是星海爭霸領域。任務是建造一個營房。我最初想建造一艘戰列巡洋艦,但這花了太長時間(沒有啟發式搜索!)。
*** Solution found in 8 steps!
1. move scv sector-a mineral-field-b
2. collect-minerals scv mineral-field-b
3. move scv mineral-field-b sector-b
4. build-supply-depot scv sector-b
5. move scv sector-b mineral-field-a
6. collect-minerals scv mineral-field-a
7. move scv mineral-field-a sector-a
8. build-barracks scv sector-a sector-b
更進一步,這是人工智慧訓練海軍陸戰隊的解決方案。
- Solution found in 11 steps!
1. move scv sector-a mineral-field-a
2. collect-minerals scv mineral-field-a
3. move scv mineral-field-a sector-b
4. build-supply-depot scv sector-b
5. move scv sector-b mineral-field-b
6. collect-minerals scv mineral-field-b
7. move scv mineral-field-b sector-a
8. build-barracks scv sector-a sector-b
9. move scv sector-a mineral-field-c
10. collect-minerals scv mineral-field-c
11. train-marine scv sector-a
麻省理工學院
科里貝克爾 http://www.primaryobjects.com/kory-becker