人工智能入门 | 您所在的位置:网站首页 › strips语言 › 人工智能入门 |
作为一个刚刚学习人工智能的小白,对许多的知识都表示一脸懵逼。随着课程进展到规划问题,不可避免地与pddl相遇,经历了一段时间的学习,下面以小白的角度简要介绍一下pddl,并且附带简例说明。 Planning Domain Definition Language(简称pddl,规划区域定义语言)是一种标准化的人工智能规划语言,主要涉及到逻辑学以及规划任务问题,这里不细说。大家可以自行谷歌,这有一个关于pddl的PDF文件,里面包含了简介以及最基本的语法,在开启学习之前,首先得自己先了解基本的语法内容。下面是一个最简单的例子。该例子模拟了一个机器人清洁两个房间的简单过程。 domain文件: (define (domain state) //domain命名,怎么喜欢怎么来 (:predicates (room ?r) //谓词,这里应该包括该文件中出现的所有的谓词逻辑,不然会error:Undefined,这里判断是不是room (robot ?rob) //这里则是判断一个抽象对象rob是不是robot (at-robot ?r) //判断robot是不是在room r中 (dirty ?r) //判断room r是不是脏的 (clean ?r) //判断room r是不是干净的 (fullPower ?rob)) //判断机器人robot是不是有电 (:action sweep //扫地动作 :parameters(?robot ?r) //设置参数 :precondition //前提条件(前件) (and //and的意思是以下括号内的都必须为真 (robot ?robot) //这个对象robot是robot为真 (room ?r) //这个对象r是room为真 (dirty ?r) //这个r是dirty的 (at-robot ?r) //而且robot在r中刚好为真 (fullPower ?robot) //机器人有电 ) :effect //满足以上条件,执行扫地动作,效果为如下 (and (clean ?r) //r已经干净了 (not (dirty ?r) //r不脏 ) (not (fullPower ?robot) //机器人没电,默认为扫一个房间即耗尽电量 ) ) ) (:action charging //充电动作 :parameters(?robot ?r) //两个参数为robot跟r,就近充电 :precondition (and (robot ?robot) (room ?r) (at-robot ?r) (clean ?r) (not (fullPower ?robot) ) ) :effect (and (fullPower ?robot) //充满电,可进行下一动作 ) ) (:action move //移动动作 :parameters (?from ?to) //从from移动到to :precondition (and (dirty ?to) //移动的前提:to还是脏的,from已经扫干净了,而且robot在扫干净的房间里,想移动到脏的房间 (clean ?from) (room ?from) (room ?to) (at-robot ?from) ) :effect (and (at-robot ?to) //效果:到达脏的房间,离开干净的房间 (not (at-robot ?from) ) ) ) )problem(测试)文件: (define (problem solve) (:domain state) (:objects rooma roomb robot //设置对象,这个例子比较简单,只有三个对象,房间a房间b还有机器人 ) (:init //初始化起始状态,有两个房间,都是脏的,机器人在房间a并且满电,注意此处不用(room ?rooma) (room rooma) (room roomb) (robot robot) (dirty rooma) (dirty roomb) (at-robot rooma) (fullPower robot) ) (:goal //设定这个规划问题最终要达到的目标状态,两个房间是干净的,并且机器人仍旧是满电待命的 (and (clean rooma) (clean roomb) (fullPower robot) ) ) )运行结果: |
CopyRight 2018-2019 实验室设备网 版权所有 |