AI中的分层任务网络(HTN)

时间:2018-06-09 07:33:22

标签: planning

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

例如:

  

"乘坐公共汽车"是一个HLA,即"去公共汽车","买票","坐下"等。

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

2 个答案:

答案 0 :(得分:0)

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

1 takebus
  1.1 gotobus
  1.2 buyticket
  1.3 sitdown
可以在HTN网络上测试

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

ICAPS会议的计划制定者正在做的事情是弄清楚如何建立分层的任务网络。他们经常使用Prolog方言PDDL创建复杂的行为树。例如,要解析有关码头工人机器人问题的计划,或者要解析来自积木世界领域的计划。

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

总体而言,正确地说,分层任务网络是每个认知体系结构的基本构建块。它结合了游戏AI编程,知识工程和启发式计划等学科。

答案 1 :(得分:0)

我知道这是一个旧帖子,但是我把头撞在墙上很久了,希望我学到的东西可以节省别人的时间。

广义上,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公交车到“ Park”站。如果您是机器人,则可能是:将步进电机向前移动100步,打开聚光灯

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

算法本身非常简单。首先从任务或目标列表开始,例如从市区到公园,然后再找到一个空的计划列表:

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

我有一个博客系列,内容非常详细,包括源代码和更多示例(如果您需要更多细节):https://blog.inductorsoftware.com/blog/htnoverview