该项目是在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 上。目标是将它们堆叠在表 2 的 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