Morikatron Engineer Blog

モリカトロン開発者ブログ

toioコアキューブ達に「鬼ごっこ」させよう

こんにちは、モリカトロンのAIエンジニアの銭です。

前回の「ウロチョロスに用いた集団行動の制御手法」に続いて、「ウロチョロス」の遊びの一つ「鬼ごっこ」の手法について紹介して行きたいと思います。

toioコアキューブ達に「鬼ごっこ」させよう

ウロチョロスの遊びの一つ「鬼ごっこ」とは、一台のコアキューブが「鬼」になって他の「人」を追いかけるのを眺めるだけの遊びです。

f:id:morika-sen:20200324173240g:plain:w480

長いバージョンの動画は以下になります。

「鬼ごっこ」の状態遷移図

f:id:morika-sen:20200324174220p:plain
f:id:morika-sen:20200325104014p:plain

主な行動は

  • 鬼が人を追いかける
  • 鬼が人の行き先を狙ってDashする
  • 人が鬼から逃げる
  • 鬼・人がランダムムーブする

この中に、「追いかけ」と「ランダムムーブ」は、前回紹介した Navigator の目標へナビゲーションする手法を使えば実現できます。 「Dash」は相手のウェイポイントを取って、一定時間後の相手の位置を予想して前進することでできます。

なので「鬼ごっこ」の中心になったのは「逃げる」という行動の手法であります。

鬼から逃げる手法

「逃げる」はヒューマンライク衝突回避アルゴリズム(略して「回避アルゴ」)に基づいて実装しました。

回避アルゴに基づく

理由としては以下の二つあります。

  • 回避アルゴの取得出来る情報が十分に使える
  • 回避と「逃げる」同時に出来ると、計算負荷が軽い

前回の記事 で解説した回避アルゴは目標に到達することを目指しています。主に3ステップがあります。

  1. 周りを「スキャン」して、可動域を計算します
  2. 可動域の中で、目標への距離と他の要素でウェイポイントを選択します
  3. 速度上限を計算します

「逃げる」を実装するには、ほぼ同じくこの3ステップを利用し、ステップ2の評価部分を変えれば出来ます。

目標への距離は遠い方が良い

当た前なんですが、目標へ移動する場合は近いウェイポイントが良いですが、 「逃げる」場合は遠い方が良いですね。

f:id:morika-sen:20200324174519p:plain:w450

回転のペナルティ

前回の記事と同じく、キューブはある方向に移動するために、回転しなければならないので、直線距離だけでウェイポイントを評価するのではなく、回転にかかる時間あるいは現在方向とウェイポイントへの方向の差も評価に入れました。

鬼を「回避」しない

下図の状況では、「視野」が鬼に塞げられたので、隅が一番遠いウェイポイントになっています。

f:id:morika-sen:20200324174617p:plain:w300

左上へ行けば逃げ出す可能性があるのに、諦めるのは惜しいです。見守りゲームとしての見た目も良くないですね。

なので、鬼を回避アルゴのスキャン対象から除外します。代わりに、鬼に自首しないように、ウェイポイントへの方向と鬼への方向が近いほど、ソフトペナルティを与えます。

このペナルティの決め方は決して安全な方向を保障することは出来ないのですが、遊びとしては逆にギリギリ逃げ出したりギリギリ捕まったりするのが良いと思います。

まとめ

シンプルな手法と遊びですが、大量な「人」が参加すると、意外とバリエーションや生き物感が感じられます。

回避アルゴの仕組みを利用し、ウェイポイントの評価方法を変更する考え方は、この「逃げる」の実践によって検証され、色々新しい手法に繋がりそうな気がしてきます。 一番直接なアイデアとしては、「複数の鬼から逃げる」でしょうね。