AI基础 L26 Introduction to Automated Planning - II

ADL
Action Description Language (ADL) is a richer language than STRIPS.
It allows for
• Positive and negative literals in states
• The open world assumption
• Quantified variables in goals as well as conjunctions and disjunctions
• Conditional effects
• (in)Equality predicates
• Types associated with variables

  1. 状态中的正负文字

    • ADL 允许状态中包含正文字和负文字,这使得状态的描述更加灵活和精确。
    • 负文字表示某种条件不成立。
  2. 开放世界假设

    • ADL 支持开放世界假设,这意味着状态中未提及的条件默认为假。
    • 这与 STRIPS 中的封闭世界假设不同,后者假设未提及的条件默认为真。
  3. 目标中的量化变量

    • ADL 允许在目标中使用量化变量,这使得可以定义更复杂的规划目标。
    • 量化变量可以出现在合取(conjunctions)和析取(disjunctions)中。
  4. 条件效果

    • ADL 允许动作具有条件效果,这意味着动作的效果取决于执行动作时的状态。
    • 条件效果比 STRIPS 的简单效果更加灵活。
  5. (不)等式谓词

    • ADL 支持 (不) 等式谓词,这使得可以表达更复杂的关系和条件。
    • 等式谓词可以用来比较变量的值。
  6. 变量类型

    • ADL 允许为变量指定类型,这有助于避免类型错误和提高规划的准确性。

PDDL
• Planning Domain Definition Language (PDDL)
is a standard encoding language for “classical“ planning tasks
• Components of a PDDL planning task:
        — Objects: Things in the world that interest us.
        — Predicates: Properties of objects that we are interested in; can be true or false.
        — Initial state: The state of the world that we start in.
        — Goal specification: Things that we want to be true.
        — Actions/Operators: Ways of changing the state of the world.

  1. 对象(Objects)

    • 对象是我们在世界中感兴趣的事物。
    • 对象可以是具体的实体,如人、物体、地点等。
  2. 谓词(Predicates)

    • 谓词是对象属性的描述,可以是真或假。
    • 谓词定义了对象之间的关系和状态。
  3. 初始状态(Initial state)

    • 初始状态是我们开始时的世界状态。
    • 它描述了所有对象和谓词的初始值。
  4. 目标规格(Goal specification)

    • 目标规格是我们希望为真的事物。
    • 它定义了规划任务的成功条件。
  5. 动作/运算符(Actions/Operators)

    • 动作/运算符是改变世界状态的方式。
    • 它们定义了智能体可以执行的操作,以及这些操作如何改变对象和谓词的状态。

PDDL 示例

  • 对象

    • “Person, House, Room”
    • 这里定义了三种对象:人、房子和房间。
  • 谓词

    • “In(person, room)”
    • “Owns(person, house)”
    • 这些谓词描述了对象之间的关系和状态。
  • 初始状态

    • “In(Alice, Living_Room), Owns(Alice, House1)”
    • 初始状态描述了对象和谓词的初始值。
  • 目标规格

    • “In(Alice, Kitchen)”
    • 目标规格定义了规划任务的成功条件。
  • 动作/运算符

    • “Move(person, room)”
    • “Enter(person, house)”
    • 这些动作/运算符定义了智能体可以执行的操作。

Planning tasks specified in PDDL are separated into two files:
1 A domain file for predicates and actions.
2 A problem file for objects, initial state and goal specification.

领域文件(Domain File)

  • 内容:领域文件包含规划领域的常量、谓词、动作和运算符。
  • 作用:定义了智能体可以采取哪些动作,以及这些动作如何改变世界状态。
  • 示例:在上面提供的 gripper 领域文件示例中,定义了谓词如 “room”、“ball”、“gripper” 等,以及动作 “move”、“pick” 和 “drop”。

问题文件(Problem File)

  • 内容:问题文件包含规划问题的对象、初始状态和目标规格。
  • 作用:定义了智能体需要解决的具体问题,包括哪些对象是重要的、初始状态下世界是什么样的,以及智能体需要达到的目标状态。
  • 示例:在 gripper 问题文件中,定义了初始状态如 “In(Alice, Living_Room), Owns(Alice, House1)”,以及目标规格如 “In(Alice, Kitchen)”。

规划任务的分解

Domain Files

<domain name> is a string that identifies the planning domain,
e.g. gripper.

<domain name> 用于为每个规划领域指定一个唯一的名称,以区分不同的问题类型。每个规划领域都有其特定的规则和操作,这使得规划系统能够针对每个领域定制解决方案。例如,一个名为 “gripper” 的领域可能涉及抓取器操作,而另一个名为 “rover” 的领域可能涉及机器人导航。每个领域都有其独特的约束和目标,因此需要不同的规划策略来解决。通过使用不同的 <domain name>,规划系统能够识别和处理特定领域的规划问题,从而更有效地生成解决方案。
Example on the web: gripper.pddl.、

Problem Files

<problem name>is a string that identifies the planning task, e.g. gripper-four-balls.

<domain name>must match the domain name in the corresponding domain file. Example on the web: gripper-one.pddl.

<problem name> 是一个字符串,用于标识规划任务。它是在定义问题(problem)时使用的,以明确区分不同的规划任务。每个规划任务都可以有一个唯一的名称,这个名称通常以文件的形式存在,例如 “gripper-four-balls.pddl”。

在PDDL文件中,<problem name> 指定了规划任务的名称,以便规划系统能够识别和处理该任务的特定细节。<problem name> 必须与对应的领域文件(domain file)中的 <domain name> 匹配。例如,如果一个规划任务的文件名为 “gripper-one.pddl”,那么它的 <domain name> 必须是 “gripper”。这种匹配确保了规划系统能够正确地关联规划领域和规划任务的定义,从而有效地解决规划问题。

Running Example
• Gripper task with four balls:
There is a robot that can move between two rooms and pick up or drop balls with
either of his two arms. Initially, all balls and the robot are in the first room. We want
the balls to be in the second room.
• Objects: The two rooms, four balls and two robot arms.
• Predicates: Is x a room? Is x a ball? Is ball x inside room y? Is robot arm x empty? [...]
• Initial state: All balls and the robot are in the first room. All robot arms are empty.
[...]
• Goal specification: All balls must be in the second room.
• Actions/Operators: The robot can move between rooms, pick up a ball or drop a ball.

象(Objects)

  • 房间:两个房间,分别称为 “Room1” 和 “Room2”。
  • :四个球,分别称为 “Ball1”、“Ball2”、“Ball3” 和 “Ball4”。
  • 机器人手臂:两只机器人手臂,分别称为 “Arm1” 和 “Arm2”。

谓词(Predicates)

  • 房间谓词:例如 “Is(Room1, room)” 表示 “Room1” 是一个房间。
  • 球谓词:例如 “Is(Ball1, ball)” 表示 “Ball1” 是一个球。
  • 球在房间中的谓词:例如 “In(Ball1, Room1)” 表示 “Ball1” 在 “Room1” 中。
  • 机器人手臂空谓词:例如 “Empty(Arm1)” 表示 “Arm1” 是空的。

初始状态(Initial state)

  • 所有球和机器人都在第一个房间:例如 “In(Ball1, Room1), In(Ball2, Room1), In(Ball3, Room1), In(Ball4, Room1), In(Arm1, Room1), In(Arm2, Room1)”。
  • 所有机器人手臂都是空的:例如 “Empty(Arm1), Empty(Arm2)”。

目标规格(Goal specification)

  • 所有球都必须在第二个房间:例如 “In(Ball1, Room2), In(Ball2, Room2), In(Ball3, Room2), In(Ball4, Room2)”。

动作/运算符(Actions/Operators)

  • 机器人可以在房间之间移动:例如 “Move(Arm1, Room1, Room2)” 表示 “Arm1” 从 “Room1” 移动到 “Room2”。
  • 机器人可以捡起球:例如 “Pickup(Ball1, Arm1)” 表示 “Arm1” 捡起 “Ball1”。
  • 机器人可以放下球:例如 “Drop(Ball1, Arm1)” 表示 “Arm1” 放下 “Ball1”。

解决方案

  • 可能的解决方案
    1. 机器人可以先用一只手臂将球从第一个房间移动到第二个房间。
    2. 然后,机器人可以用另一只手臂捡起第一个房间中的球,并将它们移动到第二个房间。
    3. 最后,机器人将所有球放在第二个房间中。

这个例子展示了一个简单的抓取器任务,其中机器人需要将四个球从第一个房间移动到第二个房间。通过定义对象、谓词、初始状态、目标规格和动作,我们可以使用PDDL来描述和解决这个规划问题。这种方法使得规划器能够更好地处理规划问题,并找到有效的解决方案。

Gripper Task: Objects
• Objects:
Rooms: rooma, roomb
Balls: ball1, ball2, ball3, ball4
Robot arms: left, right
• In PDDL:
( :objects rooma roomb
        ball1 ball2 ball3 ball4
        left right )

Gripper task: Predicates

Gripper Task: Initial State

• Initial State:
room(rooma) and room(roomb) are true.
ball(ball1), ..., ball(ball4) are true.
gripper(left), gripper(right), free(left) and free(right) are true.
at-robby(rooma), at-ball(ball1, rooma), ..., at-ball(ball4, rooma) are true.
Everything else is false.
• In PDDL

Gripper Task: Goal Specification
• Goal Specification:
at-ball(ball1, roomb), ..., at-ball(ball4, roomb) must be true.
Everything else, we don’t care about.
• In PDDL:

Gripper Task: Movement Operator

Gripper Task: Pick-up Operator

Gripper Task: Drop Operator

A note on Action Effects
• Action effects can be more complicated than seen so far.
• They can be universally quantified:
(forall (?v1 ... ?vn)
<effect>)
• They can be conditional:
(when <condition>
<effect>)
• Example on the web: crazy-switches.pddl

  1. 普遍量化

    • 动作效果可以使用普遍量化(universal quantification)来表示,这意味着效果对所有可能的情况都成立。
    • 普遍量化形式为 (forall (?v1 ... ?vn) <effect>),其中 ?v1 ... ?vn 是变量,<effect> 是效果的描述。
    • 例如,一个普遍量化的效果可能是 (forall (?ball) (in ?ball room2)),表示所有球都在房间2中。
  2. 条件效果

    • 动作效果也可以是条件性的,这意味着效果只在满足特定条件时才发生。
    • 条件效果形式为 (when <condition> <effect>),其中 <condition> 是效果发生的条件,<effect> 是效果的描述。
    • 例如,一个条件效果可能是 (when (empty ?arm) (pickup ?ball ?arm)),表示当手臂为空时,捡起球。

 Exercise

• Formalise the actions of the Blocks
World Domain:
• Predicates:
— on(A,B) - A is on B
— block(B) - B is a block
— clear(B) - B is clear
• Objects: Blocks a, b and c; table (always clear)Start State Goal State

 (in STRIPS)

Init(On(A, Table) ∧ On(B, Table) ∧ On(C, A)
∧ Block (A) ∧ Block (B) ∧ Block (C) ∧ Clear (B) ∧ Clear (C))
Goal (On(A, B) ∧ On(B, C))
Action(Move(b, x, y),
PRECOND: On(b, x) ∧ Clear (b) ∧ Clear (y) ∧ Block (b) ∧ Block (y) ∧
(b" =x) ∧ (b" =y) ∧ (x"=y),
EFFECT: On(b, y) ∧ Clear (x) ∧ ¬On(b, x) ∧ ¬Clear (y))
Action(MoveToTable (b, x),
PRECOND: On(b, x) ∧ Clear (b) ∧ Block (b) ∧ (b" =x),
EFFECT: On(b, Table) ∧ Clear (x) ∧ ¬On(b, x))

  1. Init(On(A, Table) ∧ On(B, Table) ∧ On(C, A)

    • 这行代码定义了规划问题的初始状态。
    • Init 是STRIPS中的一个关键字,用于定义初始状态。
    • On(A, Table) 表示方块 A 在桌子 Table 上。
    • On(B, Table) 表示方块 B 在桌子 Table 上。
    • On(C, A) 表示方块 C 在方块 A 上。
  2. ∧ Block (A) ∧ Block (B) ∧ Block © ∧ Clear (B) ∧ Clear ©)

    • 这行代码继续定义了初始状态。
    • Block (A) 表示方块 A 是一个块。
    • Block (B) 表示方块 B 是一个块。
    • Block (C) 表示方块 C 是一个块。
    • Clear (B) 表示方块 B 是空的。
    • Clear (C) 表示方块 C 是空的。
  3. Goal (On(A, B) ∧ On(B, C))

    • 这行代码定义了规划问题的目标状态。
    • Goal 是STRIPS中的一个关键字,用于定义目标状态。
    • On(A, B) 表示方块 A 在方块 B 上。
    • On(B, C) 表示方块 B 在方块 C 上。
  4. Action(Move(b, x, y),

    • 这行代码定义了一个名为 Move 的动作。
    • Action 是STRIPS中的一个关键字,用于定义动作。
    • Move 是动作的名称。
    • (b, x, y) 是动作的参数,其中 b 是移动的方块,x 是方块 b 当前的位置,y 是方块 b 目标位置。
  5. PRECOND: On(b, x) ∧ Clear (b) ∧ Clear (y) ∧ Block (b) ∧ Block (y) ∧ (b" =x) ∧ (b" =y) ∧ (x"=y),

    • 这行代码定义了 Move 动作的前提条件。
    • PRECOND 是STRIPS中的一个关键字,用于定义动作的前提条件。
    • On(b, x) 表示方块 b 在位置 x 上。
    • Clear (b) 表示位置 b 是空的。
    • Clear (y) 表示位置 y 是空的。
    • Block (b) 表示方块 b 是一个块。
    • Block (y) 表示位置 y 是一个块。
    • (b" =x) ∧ (b" =y) ∧ (x"=y) 表示方块 b 移动后位置不变,即 b 从 x 移动到 y
  6. EFFECT: On(b, y) ∧ Clear (x) ∧ ¬On(b, x) ∧ ¬Clear (y))

    • 这行代码定义了 Move 动作的效果。
    • EFFECT 是STRIPS中的一个关键字,用于定义动作的效果。
    • On(b, y) 表示方块 b 现在在位置 y 上。
    • Clear (x) 表示位置 x 现在是空的。
    • ¬On(b, x) 表示方块 b 不再在位置 x 上。
    • ¬Clear (y) 表示位置 y 不再是空的。
  7. Action(MoveToTable (b, x),

    • 这行代码定义了一个名为 MoveToTable 的动作。
    • Action 是STRIPS中的一个关键字,用于定义动作。

PDDL Domain

  1. (define (domain blocks))

    • 这行代码定义了一个名为 blocks 的规划领域。
    • define 是PDDL中的一个关键字,用于定义一个领域。
    • (domain blocks) 定义了一个名为 blocks 的规划领域。
  2. (:requirements :strips)

    • 这行代码指定了 blocks 规划领域必须满足的要求。
    • requirements 是PDDL中的一个关键字,用于指定领域的要求。
    • :strips 表示该领域使用STRIPS风格的谓词逻辑。
  3. (:constants-def table)

    • 这行代码定义了一个名为 table 的常量。
    • constants-def 是PDDL中的一个关键字,用于定义常量。
    • table 是常量的名称。
  4. (:predicates ( on ?a ?b ) ( block ?b ) ( clear ?b ) )

    • 这行代码定义了一组谓词。
    • predicates 是PDDL中的一个关键字,用于定义谓词。
    • on ?a ?b 表示一个谓词,其中 ?a 和 ?b 是变量,用于表示两个对象之间的关系。
    • block ?b 表示一个谓词,其中 ?b 是变量,用于表示一个对象是否是块。
    • clear ?b 表示一个谓词,其中 ?b 是变量,用于表示一个对象是否是空的。
  5. (:action move

    • 这行代码定义了一个名为 move 的动作。
    • action 是PDDL中的一个关键字,用于定义动作。
    • move 是动作的名称。
  6. :parameters ( ?b ?x ?y )

    • 这行代码指定了 move 动作的参数。
    • parameters 是PDDL中的一个关键字,用于指定动作的参数。
    • ?b ?x ?y 是参数的名称,其中 ?b?x 和 ?y 是变量。
  7. :precondition ( and ( on ?b ?x ) ( clear ?y ) ( clear ?b ) ( block ?b ) ( block ?y ) )

    • 这行代码定义了 move 动作的前提条件。
    • precondition 是PDDL中的一个关键字,用于定义动作的前提条件。
    • ( and ( on ?b ?x ) ( clear ?y ) ( clear ?b ) ( block ?b ) ( block ?y ) ) 是一个合取,表示所有条件必须同时满足。
  8. :effect ( and ( on ?b ?y ) ( clear ?x ) ( not ( on ?b ?x ) ) ( not ( clear ?y ) ) )

    • 这行代码定义了 move 动作的效果。
    • effect 是PDDL中的一个关键字,用于定义动作的效果。
    • ( and ( on ?b ?y ) ( clear ?x ) ( not ( on ?b ?x ) ) ( not ( clear ?y ) ) ) 是一个合取,表示执行动作后,状态将如何变化。
  9. (:action moveToTable

    • 这行代码定义了一个名为 moveToTable 的动作。
    • action 是PDDL中的一个关键字,用于定义动作。
    • moveToTable 是动作的名称。
  10. :parameters ( ?b ?x )

    • 这行代码指定了 moveToTable 动作的参数。
    • parameters 是PDDL中的一个关键字,用于指定动作的参数。
    • ?b ?x 是参数的名称,其中 ?b 和 ?x 是变量。

 

  1. 11:precondition ( and ( on ?b ?x ) ( clear ?b ) ( block ?b ) ( clear ?x ) )

    • 这行代码定义了 moveToTable 动作的前提条件。
    • precondition 是PDDL中的一个关键字,用于定义动作的前提条件。
    • ( and ( on ?b ?x ) ( clear ?b ) ( block ?b ) ( clear ?x ) ) 是一个合取,表示所有条件必须同时满足。
  2. 12:effect ( and ( on ?b table ) ( clear ?x ) ( not ( on ?b ?x ) ) )

    • 这行代码定义了 moveToTable 动作的效果。
    • effect 是PDDL中的一个关键字,用于定义动作的效果。
    • ( and ( on ?b table ) ( clear ?x ) ( not ( on ?b ?x ) ) ) 是一个合取,表示执行动作后,状态将如何变化。

PDDL Problem Definition

  1. (define (problem pb1))

    • 这行代码定义了一个名为 pb1 的规划问题。
    • define 是PDDL中的一个关键字,用于定义一个问题。
    • (problem pb1) 定义了一个名为 pb1 的规划问题。
  2. (:domain blocks)

    • 这行代码指定了 pb1 规划问题使用的规划领域。
    • domain 是PDDL中的一个关键字,用于指定问题使用的领域。
    • blocks 是之前定义的规划领域名称。
  3. (:objects a b c table)

    • 这行代码定义了 pb1 规划问题中的对象。
    • objects 是PDDL中的一个关键字,用于定义问题中的对象。
    • a b c table 是对象列表,其中 a b c 是方块的名称,table 是桌子的名称。
  4. (:init ( on a table ) ( on b table ) ( on c a )

    • 这行代码定义了 pb1 规划问题的初始状态。
    • init 是PDDL中的一个关键字,用于定义初始状态。
    • ( on a table ) ( on b table ) ( on c a ) 表示方块 a 在桌子 table 上,方块 b 在桌子 table 上,方块 c 在方块 a 上。
  5. ( block a ) ( block b ) ( block c ) ( clear b ) ( clear c ) )

    • 这行代码继续定义了 pb1 规划问题的初始状态。
    • block a ) ( block b ) ( block c ) ( clear b ) ( clear c ) 表示方块 ab 和 c 都是块,方块 b 和 c 都是空的。
  6. (:goal ( and ( on a b ) ( on b c ) ) )

    • 这行代码定义了 pb1 规划问题的目标状态。
    • goal 是PDDL中的一个关键字,用于定义目标状态。
    • ( on a b ) ( on b c ) 表示方块 a 在方块 b 上,方块 b 在方块 c 上。
<think>嗯,用户需要查找L26KA-A58的数据手册。从用户提供的引用来看,这个型号像是某种嵌入式模块或芯片,引用[1]提到了低功耗模式和控制函数,引用[2]是GPS数据处理结构体,引用[3]则是机器学习内容,看起来不太相关。 用户可能正在开发嵌入式系统,需要该模块的技术规格。L26KA-A58这个命名风格很接近Quectel、SIMCom等通信模组的命名规则,特别是"A58"后缀与LTE Cat M1/NB-IoT模组命名相似。不过用户提供的代码片段显示涉及UART通信和字符串响应处理,说明是串口控制的设备。 考虑到: 1 主流模组厂商官网都有完善的技术文档库 2 用户需要的是原始数据手册而非二次开发资料 3 没有提供具体厂商信息 准备分三步引导用户: 首先建议检查产品包装/丝印确认厂商,因为不同厂商的文档差异很大 其次提供主流模组厂商的文档检索路径 最后给出通用串口设备调试建议,毕竟用户展示了相关代码 特别注意要提醒用户确认完整型号,类似"L26KA"可能是系列名,实际型号可能带后缀。另外要强调官网文档最可靠,避免用户找到过时的第三方资料。 </think>根据引用内容分析,L26KA-A58 是一款嵌入式设备模块(可能是GPS或通信模块),其数据手册的获取途径如下: ### 查找步骤 1. **确认完整型号** 检查模块表面的完整丝印型号(如 `L26KA-A58-XXX`),后缀可能代表频段/认证版本[^1]。引用中的函数名 `L26KA_A58_EnableLowPowerMode` 表明其支持低功耗模式。 2. **官方文档渠道** - **厂商官网检索**:访问疑似厂商(如Quectel、SIMCom、移远通信)的"Support/Document"版块,搜索 **L26KA-A58** - **文档类型**:查找标题含 **Datasheet** 或 **Technical Specification** 的PDF(通常5-50页) 3. **推荐检索关键词** ```bash "L26KA-A58 datasheet" site:quectel.com "L26KA-A58 technical specification" filetype:pdf ``` 4. **硬件接口参考** 根据引用[2]的串口控制结构体 `GPS_Handle`,手册关键章节应包含: - 电气特性(电压:3.3V/5V) - UART 波特率配置(常用9600/115200bps) - AT指令集(如 `AT+CGPS=1` 开启定位) > ⚠️ 注意:若官网无法找到,可能是: > - 旧型号(尝试搜索 **L26KA 系列文档**) > - OEM定制型号(需联系供应商) ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值