トーフメモ

主にゲーム制作

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