我无法理解HTN是什么。我认为我们希望将计划中的所有小动作分解为更高级别的计划。
例如:
"乘坐公共汽车"是一个HLA,即"去公共汽车","买票","坐下"等。
我错了吗?希望得到一个简单的解释。
答案 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:在公交车站等车巴士站,付钱给司机,然后骑到车站
算法本身非常简单。首先从任务或目标列表开始,例如从市区到公园,然后再找到一个空的计划列表:
我有一个博客系列,内容非常详细,包括源代码和更多示例(如果您需要更多细节):https://blog.inductorsoftware.com/blog/htnoverview