我无法理解 HTN 是什么。我相信我们希望将计划中的所有小行动分解为更高层次的计划。
例如:
“乘坐巴士”是“去巴士”、“买票”、“坐下”等的 HLA。
我错了吗?希望有一个简单的解释。
我知道这是一篇旧帖子,但我很长一段时间都在用头撞墙,希望我学到的东西能节省其他人的时间。
\n\n概括地说,HTN 使用一种以抽象和替代方案为中心的非常人性化的规划方法来解决问题。
\n\n替代方案:让\xe2\x80\x99s 使用著名的 SHOP HTN Planner ( http://www.cs.umd.edu/projects/shop/description.html )中的旅行示例。想象一下你问我如何从市中心到公园。我可能会说,\xe2\x80\x9c嗯,距离有2公里,但是,如果外面很好,我会步行过去。但是,如果下雨并且你有出租车费,我就乘坐出租车。否则,如果你有公交车费,就坐公交车吧。\xe2\x80\x9d 你完成的一个抽象的事情,比如 \xe2\x80\x9c 从一个地方旅行到另一个地方\xe2\x80\x9d 在 HTN 中被称为 \xe2 \x80\x9c任务\xe2\x80\x9d。我给出的 3 个替代方案在 HTN 中称为 \xe2\x80\x9cMethods\xe2\x80\x9d。请注意,每个方法都有一个与之相伴的 \xe2\x80\x9cCondition\xe2\x80\x9d :如果天气好,则步行;如果有车费,则乘坐出租车,等等。
\n\n抽象:请注意,这 3 个方法处于相当高的抽象级别。您可能会进一步问我如何完成 \xe2\x80\x9cTakeABus\xe2\x80\x9d 方法。我\xe2\x80\x99d 会说,\xe2\x80\x9c嗯,在\xe2\x80\x98Downtown\xe2\x80\x99 巴士站等#1 巴士,付给司机 1 美元,然后乘车到\xe2\x80\x98Park\xe2\x80\x99 停止。\xe2\x80\x9d 这三个任务在 HTN 中称为 \xe2\x80\x9cSubtasks\xe2\x80\x9d of the \xe2\x80\x9cTakeABus\ xe2\x80\x9d 方法。在 HTN 中,方法通过分解为子任务来完成它们的工作。现在,这对于人类来说是一个相当完整的答案,但如果我们与机器人交谈,则可能不是。在这种情况下,我们可能需要进一步将 \xe2\x80\x9cPayTheDriver$1\xe2\x80\x9d 的任务分解为类似 \xe2\x80\x9c 的任务:伸进你的口袋,抓起一张 1 美元的钞票,交给 driver\xe2\x80 \x9d。其中每一个都可以进一步分解,直到我们最终找到机器人可以做的事情。HTN 的最后一步,即实际完成的部分,称为 \xe2\x80\x9cOperator\xe2\x80\x9d。在完成(并拥有操作员)之前您需要了解的详细程度取决于您正在构建的系统类型。设计 HTN 模型的一个重要部分是了解什么是正确的抽象。
\n\n因此,HTN 具有以下部分:
\n\n世界现状:你在市中心。出租车费为 2 美元。巴士票价为 1 美元。从市中心到公园的距离是 2 公里。\n任务: 世界上可以抽象地完成什么(可能有多种方法可以做到!): 从 A 旅行到 B。从 A 步行到 B。支付司机 X 美元。在 B 站等车 A。
运算符:当抽象任务可以\xe2\x80\x9c 完成时\xe2\x80\x9d 无需进一步解释,如何完成抽象任务。他们实际上改变了世界状况。如果您是人类,这些可能是运营商:支付司机 1 美元,乘坐 1 号巴士到“公园”站。如果您是机器人,这些可能是:将步进电机向前移动 100 步,打开聚光灯
方法:当涉及多个步骤或更详细的计划时,如何完成抽象任务。它们有一个何时可以使用的条件以及一组如何完成它们的子任务: 方法:“从 A 旅行到 B” 条件:天气不好并且您有公共汽车票价,子任务:在公交车站,付钱给司机,然后乘车到车站
算法本身非常简单。您从一个任务或目标列表(例如从市中心到公园)和一个空的计划列表开始:
\n\n我有一个博客系列,非常详细地介绍了这一点,包括源代码和更多示例(如果您需要更多详细信息): https: //blog.inductorsoftware.com/blog/htnoverview
\n