PDDL语言支持许多不同级别的表现力。仅使用PDDL的STRIPS子集提供了PDDL域和问题定义的一些示例。
任何域定义都必须以:requirements
子句的形式显式声明其表达要求 。这样,PDDL解析器就可以验证您仅使用您明确请求的表现力,并且使计划人员可以轻松地告诉您是否正在请求其不支持的功能。不幸的是,许多solvers的解析器都忽略了此规范。
最基本的表达水平称为STRIPS,大约相当于1971年由斯坦福研究所的问题解决器(这是Shakey机器人所使用的计划器)支持的水平。要请求这种水平的表达,请说(:requirements:strips)
STRIPS语言¶
:strips ;Basic STRIPS style adds and deletes
STRIPS 表达式一种以行动为中心的表示,它对于每个动作(action)来说,都需要指定这个动作所获得的效果(effect)。一个这样的表示就是**STRIPS representation**。“斯坦福研究院问题解决器”(Stanford Research Institute Problem Solver)的缩写,首先,将描述世界的特征划分为原始的**primitive**和派生的**primitive**特征。一定数量的子句用来确定从任何给定状态的原始**primitive**特征值得出的派生derived特征的值。STRIPS表示基于先前状态和之前agent所采取的操作,来确定一个状态下的原始特征值,STRIPS representation**是基于大多数事物不受单个动作影响的观点设计的。对于每一个动作,当动作可行时,STRIPS models中原始**primitive**特征值会被动作所影响。动作的效果依赖于**STRIPS assumption: 动作描述中所提到的所有原始特征保持不变。
需要了解状态流Fluent的含义,然后看http://www.primaryobjects.com/2015/11/06/artificial-intelligence-planning-with-strips-a-gentle-introduction/ 很多实例解释,other types of artificial intelligence planners, including GraphPlan and hierarchical task network (HTN) planners.
https://en.wikipedia.org/wiki/Stanford_Research_Institute_Problem_Solver 入门看这里
一个动作的**STRIPS representation**包括:
- 前置条件**precondition**,它是一组值的赋值,操作发生时,它们必须是True的。
- 效果**effect**,它是一组结果赋值给那些由于动作而改变的原始特征。
原始特征V在动作*act*行为后具有v值,如果V= v在行为列表中,或者在act的效果列表中没有提到V,则V在动作*act*前立即具有v值。非原始的特性可以从原始特性的值中派生出来。
当变量是布尔值时,有时将效果划分为一个删除列表delete list是很有用的,其中包括那些可能导致false的变量,以及一个add list添加列表,其中包含导致True的变量。
domain文件定义a name, predicates and operators that are available in the domain (though operators are called actions in PDDL).名称(域,谓词,操作等)通常可能包含字母数字字符,连字符(“ -
”)和下划线(“ _
”),尽管可能有些计划者允许使用更少的名称。
It may also specify types (see Typing, below), constants, static facts and many other things, some of which are not supported by the majority of planners.一般各种规划器都有自己针对的问题及其独有使用的parser,最常用能被支持的属性只有PDDL2.1的基本features.
The format of a (simple) domain definition is as follows. Elements in [] are optional. 这里是一些例子example domain definitions
许多保留关键字都以冒号开头,因此新发明的自定义关键字不会干扰您在域和问题说明中已用于其他目的的名称,只需要你在自己写的parser中解析,在自己写的solvers中处理就行。
变量(例如谓词和操作的参数)以问号(“?”)开头来区分。
PDDL文件中的注释以分号(“ ;
”)开头,最后到该行的末尾。
(define (domain DOMAIN_NAME)
(:requirements [:strips] [:equality] [:typing] [:adl] ...)
[(:types T1 T2 T3 T4 ...)]
(:predicates (PREDICATE_1_NAME [?A1 ?A2 ... ?AN])
(PREDICATE_2_NAME [?A1 ?A2 ... ?AN])
...)
(:action ACTION_1_NAME
[:parameters (?P1 ?P2 ... ?PN)]
[:precondition PRECOND_FORMULA]
[:effect EFFECT_FORMULA]
)
(:action ACTION_2_NAME
...)
...)
学习最快速的方法是学习制作一个原型 A python implementation of the STRIPS planning algorithm https://github.com/tansey/strips 把python2的raw-input()重命名为input(),把print "" 加上括号print("")修改之后就能python3.X运行例子:
>python strips.py simple_blocks.txt
Goal already solved? False
Solving...
Solved!
Plan: PickUp(D, A, Tower1) -> PickUpLast(A, Tower1) -> Go(Tower1, Tower2) -> PickUp(B, C, Tower2) -> Go(Tower2, Tower1) -> PlaceOnEmpty(B, Tower1) -> PlaceOn(A, B, Tower1) -> PickUp(A, B, Tower1) -> PickUpLast(B, Tower1) -> Go(Tower1, Tower2) -> PickUpLast(C, Tower2) -> Go(Tower2, Tower1) -> PlaceOnEmpty(C, Tower1) -> PickUpLast(C, Tower1) -> PlaceOnEmpty(C, Tower1) -> PickUpLast(C, Tower1) -> PlaceOnEmpty(C, Tower1) -> PickUpLast(C, Tower1) -> PlaceOnEmpty(C, Tower1) -> PickUpLast(C, Tower1) -> PlaceOnEmpty(C, Tower1) -> PickUpLast(C, Tower1) -> PlaceOnEmpty(C, Tower1) -> PlaceOn(B, C, Tower1) -> PlaceOn(A, B, Tower1)
JS-STRIP¶
您可以使用在线应用程序Strips-Fiddle尝试不同的STRIPS PDDL域和问题。尝试任何示例领域,或创建一个帐户来设计自己的人工智能计划领域和问题。要将基于STRIPS的AI规划集成到您的应用程序或游戏中,可以使用node.js strips库,该库支持广度优先,深度优先和A *搜索。Strips库的github主页提供了对该库的更高层次的概述,其中包括Starcraft域的(A *搜索定义cost函数)示例代码。
https://github.com/primaryobjects/strips AI Automated Planning with STRIPS and PDDL in Node.js包导入url https://www.npmjs.com/package/strips
npm install strips
年份 | 事件 | 相关论文/Reference |
---|---|---|
1971 | Fikes, R. E., & Nilsson, N. J.提出STRIPS | Fikes, R. E., & Nilsson, N. J. (1971). STRIPS: A new approach to the application of theorem proving to problem solving. Artificial intelligence, 2(3-4), 189-208. |
1992 | H. A. Kautz and B. Selman提出的Satplan | Kautz, H. A., & Selman, B. (1992, August). Planning as Satisfiability. In ECAI (Vol. 92, pp. 359-363). |
1993 | Fikes, R. E., & Nilsson, N. J.对STRIPS进行回顾 | Fikes, R. E., & Nilsson, N. J. (1993). STRIPS, a retrospective. Artificial Intelligence, 59(1-2), 227-232. |
1997 | Blum, A. L., & Furst, M. L.提出一种快速的图规划算法 | Blum, A. L., & Furst, M. L. (1997). Fast planning through planning graph analysis. Artificial intelligence, 90(1-2), 281-300. |
2010 | Galuszka, A., & Swierniak, A.在多机器人中基于STRIPS和非合作博弈的规划算法 | Galuszka, A., & Swierniak, A. (2010). Planning in multi-agent environment using strips representation and non-cooperative equilibrium strategy. Journal of Intelligent and Robotic Systems, 58(3-4), 239-251. |