HTN(階層型タスクネットワーク)についてメモ
ちょっと勉強の一環でHTN(階層型タスクネットワーク)なるものを知ったのでメモ。
HTN(階層型タスクネットワーク)とは
Hierarchical Task Networkの略で、名前の通り階層型にタスクを分割しネットワークを構築したもの。
問題を細かく分解して、手順にすると解決しやすい!っていう発想です。多分・・・?
HTNを構成しているもの
HTNは「Task」で構築されています。
「Task」には「Compound Task」と「PrimitiveTask」の2種類があります。
Primitive Task
「Primitive Task」は単一のタスクのことで、「Operator」、「Effect」、「Condition」で構成されています。
「Operator」はHTNをもつエージェントなどの単一の処理です。
「Effect」は環境に与える影響です。
「Condition」は実行条件みたいなもので、これが有効な状態で「Primitive Task」が実行されます。
「Operator」、「Effect」、「Condition」は複数でもOKです。
(ex)
Primitive Task「バナナの実を食べる」
- Operator「バナナを食べる動作をする」
- Effect「バナナの皮がある」
- Condition「バナナがある、バナナの皮がむかれている」
Compound Task
「Compound Task」は「Method」で構成されたタスクです。
「Method」は「Condition」、「Primitive Task」、「Compound Task」で構成されています。
(ex)
Compound Task「バナナを食べる」
- Method「バナナの実を食べる」
- Method「バナナの皮ごと実を食べる」
Method「バナナの実を食べる」
- Condition:バナナの皮がむかれている
- Primitive Task「バナナの実を食べる」
Method「バナナの皮ごと実を食べる」
- Condition「バナナの皮がむかれていない」
- Primitive Task「バナナの皮ごと実を食べる」
こういった こういった構造のおかげで再帰的に表現できるわけですね~
Plan
Taskを行う順序をPlanと言います。また、Planを持つオブジェクトをPlannerと言います。
WorldState
HTNでの環境の定義をWorldStateと言います。
例えば、敵エージェントがTaskを持つとき、プレイヤーを認知しているか?みたいなのを定義したりします(列挙型などで定義するイメージです)。
Plannerから見た世界、みたいなものでしょうか。
Domain
Compound TaskやPrimitive Taskで構成された階層全体のことをDomainといいます。
Planの優先順位を変える
これは色々な方法がありそうです。
コストベースで優先順位を決めたりもできそうですね。でもこれだとソートに時間がかかりそうです。
解釈違いがあるかも・・・
詳しく知りたい方は以下のページを見てください!
参考にしたページ
はじめての階層型タスクネットワーク | GREE Engineers' Blog
http://www.gameaipro.com/GameAIPro/GameAIPro_Chapter12_Exploring_HTN_Planners_through_Example.pdf