翻译:HDDL 领域(Domain in HDDL)
HDDL(Hierarchical Domain Definition Language)是一种用于 HTN(Hierarchical Task Network) 规划的建模语言,它支持定义动作(actions) 和 方法(methods),用于描述分层任务的规划问题。
1. 动作(Actions)
HDDL 允许定义一系列 原始任务(Primitive Tasks),即可以直接执行的操作。每个动作由以下部分组成:
:parameters
(参数):定义该动作涉及的变量及其类型。:precondition
(前提条件):描述执行该动作所需满足的状态。:effect
(效果):描述执行该动作后,状态如何变化。
(1) 购票 (getTicket
)
(:action getTicket
:parameters (?x ?y ?xc ?yc - object)
:precondition (and (airport ?x ?xc) (airport ?y ?yc))
:effect (and (ticket ?x ?y))
)
解释:
- 参数:
?x
和?y
:出发地和目的地。?xc
和?yc
:出发地和目的地的机场代码。
- 前提条件:
?x
和?y
必须是机场,并且它们分别位于?xc
和?yc
。
- 效果:
- 生成
(ticket ?x ?y)
,即购得从?x
到?y
的机票。
- 生成
(2) 飞行 (fly
)
(:action fly
:parameters (?x ?y ?x1 ?y1 - object)
:precondition (and (airport ?x ?x1)
(airport ?y ?y1)
(ticket ?x ?y)
(at ?x))
:effect (and (not (at ?x)) (not (ticket ?x ?y)) (at ?y))
)
解释:
- 参数:
?x
和?y
:出发机场和到达机场。?x1
和?y1
:出发地和目的地的国家或地区。
- 前提条件:
?x
和?y
必须是机场。- 需要有
(ticket ?x ?y)
(购票)。 - 当前位于
?x
(at ?x
)。
- 效果:
not (at ?x)
:离开出发机场。not (ticket ?x ?y)
:使用机票,票作废。at ?y
:到达目的地。
(3) 叫出租车 (getTaxi
)
(:action getTaxi
:parameters (?x - object)
:precondition (and (at ?x))
:effect (and (hasTaxi ?x))
)
解释:
- 参数:
?x
:当前位置。
- 前提条件:
at ?x
(必须在?x
位置)。
- 效果:
hasTaxi ?x
(拥有出租车)。
(4) 乘坐出租车 (rideTaxi
)
(:action rideTaxi
:parameters (?x ?y - object)
:precondition (and (at ?x) (not (longDistance ?x ?y)) (hasTaxi ?x))
:effect (and (not (at ?x)) (not (hasTaxi ?x)) (at ?y))
)
解释:
- 参数:
?x
和?y
:起点和终点。
- 前提条件:
- 当前位置
?x
。 ?x
和?y
之间不能是长途距离(not (longDistance ?x ?y)
)。- 已经叫到出租车(
hasTaxi ?x
)。
- 当前位置
- 效果:
not (at ?x)
:离开?x
。not (hasTaxi ?x)
:不再拥有出租车。at ?y
:到达?y
。
2. 方法(Methods)
HDDL 允许定义 非原始任务(Nonprimitive Tasks),这些任务不能直接执行,必须通过 方法(Methods) 进行分解。
(1) 通过出租车旅行 (travel-by-taxi
)
(:method travel-by-taxi
:parameters (?x ?y - object)
:task (travel ?x ?y)
:precondition (and (at ?x) (not (longDistance ?x ?y)))
:ordered-subtasks ((getTaxi ?x) (rideTaxi ?x ?y))
)
解释:
- 参数:
?x
和?y
:出发地和目的地。
- 任务:
travel(?x, ?y)
(表示从?x
旅行到?y
)。
- 前提条件:
- 需要在
?x
。 - 不能是长途旅行(
not (longDistance ?x ?y)
)。
- 需要在
- 子任务(有序执行):
- 先
getTaxi(?x)
(叫出租车)。 - 再
rideTaxi(?x, ?y)
(乘坐出租车到?y
)。
- 先
(2) 通过飞机旅行 (travel-by-plane
)
(:method travel-by-plane
:parameters (?x ?y ?ax ?ay - object)
:task (travel ?x ?y)
:precondition (and (at ?x) (longDistance ?x ?y)
(airport ?ax ?x) (airport ?ay ?y))
:subtasks ((task0 (getTicket ?ax ?ay))
(task1 (travel ?x ?ax))
(task2 (fly ?ax ?ay))
(task3 (travel ?ay ?y)))
:ordering (and (task0 < task2) (task0 < task3) (task2 < task3))
)
解释:
- 参数:
?x
和?y
:出发地和目的地。?ax
和?ay
:出发地和目的地的机场。
- 任务:
travel(?x, ?y)
(从?x
到?y
)。
- 前提条件:
- 需要在
?x
。 - 需要
longDistance(?x, ?y)
(长途旅行)。 ?ax
和?ay
分别是?x
和?y
对应的机场。
- 需要在
- 子任务:
getTicket(?ax, ?ay)
(购票)。travel(?x, ?ax)
(前往出发机场)。fly(?ax, ?ay)
(乘机)。travel(?ay, ?y)
(从到达机场前往最终目的地)。
- 任务顺序约束:
- 必须先购票
task0 < task2
。 - 必须在飞行之前完成购票
task0 < task3
。 - 必须在飞行后才能前往最终目的地
task2 < task3
。
- 必须先购票
3. 总结
- HDDL 是 HTN 规划的标准语言,用于描述分层任务的规划问题。
- 原始任务(Actions):
- 购票(
getTicket
)、飞行(fly
)、叫出租车(getTaxi
)、乘坐出租车(rideTaxi
)。
- 购票(
- 非原始任务(Methods):
travel-by-taxi
:先叫出租车,再乘车。travel-by-plane
:先购票,再去机场,乘机,然后到达最终目的地。
- 任务分解(Task Decomposition):
- 高层任务(
travel(x, y)
)被分解为多个低层任务,直至所有任务都变为可执行的原始任务。
- 高层任务(
- 适用于:
- 智能调度(Smart Scheduling)
- 机器人规划(Robotics Planning)
- 自动化交通系统(Automated Transportation Systems)
- 物流优化(Logistics Optimization)