1

我无法理解 HTN 是什么。我相信我们希望将计划的所有小动作分​​解为更高级别的计划。

例如:

“乘坐巴士”是“去巴士”、“买票”、“坐下”等的HLA。

我错了吗?希望有一个简单的解释。

4

2 回答 2

2

我知道这是一篇旧帖子,但我把头撞在墙上很长一段时间,希望我学到的东西能节省别人的时间。

概括地说,HTN 使用以抽象和替代方案为中心的非常人性化的规划方法来解决问题。

替代方案:让我们使用著名的 SHOP HTN Planner ( http://www.cs.umd.edu/projects/shop/description.html ) 中的旅行示例。想象一下,你问我如何从市中心到公园。我可能会说,“嗯,它在 2 公里之外,但如果外面环境好,我会步行过去。但是,如果下雨并且您有出租车费,我会乘坐出租车。否则,如果你有巴士票价,就坐巴士。” 你完成的一项抽象的事情,比如“从一个地方旅行到另一个地方”,在 HTN 中被称为“任务”。我为完成它而给出的 3 个替代方案在 HTN 中被称为“方法”。请注意,每种方法都有一个与之配套的“条件”:如果天气好,就步行,如果有车费,就坐出租车,等等。

抽象:请注意,这 3 种方法处于相当高的抽象级别。您可能会进一步问我如何完成“TakeABus”方法。我会说,“好吧,在'Downtown'巴士站等#1巴士,付给司机1美元,然后骑到'Park'站。” 这三个任务在 HTN 中称为“TakeABus”方法的“子任务”。在 HTN 中,方法通过分解为子任务来完成它们的工作。现在,这对人类来说是一个非常完整的答案,但如果我们正在与机器人交谈,则可能不是。在这种情况下,我们可能需要进一步将“PayTheDriver$1”的任务分解为“把手伸进口袋,拿一张 1 美元的钞票,递给司机”之类的东西。每一个都可以进一步分解,直到我们最终有了机器人可以做的事情。HTN 的最后一步,即实际完成的部分,称为“操作员”。在完成(并拥有操作员)之前,您需要了解的详细程度取决于您正在构建的系统类型。设计 HTN 模型的很大一部分是让您了解正确的抽象是什么。

因此,HTN 具有以下部分:

  • 世界状况:你在市中心。出租车费用为 2 美元。巴士票价为 1 美元。从市中心到公园的距离是2Km。任务:在世界上可以抽象地完成什么(可能有几种方法!):从 A 到 B。从 A 步行到 B。支付司机 X$。在 B 站等巴士 A。

  • 操作员:在没有进一步解释的情况下“刚刚完成”的抽象任务如何完成。他们实际上改变了世界的状态。如果您是人类,这些可能是操作员:支付司机 1 美元,乘坐 1 号巴士到“公园”站。如果您是机器人,这些可能是:将步进电机向前移动 100 步,打开聚光灯

  • 方法:当涉及多个步骤或更详细的计划时,如何完成抽象任务。它们有一个何时可以使用的条件以及如何完成它们的一组子任务: 方法:“从 A 到 B 的旅行” 条件:天气不好,你有巴士票价,子任务:在公共汽车站,付钱给司机,然后骑到车站

算法本身非常简单。您从一个任务或目标列表开始,例如从市中心到公园和一个空的计划列表:

  • 删除并从目标列表中的第一个目标开始
  • 看看是否有知道如何操作的操作员。如果是这样,将操作员添加到计划列表的末尾(因为操作员可以“完成”)并继续 #1
  • 看看是否有知道如何做的方法。如果是这样,将它们的子任务添加到我们的目标列表的前面并继续 #1 如果有多个方法,则复制世界的当前状态并独立运行每个算法。每一个成功完成的都将是一个不同的解决方案
  • 重复直到目标列表为空
  • 完成后,计划列表中的内容就是解决方案

我有一个博客系列非常详细地介绍了这一点,包括源代码和更多示例,如果您需要更多详细信息:https ://blog.inductorsoftware.com/blog/htnoverview

于 2019-07-31T23:10:15.547 回答
0

首先,分层任务网络是给定计划的解析器。在示例中,计划:

1 takebus
  1.1 gotobus
  1.2 buyticket
  1.3 sitdown

可以针对 HTN 网络进行测试,它会回答请求:“计划有效”和“执行需要 30 分钟”。另一个稍作修改的计划也可以针对 HTN 网络执行。

围绕 ICAPS 会议的规划社区正在研究如何构建分层任务网络。他们经常使用 Prolog 方言 PDDL 来创建复杂的行为树。例如,解析有关码头工人机器人问题的计划或解析来自积木世界域的计划。

其次,如果目标是为给定域找到最佳计划,则也使用术语分层任务网络规划。在这里,我们已经有了 PDDL 描述,我们有兴趣找到最短的计划。这在主要以自主游戏为目的的控制任务中很有用。

总的来说,可以说分层任务网络是每个认知架构的基本构建块是正确的。它结合了游戏人工智能编程、知识工程和启发式规划等学科。

于 2018-06-22T15:04:51.333 回答