以下、図面を参照して本開示の実施形態について説明する。
1.マルチエージェントシミュレーションシステムの概要
図1乃至図3を用いて、本開示の実施形態に係るマルチエージェントシミュレーションシステム(Multi-Agent Simulation System)の概要を説明する。以下、マルチエージェントシミュレーションシステムをMASシステムと省略して表記する。
1-1.MASシステムの概要
図1は、本実施形態のMASシステム100の概略構成を示す。MASシステム100は、複数のエージェント4を相互作用させることによって、シミュレーションの対象であるシミュレーション対象世界2をシミュレーションする。シミュレーション対象世界2は特に限定されない。例えば、シミュレーション対象世界2は、人が移動体(例えば、ロボットや車両)と共存し、移動体を用いた様々なサービスの提供を受けることができる世界である。例えば、シミュレーション対象世界2は、一つの街である。シミュレーション対象世界2において提供されるサービスとしては、例えば、自律運転車両を用いたオンデマンドバスや定期運行型バスなどのモビリティサービスや、自律移動型のロボットを用いて荷物を配送する物流サービスを挙げることができる。
シミュレーション対象世界2には、多数且つ多種類のエージェント4が存在する。シミュレーション対象世界2を構成するエージェント4には、移動物体を表すエージェント4と、定置物体を表すエージェント4とが含まれる。エージェント4として表される移動物体としては、歩行者、ロボット、低速モビリティ、車両、実在の人がVRシステムを用いて参加する歩行者、エレベータ等が例示される。エージェント4として表される定置物体としては、カメラを含むセンサや自動ドア等が例示される。
図1に示される例では、シミュレーション対象世界2には3つのエージェント4A、4B、4Cが存在する。このうちエージェント4A、4Bはロボットを表し、エージェント4Cは歩行者を表している。なお、エージェント4Aとエージェント4Bとは、ロボットという同じカテゴリーに属するが、大きさや形状、走行速度や動作などにおいて違いがある。よって、エージェント4Aとエージェント4Bとは、歩行者であるエージェント4Cがそれらから取得できる視覚情報において違いがある。
以下の説明において、仮想の世界であるシミュレーション対象世界2を、実世界と区別して仮想世界2と呼ぶ場合がある。
MASシステム100は、複数のエージェントシミュレータ200を備える。エージェントシミュレータ200は、エージェント4毎に設けられ、各エージェント4のシミュレーションを行う。図1に示される例では、エージェントシミュレータ200-A、200-B、200-Cが、エージェント4A、4B、4Cのそれぞれに対して設けられ、エージェント4A、4B、4Cのそれぞれのシミュレーションを行う。各エージェントシミュレータ200は、対象とするエージェントの種類に応じた構成の違いを有している。例えば、ロボットに関するエージェント4A、4Bのエージェントシミュレータ200-A、200-Bは互いに類似した構成を有しているが、歩行者に関するエージェント4Cのエージェントシミュレータ200-Cは、エージェントシミュレータ200-A、200-Bとは異なる構成を有している。エージェント4の種類別のエージェントシミュレータ200の構成については追って詳述する。
複数のエージェントシミュレータ200は、メッセージの交換によって複数のエージェント4を相互作用させながら複数のエージェント4の状態をシミュレーションする。エージェントシミュレータ200間で交換されるメッセージは、エージェント4の仮想世界2内での位置・移動に関する情報(移動情報)を含む。移動情報は、エージェントの位置・移動に関する現状および将来計画に関する情報を含む。現状に関する情報とは、例えば、現在時刻における位置、方向、速度、加速度である。将来計画に関する情報とは、例えば、将来時刻における位置と、方向と、速度と、加速度のリストである。以下、エージェントシミュレータ200間で交換されるエージェント4の位置・移動に関するメッセージを移動メッセージと称する。
各エージェントシミュレータ200は、シミュレーションの対象である対象エージェント(自エージェント)の状態を周囲のエージェントの状態に基づいて演算する。周囲エージェントは、自エージェントの周囲に存在し、自エージェントと相互作用する相互作用エージェントである。そして、周囲エージェントの状態を表す情報が移動メッセージである。各エージェントシミュレータ200は、他のエージェントシミュレータ200と移動メッセージを交換しあうことで、周囲エージェントの状態を把握することができる。
図1に示す例では、エージェントシミュレータ200-Aは、エージェントシミュレータ200-B、200-Cから受け取った移動メッセージからエージェント4B、4Cの状態を把握し、エージェント4B、4Cの状態に基づいてエージェント4Aの状態を更新する。そして、エージェントシミュレータ200-Aは、更新されたエージェント4Aの状態を表す移動メッセージをエージェントシミュレータ200-B、200-Cに送信する。同様な処理はエージェントシミュレータ200-B、200-Cにおいても行われる。これによりエージェント4A、4B、4C同士を相互作用させながら各エージェント4A、4B、4Cの状態がシミュレーションされる。
エージェントシミュレータ200によるエージェントの状態の更新には、一定の時間間隔で更新する方法と、何らかのイベントが検知された場合に更新する方法とがある。ただし、後者の方法でも、あまりに長時間状態が更新されないと周囲エージェントへの影響が大きいことから、一定時間間隔ごとに状態を更新するよう強制的にイベントを発生させることが行われる。エージェントシミュレータ200によるエージェントの状態の更新の時間間隔は、時間粒度と呼ばれる。
MASシステム100によるシミュレーションの対象である仮想世界2には、多数のエージェント4が存在する。ただし、それらの時間粒度は同一ではない。もし、全てのエージェント4の時間粒度が同一であるとすると、MASの実行性能を維持するためには、各エージェント4の時間粒度は状態の変化速度が最も速い対象に合わせて設定する必要がある。しかし、この場合、対象の状態の変化速度の遅いエージェント4では、必要な時間粒度よりも小さい時間粒度で演算が行われることになる。MASでは、エージェント4間の相互作用は移動メッセージの交換により行われるため、時間粒度が小さくなれば、それだけ移動メッセージの送信時間間隔も短くなる。その結果、移動メッセージの量がシステム全体として増大し、計算資源を無駄に消費することになる。
そこで、MASシステム100では、エージェント4の時間粒度はエージェント4の種類によって異なっていてもよい。例えば、現実の世界における歩行者の歩行速度は1m/sec程度である。ゆえに、エージェント4が歩行者の場合、時間粒度は1secオーダー或いは100msecオーダーでよい。一方、エージェント4がロボットの場合、大きくても100msecオーダーの時間粒度、好ましくは10msecオーダーの時間粒度が欲しい。これは、ロボットには歩行者よりも素早く正確な動作が求められるためである。現実の世界では、ロボットに要求される動作速度が速いほど、短い時間間隔で制御しないと制御自体が成立しなくなる。このことはシミュレーションにも当てはまり、要求される動作速度に応じて時間粒度を小さくしなければ、求められているロボットの動作をシミュレーションすることができない。
図1に示す例では、仮想世界2におけるロボットエージェント4A、4Bの時間粒度は20msecであり、歩行者エージェント4Cの時間粒度は100msecとされている。各エージェントシミュレータ200-A、200-B、200-Cは、担当するエージェント4A、4B、4Cの時間粒度に応じた制御周期でシミュレーションを実行する。なお、図1に示す2つのロボットエージェント4A、4Bの時間粒度は同一であるが、同じ種類のエージェントであっても、その目的によって時間粒度に違いが設けられる場合もある。
MASシステム100では、エージェントシミュレータ200間の移動メッセージの交換によってシミュレーションが実行される。ただし、シミュレーションのための移動メッセージの交換は、エージェントシミュレータ200間で直接は行われない。MASシステム100は、各エージェントシミュレータ200と通信するセンターコントローラ300を備える。移動メッセージは、センターコントローラ300により中継されてエージェントシミュレータ200間で交換される。
図1に示す例では、エージェントシミュレータ200-Aから出力された移動メッセージはセンターコントローラ300が受信する。そして、センターコントローラ300は、エージェントシミュレータ200-B、200-Cに対してエージェントシミュレータ200-Aの移動メッセージを送信する。同様に、エージェントシミュレータ200-Bの移動メッセージは、センターコントローラ300によってエージェントシミュレータ200-A、200-Cに送信され、エージェントシミュレータ200-Cの移動メッセージは、センターコントローラ300によってエージェントシミュレータ200-A、200-Bに送信される。
1-2.MASシステムにおける移動メッセージの交換
図2は、MASシステム100において行われる移動メッセージの交換の概要を示す。MASシステム100では、各エージェントシミュレータ200は、エージェントシミュレータ200間で同一の時間間隔ではなく、シミュレーションするエージェントの時間粒度に応じた時間間隔で移動メッセージを送信する。各エージェント4A、4B、4Cの時間粒度が図1に示す通りであるとすると、エージェントシミュレータ200-A、200-Bは20msecの時間間隔で移動メッセージを送信し、エージェントシミュレータ200-Cは100msecの時間間隔で移動メッセージを送信する。
エージェントシミュレータ200-A、200-B、200-Cから移動メッセージを受信したセンターコントローラ300は、受信した移動メッセージをそのままの時間間隔でブロードキャストによって送信する。これにより、エージェントシミュレータ200-Aには、20msecの時間間隔でエージェントシミュレータ200-Bからの移動メッセージが送信されるとともに、100msecの時間間隔でエージェントシミュレータ200-Cからの移動メッセージが送信される。同様に、エージェントシミュレータ200-Bには、20msecの時間間隔でエージェントシミュレータ200-Aからの移動メッセージが送信されるとともに、100msecの時間間隔でエージェントシミュレータ200-Cからの移動メッセージが送信される。また、エージェントシミュレータ200-Cには、20msecの時間間隔でエージェントシミュレータ200-A、200-Bからの移動メッセージが送信される。
以上のように、MASシステム100では、各エージェントシミュレータ200は、エージェントシミュレータ200間で同一の送信時間間隔ではなく、シミュレーションするエージェント4の時間粒度に応じた送信時間間隔で移動メッセージを送信する。これにより、MASの実行性能を維持しながら、エージェントシミュレータ200間で交換するメッセージの量の増大を抑えることができる。また、センターコントローラ300は、受信した移動メッセージをそのままの時間間隔で送信するので、古い移動メッセージが新しい移動メッセージよりも先に送信先のエージェントシミュレータ200に届くことを防ぐことができる。さらに、センターコントローラ300による移動メッセージの送信方法としてブロードキャストが用いられることで、センターコントローラ300の負荷は低減される。
ところで、現実の世界では、ある実体の現在の状態は、相互作用する他の実体の現在の状態との関係で決まる。よって、仮想世界2におけるエージェントの現在の状態をシミュレーションするためには、相互作用する周囲エージェントの現在の状態に関する情報が欲しい。しかし、MASシステム100では、担当するエージェントの時間粒度の違いによって、移動メッセージを送信する送信時間間隔にエージェントシミュレータ200間で違いがある。また、移動メッセージの送信は離散的に行われるため、送信時間間隔が同一のエージェントシミュレータ200間でも、移動メッセージの交換のタイミングがずれてしまう場合がある。さらに、CPUの処理能力やネットワーク容量に依存して、センターコントローラ300を介したエージェントシミュレータ200間の移動メッセージの送受信に時間遅れが生じる場合もある。
そこで、MASシステム100では、担当する自エージェントの現在の状態を各エージェントシミュレータ200がシミュレーションする際、以下の第1乃至第6の処理が実行される。
第1の処理では、エージェントシミュレータ200は、センターコントローラ300から送信される移動メッセージに基づき、移動メッセージの取得時刻における周囲エージェントの状態を生成する。第2の処理では、エージェントシミュレータ200は、第1の処理で生成された周囲エージェントの状態をメモリに記憶する。
第3の処理では、エージェントシミュレータ200は、第2の処理でメモリに記憶された周囲エージェントの過去の状態から周囲エージェントの現在の状態を推定する。メモリに記憶された周囲エージェントの過去の状態の数が2つ以上の場合、エージェントシミュレータ200は、周囲エージェントの最新の2つ以上の過去の状態に基づく線形外挿によって周囲エージェントの現在の状態を推定する。メモリに記憶された周囲エージェントの過去の状態の数が1つの場合、エージェントシミュレータ200は、周囲エージェントの唯一の過去の状態を周囲エージェントの現在の状態として推定する。
第4の処理では、エージェントシミュレータ200は、第3の処理で推定された周囲エージェントの現在の状態を用いて自エージェントの現在の状態をシミュレーションする。第5の処理では、エージェントシミュレータ200は、第4の処理でシミュレーションされた自エージェントの現在の状態に基づいて移動メッセージを作成する。そして、第6の処理では、エージェントシミュレータ200は、第5の処理で作成された移動メッセージをセンターコントローラ300に送信する。
MASシステム100では、以上のような処理が各エージェントシミュレータ200で実行される。これにより、センターコントローラ300を介したエージェントシミュレータ200間の移動メッセージの送受信に時間遅れがあるとしても、各エージェントの現在の状態を精度よくシミュレーションすることができる。また、移動メッセージの送信タイミングにエージェントシミュレータ200間でずれがあるとしても、各エージェントの現在の状態を精度よくシミュレーションすることができる。さらに、エージェント間の時間粒度の違いによって移動メッセージを送信する送信時間間隔にエージェントシミュレータ200間で違いがあるとしても、各エージェントの現在の状態を精度よくシミュレーションすることができる。
1-3.メッセージ交換の一例
図3は、MASシステム100において行われるエージェントシミュレータ200-A、200-B、200-C間の移動メッセージの交換の一例を示す。ただし、説明を簡単にするため、エージェントシミュレータ200-A、200-B、200-C間で移動メッセージの送受信を中継するセンターコントローラ300は省略されている。各エージェント4A、4B、4Cの時間粒度が図1に示す通りであるとすると、エージェントシミュレータ200-A、200-Bは20msecの時間間隔で移動メッセージを送信し、エージェントシミュレータ200-Cは100msecの時間間隔で移動メッセージを送信する。
ここでは、エージェントシミュレータ200-Aとエージェントシミュレータ200-Bとの間には12msecの時間遅れが認められている。エージェントシミュレータ200-Aとエージェントシミュレータ200-Cとの間には14msecの時間遅れが認められている。そして、エージェントシミュレータ200-Bとエージェントシミュレータ200-Cとの間には10msecの時間遅れが認められている。
各エージェントシミュレータ200-A、200-B、200-Cは、時刻t=0でシミュレーションを開始する。ただし、エージェントシミュレータ200-A、200-B、200-Cとして機能するコンピュータの内部時計の時間は必ずしも一致していない。このため、エージェントシミュレータ200-A、200-B、200-C間でシミュレーションの開始時刻にずれが生じる場合がある。MASシステム100では、シミュレーションの開始時刻のずれを前提にして、エージェントシミュレータ200-A、200-B、200-C間の移動メッセージの交換が行われる。
以下の説明では、簡単のため、A[t]は時刻tにおけるエージェント4Aの状態を表す移動メッセージを意味する。B[t]は時刻tにおけるエージェント4Bの状態を表す移動メッセージを意味する。C[t]は時刻tにおけるエージェント4Cの状態を表す移動メッセージである。以下、エージェントシミュレータ200-A、200-B、200-Cによる処理を時系列に説明する。
まず、各エージェントシミュレータ200-A、200-B、200-Cから各エージェント4A、4B、4Cの初期状態を表す移動メッセージA[0]、B[0]、C[0]が送信される。初期状態では、各エージェントシミュレータ200-A、200-B、200-Cは周囲エージェントの存在を認識できないため、周囲エージェントが存在しない仮定の下で移動メッセージA[0]、B[0]、C[0]を生成する。
エージェントシミュレータ200-Aの次回の送信時刻は時刻t=20である。エージェントシミュレータ200-Aは、時刻t=20の前に移動メッセージB[0]及びC[0]を受信する。エージェントシミュレータ200-Aは、移動メッセージB[0]から時刻t=0におけるエージェント4Bの状態を認識し、エージェント4Bの時刻t=0の状態をエージェント4Bの現在の状態として推定する。また、エージェントシミュレータ200-Aは、移動メッセージC[0]から時刻t=0におけるエージェント4Cの状態を認識し、エージェント4Cの時刻t=0の状態をエージェント4Cの現在の状態として推定する。エージェントシミュレータ200-Aは、推定されたエージェント4B、4Cの状態を用いたシミュレーションによって、エージェント4Aの時刻t=20における状態を決定し、移動メッセージA[20]を送信する。
エージェントシミュレータ200-Aの次回の送信時刻は時刻t=40である。エージェントシミュレータ200-Aは、時刻t=40の前にエージェントシミュレータ200-Bから新たに移動メッセージB[20]を受信するが、エージェントシミュレータ200-Cからは新たな移動メッセージは受信していない。エージェントシミュレータ200-Aは、移動メッセージB[20]から時刻t=20におけるエージェント4Bの状態を認識し、時刻t=0と時刻t=20のエージェント4Bの状態に基づく線形外挿によってエージェント4Bの現在の状態を推定する。また、エージェントシミュレータ200-Aは、エージェント4Cの時刻t=0の状態をエージェント4Cの現在の状態として推定する。エージェントシミュレータ200-Aは、推定されたエージェント4B、4Cの状態を用いたシミュレーションによって、エージェント4Aの時刻t=40における状態を決定し、移動メッセージA[40]を送信する。
エージェントシミュレータ200-Aの次回の送信時刻は時刻t=60である。エージェントシミュレータ200-Aは、時刻t=60の前にエージェントシミュレータ200-Bから新たに移動メッセージB[40]を受信するが、エージェントシミュレータ200-Cからは新たな移動メッセージは受信していない。エージェントシミュレータ200-Aは、時刻t=20と時刻t=40のエージェント4Bの状態に基づく線形外挿によってエージェント4Bの現在の状態を推定する。また、エージェントシミュレータ200-Aは、エージェント4Cの時刻t=0の状態をエージェント4Cの現在の状態として推定する。エージェントシミュレータ200-Aは、推定されたエージェント4B、4Cの状態を用いたシミュレーションによって、エージェント4Aの時刻t=60における状態を決定し、移動メッセージA[60]を送信する。
エージェントシミュレータ200-Aの次回の送信時刻は時刻t=80である。エージェントシミュレータ200-Aは、時刻t=80の前にエージェントシミュレータ200-Bから新たに移動メッセージB[60]を受信するが、エージェントシミュレータ200-Cからは新たな移動メッセージは受信していない。エージェントシミュレータ200-Aは、時刻t=40と時刻t=60のエージェント4Bの状態に基づく線形外挿によってエージェント4Bの現在の状態を推定する。また、エージェントシミュレータ200-Aは、エージェント4Cの時刻t=0の状態をエージェント4Cの現在の状態として推定する。エージェントシミュレータ200-Aは、推定されたエージェント4B、4Cの状態を用いたシミュレーションによって、エージェント4Aの時刻t=80における状態を決定し、移動メッセージA[80]を送信する。
エージェントシミュレータ200-Aの次回の送信時刻は時刻t=100である。エージェントシミュレータ200-Aは、時刻t=100の前にエージェントシミュレータ200-Bから新たに移動メッセージB[80]を受信するが、エージェントシミュレータ200-Cからは新たな移動メッセージは受信していない。エージェントシミュレータ200-Aは、時刻t=60と時刻t=80のエージェント4Bの状態に基づく線形外挿によってエージェント4Bの現在の状態を推定する。また、エージェントシミュレータ200-Aは、エージェント4Cの時刻t=0の状態をエージェント4Cの現在の状態として推定する。エージェントシミュレータ200-Aは、このように推定されたエージェント4B、4Cの状態を用いたシミュレーションによって、エージェント4Aの時刻t=100における状態を決定し、移動メッセージA[100]を送信する。
エージェントシミュレータ200-Aの次回の送信時刻は時刻t=120である。エージェントシミュレータ200-Aは、時刻t=120の前にエージェントシミュレータ200-Bから新たに移動メッセージB[100]を受信し、エージェントシミュレータ200-Cからも新たに移動メッセージC[100]を受信する。エージェントシミュレータ200-Aは、移動メッセージB[100]から時刻t=100におけるエージェント4Bの状態を認識し、時刻t=80と時刻t=100のエージェント4Bの状態に基づく線形外挿によってエージェント4Bの現在の状態を推定する。また、エージェントシミュレータ200-Aは、移動メッセージC[100]から時刻t=100におけるエージェント4Cの状態を認識し、時刻t=0と時刻t=100のエージェント4Cの状態に基づく線形外挿によってエージェント4Cの現在の状態を推定する。エージェントシミュレータ200-Aは、このように推定されたエージェント4B、4Cの状態を用いたシミュレーションによって、エージェント4Aの時刻t=120における状態を決定し、移動メッセージA[120]を送信する。
エージェントシミュレータ200-Bの処理は、エージェントシミュレータ200-Aの場合と同様である。エージェントシミュれーた200-Bは、エージェント4Bの時刻t=20、40、60、80、100、120、140における状態を決定する。そして、エージェントシミュレータ200-Bは、それぞれの時刻の状態を表す移動メッセージB[20]、B[40]、B[60]、B[80]、B[100]、B[120]、B[140]を送信する。
エージェントシミュレータ200-Cの次回の送信時刻は時刻t=100である。エージェントシミュレータ200-Cは、時刻t=100の前にエージェントシミュレータ200-Aから移動メッセージA[0]、A[20]、A[40]、A[60]、A[80]を受信する。エージェントシミュレータ200-Cは、最新の2つの過去の状態、すなわち、時刻t=60と時刻t=80のエージェント4Aの状態に基づく線形外挿によってエージェント4Aの現在の状態を推定する。また、エージェントシミュレータ200-Cは、時刻t=100の前にエージェントシミュレータ200-Bから移動メッセージB[0]、B[20]、B[40]、B[60]、B[80]を受信する。エージェントシミュレータ200-Cは、最新の2つの過去の状態、すなわち、時刻t=60と時刻t=80のエージェント4Bの状態に基づく線形外挿によってエージェント4Bの現在の状態を推定する。エージェントシミュレータ200-Cは、このように推定されたエージェント4A、4Bの状態を用いたシミュレーションによって、エージェント4Cの時刻t=100における状態を決定する。そして、エージェントシミュレータ200-Cは、移動メッセージC[100]を送信する。
2.メッセージフィルタリング
各エージェントシミュレータ200-i(i=1~N)に割り当てられるエージェント4を、以下、「対象エージェント4i」と呼ぶ。ここで、Nは、エージェントシミュレータ200の総数であり、2以上の整数である。各エージェントシミュレータ200-iは、割り当てられた対象エージェント4iのシミュレーションを行う。上述の通り、シミュレーションにはメッセージが用いられる。便宜上、センターコントローラ300からエージェントシミュレータ200-iに配信されるメッセージを、以下、「配信メッセージMD-i」と呼ぶ。一方、エージェントシミュレータ200-iにおけるシミュレーションの結果得られる、対象エージェント4iの状態を示すメッセージを、以下、「結果メッセージMR-i」と呼ぶ。
センターコントローラ300は、エージェントシミュレータ200-iに対して配信メッセージMD-iを配信する。エージェントシミュレータ200-iに配信される配信メッセージMD-iは、対象エージェント4iと異なる少なくとも1つの他エージェント4j(j=1~N、j≠i)の状態を示す少なくとも1つの結果メッセージMR-jを含む。エージェントシミュレータ200-iは、配信メッセージMD-iで示される他エージェント4jの状態に基づいて、対象エージェント4iのシミュレーションを行って、対象エージェント4iの状態を決定する。そして、エージェントシミュレータ200-iは、シミュレーションの結果得られた対象エージェント4iの状態を示す結果メッセージMR-iをセンターコントローラ300に送信する。センターコントローラ300は、エージェントシミュレータ200-iから受け取る結果メッセージMR-iを、新たな配信メッセージMDとして配信(転送)する。
このような構成において、センターコントローラ300から各エージェントシミュレータ200-iに全てのメッセージが配信されると、センターコントローラ300からエージェントシミュレータ200全体への通信量が増大する。通信量の不必要な増大は、通信リソースの不必要な消費を招く。そこで、本実施の形態に係るセンターコントローラ300は、通信量の不必要な増大を抑制するために、配信メッセージMDとして配信(転送)する結果メッセージMRを適宜選別する処理を行う。このような処理を、以下、「メッセージフィルタリング」と呼ぶ。
以下、本実施の形態に係るメッセージフィルタリングについて説明する。特に、時間的観点に基づくメッセージフィルタリングと、空間的観点に基づくメッセージフィルタリングの二種類について詳しく説明する。
2-1.時間的観点に基づくメッセージフィルタリング
2-1-1.概要
まず、時間的観点に基づくメッセージフィルタリングについて説明する。上述の通り、複数のエージェントシミュレータ200は、処理時間間隔(時間粒度)の異なるものを含み得る。この場合、処理時間間隔が比較的長いエージェントシミュレータ200に対しては、全ての結果メッセージMRを配信メッセージMDとして配信する必要は無く、メッセージフィルタリングを行ってもよい。
一例として、上記図3で示されたケースを考える。エージェントシミュレータ200-Aの処理時間間隔TAは、20msecである。エージェントシミュレータ200-Bの処理時間間隔TBは、20msecである。エージェントシミュレータ200-Cの処理時間間隔TCは、100msecである。つまり、エージェントシミュレータ200-Cの処理時間間隔TCは、比較的長い。そのエージェントシミュレータ200-Cは、エージェントシミュレータ200-Aから移動メッセージA[0]、A[20]、A[40]、A[60]、A[80]を受け取り、エージェントシミュレータ200-Bから移動メッセージB[0]、B[20]、B[40]、B[60]、B[80]を受け取る。しかしながら、対象エージェント4Cのシミュレーションに用いられるのは、移動メッセージA[60]、A[80]、B[60]、B[80]である。その他の移動メッセージA[0]、A[20]、A[40]、B[0]、B[20]、B[40]は、シミュレーションには不要である。すなわち、処理時間間隔TCの長いエージェントシミュレータ200-Cに対して移動メッセージA[0]、A[20]、A[40]、B[0]、B[20]、B[40]を配信することは、通信量を不必要に増大させている。
そこで、センターコントローラ300は、図4に示されるようにメッセージフィルタリングを行う。すなわち、センターコントローラ300は、エージェントシミュレータ200-Aから移動メッセージA[0]、A[20]、A[40]、A[60]、A[80]を受信するが、それらのうち移動メッセージA[0]、A[20]、A[40]をエージェントシミュレータ200-Cには配信せず、移動メッセージA[60]、A[80]を選択的にエージェントシミュレータ200-Cに配信(転送)する。同様に、センターコントローラ300は、エージェントシミュレータ200-Bから移動メッセージB[0]、B[20]、B[40]、B[60]、B[80]を受信するが、それらのうち移動メッセージB[0]、B[20]、B[40]をエージェントシミュレータ200-Cには配信せず、移動メッセージB[60]、B[80]を選択的にエージェントシミュレータ200-Cに配信(転送)する。これにより、通信量の不必要な増大が抑制され、通信リソースの不必要な消費が抑制される。尚、このようなメッセージフィルタリングが行われても、エージェントシミュレータ200-Cにおけるシミュレーション精度に変わりはない。
一般化すると次の通りである。図5に示される2つのエージェントシミュレータ200、つまり、第1エージェントシミュレータ200-Xと第2エージェントシミュレータ200-Yについて考える。第1エージェントシミュレータ200-Xは、第1処理時間間隔TXで第1エージェント(対象エージェント)4Xのシミュレーションを行う。一方、第2エージェントシミュレータ200-Yは、第2処理時間間隔TYで第2エージェント(対象エージェント)4Yのシミュレーションを行う。第2処理時間間隔TYは、第1処理時間間隔TXよりも長い。この場合、センターコントローラ300は、第2エージェントシミュレータ200-Yに対して単位時間当たりに配信する第2配信メッセージMD-Yの数を、第1エージェントシミュレータ200-Xに対して単位時間当たりに配信する第1配信メッセージMD-Xの数よりも少なく設定する。これにより、通信量の不必要な増大が抑制される。
より詳細には、第1エージェントシミュレータ200-Xは、第1エージェント4Xに関する第1結果メッセージMR-Xを、第1処理時間間隔TXに応じた第1頻度でセンターコントローラ300に送信する。センターコントローラ300は、第1処理時間間隔TXに応じた第1頻度で第1結果メッセージMR-Xを受信する。しかしながら、処理時間間隔の長い第2エージェントシミュレータ200-Yに対して同じ第1頻度で第1結果メッセージMR-Xを配信する必要はない。第2エージェントシミュレータ200-Yに対しては、第2処理時間間隔TYに応じた第2頻度で第1結果メッセージMR-Xを配信すれば十分である。第2処理時間間隔TYに応じた第2頻度は、第1処理時間間隔TXに応じた第1頻度よりも低い。センターコントローラ300は、第1エージェントシミュレータ200-Xから受け取る第1結果メッセージMR-Xの一部だけを第2配信メッセージMD-Yとして選択し、選択した第2配信メッセージMD-Yを第2エージェントシミュレータ200-Yに配信する。つまり、センターコントローラ300は、第1頻度よりも低い第2頻度で、第2配信メッセージMD-Yを第2エージェントシミュレータ200-Yに配信する。
第2エージェントシミュレータ200-Yは、第2処理時間間隔TYで、第2エージェント4Yの状態を決定する。センターコントローラ300は、第1エージェントシミュレータ200-Xから受け取る第1結果メッセージMR-Xの一部を第2配信メッセージMD-Yとして選択する。このとき、センターコントローラ300は、第2エージェントシミュレータ200-Yが第2エージェント4Yの状態を決定するタイミングより前の最新の第1結果メッセージMR-Xを少なくとも含むように、第2配信メッセージMD-Yを選択することが好ましい(図4参照)。図4で示された例では、最新の2つの第1結果メッセージMR-X(例:A[60]、A[80])が第2配信メッセージMD-Yとして選択されている。最新の第1結果メッセージMR-Xを少なくとも含むように第2配信メッセージMD-Yを選択することにより、第2エージェントシミュレータ200-Yにおける第2エージェント4Yに関するシミュレーション精度が向上する。
第2エージェントシミュレータ200-Yは、第2エージェント4Yに関する第2結果メッセージMR-Yを、第2処理時間間隔TYに応じた第2頻度でセンターコントローラ300に送信する。センターコントローラ300は、第2処理時間間隔TYに応じた第2頻度で第2結果メッセージMR-Yを受信する。センターコントローラ300は、全ての第2結果メッセージMR-Yを第1配信メッセージMD-Xとして第1エージェントシミュレータ200-Xに配信してもよい。
センターコントローラ300は、各エージェントシミュレータ200-iにおける処理時間間隔を示す「参照情報REF1」を保持している。例えば、各エージェントシミュレータ200-iにおける処理時間間隔は予め設定され、参照情報REF1は予めセンターコントローラ300に提供される。その参照情報REF1に基づいて、センターコントローラ300は、各エージェントシミュレータ200-iにおける処理時間間隔を把握し、各エージェントシミュレータ200-iに配信する配信メッセージMDを調整する。つまり、センターコントローラ300は、各エージェントシミュレータ200-iにおける処理時間間隔に応じて、各エージェントシミュレータ200-iに配信する配信メッセージMDを選別する。
2-1-2.構成例
図6は、時間的観点に基づくメッセージフィルタリングに関連する構成例を示すブロック図である。図6に示される例では、センターコントローラ300は、複数のメッセージフィルタ311-1~311-Nを含んでいる。複数のメッセージフィルタ311-1~311-Nは、それぞれ、複数のエージェントシミュレータ200-1~200-Nに対して設けられており、複数のエージェントシミュレータ200-1~200-Nに関するメッセージフィルタリングを行う。すなわち、複数のメッセージフィルタ311-1~311-Nは、それぞれ、複数のエージェントシミュレータ200-1~200-Nに配信する配信メッセージMD-1~MD-Nの数を調整する。
より詳細には、複数のメッセージフィルタ311-1~311-Nは、それぞれ、複数のエージェントシミュレータ200-1~200-Nの処理時間間隔T1~TNに関する情報(参照情報REF1)を保持している。メッセージフィルタ311-iは、処理時間間隔Tiの情報に基づいて、エージェントシミュレータ200-iに配信する配信メッセージMD-iの数を調整する。図5に示された例の場合、第1メッセージフィルタ311-Xは、第1処理時間間隔TXの情報に基づいて、第1エージェントシミュレータ200-Xに配信する第1配信メッセージMD-Xの数を調整する。第2メッセージフィルタ311-Yは、第2処理時間間隔TYの情報に基づいて、第2エージェントシミュレータ200-Yに配信する第2配信メッセージMD-Yの数を調整する。各メッセージフィルタ311-iは、配信メッセージMD-iの数を調整するためのメッセージキューを含んでいる。
図7は、エージェントシミュレータ200とメッセージフィルタ311の配置の一例を示している。複数のメッセージフィルタ311-1~311-Nは、同一サブネット内に配置されている。その同一サブネット内にエージェントシミュレータ200が存在していてもよい。同一サブネット内に存在するエージェントシミュレータ200は、ブロードキャストにより結果メッセージMRを複数のメッセージフィルタ311-1~311-Nに送信する。同一サブネット外に存在するエージェントシミュレータ200は、ゲートウェイ40を介して当該サブネットに接続されている。ゲートウェイ40は、当該エージェントシミュレータ200から結果メッセージMRを受け取り、受け取った結果メッセージMRをブロードキャストにより複数のメッセージフィルタ311-1~311-Nに送信する。ブロードキャストを利用することにより、結果メッセージMRを各メッセージフィルタ311-iに効率的に分配することが可能となる。
2-1-3.効果
以上に説明されたように、一実施形態において、センターコントローラ300は、各エージェントシミュレータ200-iの処理時間間隔Tiに基づいて、メッセージフィルタリングを行う。より詳細には、センターコントローラ300は、処理時間間隔が比較的長いエージェントシミュレータ200に対して単位時間あたり配信する配信メッセージMDの数を比較的少なく設定する。これにより、センターコントローラ300からエージェントシミュレータ200に配信されるメッセージ量が全体として削減される。すなわち、通信量の不必要な増大が抑制され、通信リソースの不必要な消費が抑制される。
2-2.空間的観点に基づくメッセージフィルタリング
2-2-1.概要
次に、空間的観点に基づくメッセージフィルタリングについて説明する。シミュレーション対象世界2におけるエージェント4間の距離は様々である。遠く離れたエージェント4間では、全てのメッセージをやりとりする必要は無く、メッセージフィルタリングを行ってもよい。
ここで、エージェント4間の距離が短いとは、エージェント4間の相互作用の度合いが高いことを意味し、エージェント4間の距離が長いとは、エージェント4間の相互作用の度合いが低いことを意味する。エージェント4間の距離は、エージェント4間の相互作用の度合いの逆数であると言うこともできる。例えば、2つのエージェント4が見通し環境(Line Of Sight)にある場合、2つのエージェント4間の「直線距離(ユークリッド距離)」あるいは「マンハッタン距離」が用いられる。
2つのエージェント4が非見通し環境(Non Line OF Sight)にある場合の距離は次の通りである。例えば、他のエージェント4を見ることを前提としたシミュレーションの場合、2つのエージェント4は互いに見ることができないため、それらの間の距離を無限大とみなしてもよい。他の例として、他のエージェント4が発した音を聞くことを前提としたシミュレーションの場合、音の伝搬がレイトレーシングにより模擬され、最短レイの長さ(最短伝搬経路長)が距離として用いられる。
各エージェントシミュレータ200-iからセンターコントローラ300に送られる結果メッセージMR-iは、シミュレーション対象世界2における各エージェント4iの最新の位置情報を含んでいる。センターコントローラ300は、シミュレーション対象世界2の空間構成情報を保持している。その空間構成情報と各エージェント4iの位置情報に基づいて、センターコントローラ300は、シミュレーション対象世界2におけるエージェント4間の距離を算出することができる。
図8及び図9は、空間的観点に基づくメッセージフィルタリングの概要を説明するための概念図である。ここでは、3つのエージェント4X、4Y、4Zと、3つのエージェントシミュレータ200-X、200-Y、200-Zについて考える。シミュレーション対象世界2において、第1エージェント4Xと第3エージェント4Zとの間の距離Dxzは、第2エージェント4Yと第3エージェント4Zとの間の距離Dyzよりも大きい。
第1エージェントシミュレータ200-Xは、第1エージェント(対象エージェント)4Xのシミュレーションを行う。第2エージェントシミュレータ200-Yは、第2エージェント(対象エージェント)4Yのシミュレーションを行う。第3エージェントシミュレータ200-Zは、第3エージェント(対象エージェント)4Zのシミュレーションを行う。第1エージェントシミュレータ200-Xは、第1エージェント4Xに関する第1結果メッセージMR-Xをセンターコントローラ300に送信する。第2エージェントシミュレータ200-Yは、第2エージェント4Yに関する第2結果メッセージMR-Yをセンターコントローラ300に送信する。センターコントローラ300は、第1エージェントシミュレータ200-Xから第1結果メッセージMR-Xを受け取り、第1結果メッセージMR-Xの少なくとも一部を第3配信メッセージMD-Zとして第3エージェントシミュレータ200-Zに配信する。また、センターコントローラ300は、第2エージェントシミュレータ200-Yから第2結果メッセージMR-Yを受け取り、第2結果メッセージMR-Yの少なくとも一部を第3配信メッセージMD-Zとして第3エージェントシミュレータ200-Zに配信する。
図8及び図9で示される例では、第1エージェント4Xと第3エージェント4Zとの間の距離Dxzは、第2エージェント4Yと第3エージェント4Zとの間の距離Dyzよりも大きい。この場合、センターコントローラ300は、第3エージェントシミュレータ200-Zに対する第1結果メッセージMR-Xの配信頻度を、第3エージェントシミュレータ200-Zに対する第2結果メッセージMR-Yの配信頻度よりも低く設定する。これにより、通信量の不必要な増大が抑制され、通信リソースの不必要な消費が抑制される。尚、遠い第1エージェント4Xに関する第1結果メッセージMR-Xの配信頻度が低くなっても、第3エージェントシミュレータ200-Zにおけるシミュレーション精度はさほど低下しない。
図9に示されるように、センターコントローラ300は、参照情報REF2を保持している。参照情報REF2は、シミュレーション対象世界2の空間構成情報を含んでいる。センターコントローラ300は、その空間構成情報と結果メッセージMRに含まれる各エージェント4iの位置情報に基づいて、エージェント4間の距離を把握することができる。更に、参照情報REF2は、エージェント4間の距離と配信頻度との対応関係を示す関数情報を含んでいる。関数情報は、ユーザのポリシーに従って予め作成される。センターコントローラ300は、その関数情報に基づいて、エージェント4間の距離に応じた配信頻度を設定する。
2-2-2.パーティション分割
図10に示されるように、シミュレーション対象世界2の空間は、複数のパーティションP(ボクセル)に分割されてもよい。パーティション構成は、固定であってもよいし、動的に変動してもよい。例えば、パーティション構成は、エージェント4の疎密に応じて動的に設定されてもよい。その場合、図10に例示されるように、エージェント4の密度が高い領域はより多くのパーティションPに分割され、各パーティションPのサイズは小さくなる。パーティション構成は、周知の空間分割アルゴリズムにより決定される。
センターコントローラ300は、パーティションP間の距離に応じて、パーティションP単位でメッセージフィルタリングを行ってもよい。2つのパーティションP間の距離は、例えば、2つのパーティションPの重心間の距離である。他の例として、2つのパーティションP間の距離は、2つのパーティションPのそれぞれに属する2点間の距離の最大値である。更に他の例として、2つのパーティションP間の距離は、2つのパーティションPのそれぞれに属する2点間の距離の最小値である。
センターコントローラ300は、周知の空間分割アルゴリズムによりパーティション構成を決定する。上述の参照情報REF2には、シミュレーション対象世界2の空間構成情報に加えて、パーティション構成の情報も追加される。センターコントローラ300は、参照情報REF2に基づいて、パーティションP間の距離を算出する。更に、参照情報REF2は、パーティションP間の距離と配信頻度との対応関係を示す関数情報を含んでいる。関数情報は、ユーザのポリシーに従って予め作成される。センターコントローラ300は、その関数情報に基づいて、パーティションP間の距離に応じた配信頻度を設定する。
一例として、図10に示される3つのパーティションPX、PY、PZについて考える。シミュレーション対象世界2において、第1パーティションPXと第3パーティションPZとの間の距離は、第2パーティションPYと第3パーティションPZとの間の距離よりも大きい。
センターコントローラ300は、第1パーティションPXに属する各エージェント4のシミュレーションを行う各エージェントシミュレータ200から第1結果メッセージMR-Xを受け取る。また、センターコントローラ300は、第2パーティションPYに属する各エージェント4のシミュレーションを行う各エージェントシミュレータ200から第2結果メッセージMR-Yを受け取る。センターコントローラ300は、第1結果メッセージMR-Xと第2結果メッセージMR-Yの少なくとも一部を、第3パーティションPZに対する第3配信メッセージMD-Zとして選択する。そして、センターコントローラ300は、第3配信メッセージMD-Zを、第3パーティションPZに属する各エージェント4のシミュレーションを行う各エージェントシミュレータ200に配信する。図10に示される例では、第1パーティションPXと第3パーティションPZとの間の距離は、第2パーティションPYと第3パーティションPZとの間の距離よりも大きい。この場合、センターコントローラ300は、第1結果メッセージMR-Xを第3配信メッセージMD-Zとして配信する配信頻度を、第2結果メッセージMR-Yを第3配信メッセージMD-Zとして配信する配信頻度よりも低く設定する。
例えば、図11に示されるように、センターコントローラ300は、第1パーティション受信キュー312-Xと、第2パーティション受信キュー312-Yと、第3パーティション送信キュー313-Zとを含む。第1パーティション受信キュー312-Xは、第1パーティションPXに属する各エージェント4のシミュレーションを行う各エージェントシミュレータ200から受け取る第1結果メッセージMR-Xを格納する。第2パーティション受信キュー312-Yは、第2パーティションPYに属する各エージェント4のシミュレーションを行う各エージェントシミュレータ200から受け取る第2結果メッセージMR-Yを格納する。第3パーティション送信キュー313-Zは、第3パーティションPZに属する各エージェント4のシミュレーションを行う各エージェントシミュレータ200に配信される第3配信メッセージMD-Zを格納する。センターコントローラ300は、第1パーティション受信キュー312-Xに格納された第1結果メッセージMR-Xのうち必要なものを第3パーティション送信キュー313-Zに転送する。また、センターコントローラ300は、第2パーティション受信キュー312-Yに格納された第2結果メッセージMR-Yのうち必要なものを第3パーティション送信キュー313-Zに転送する。図10に示される例では、第1パーティションPXと第3パーティションPZとの間の距離は、第2パーティションPYと第3パーティションPZとの間の距離よりも大きい。この場合、センターコントローラ300は、第1パーティション受信キュー312-Xから第3パーティション送信キュー313-Zへの第1結果メッセージMR-Xの転送頻度を、第2パーティション受信キュー312-Yから第3パーティション送信キュー313-Zへの第2結果メッセージMR-Yの転送頻度よりも低く設定する。
このように、シミュレーション対象世界2の空間が複数のパーティションPに分割される場合、パーティションP単位でメッセージフィルタリングが行われる。これによっても、通信量の不必要な増大が抑制され、通信リソースの不必要な消費が抑制される。
また、パーティションP単位でメッセージフィルタリングを行うことにより、計算処理負荷を軽減することが可能となる。例えば、エージェント4の総数が1000であり、パーティションPの総数が10である場合を考える。エージェント4毎にメッセージフィルタリングを行う場合、エージェント4の全てのペアについて距離を算出するために約106回の計算処理が必要である。一方、パーティションP毎にメッセージフィルタリングを行う場合、パーティションPの全てのペアについて距離を算出するために必要な計算処理の回数は90回である。計算処理負荷が軽減されることは、シミュレーション速度及びシミュレーションコストの観点から好適である。
2-2-3.構成例
図11は、空間的観点に基づくメッセージフィルタリングに関連する第1の構成例を示すブロック図である。第1の構成例では、センターコントローラ300は、「Publish/Subscribeモデル」に基づいてメッセージフィルタリングを行うように設計されている。より詳細には、センターコントローラ300は、複数の受信キュー312、複数の送信キュー313、及び転送部314を含んでいる。
複数の受信キュー312は、それぞれ、複数のパーティションPに対して設けられている。同様に、複数の送信キュー313は、それぞれ、複数のパーティションPに対して設けられている。すなわち、受信キュー312と送信キュー313が、各パーティションP毎に設けられている。各受信キュー312は、対応するパーティションPに属する各エージェント4のシミュレーションを行うエージェントシミュレータ200から受け取る結果メッセージMRを格納する。各送信キュー313は、対応するパーティションPに属する各エージェント4のシミュレーションを行うエージェントシミュレータ200に配信される配信メッセージMDを格納する。
各エージェントシミュレータ200-iは、エージェント4iに関する結果メッセージMR-iをセンターコントローラ300に送信する(Publish)。その結果メッセージMR-iは、シミュレーション対象世界2におけるエージェント4iの位置情報を含んでいる。センターコントローラ300は、エージェント4iの位置情報とパーティション構成に基づいて、決定木等の手段により、エージェント4iが属するパーティションPを認識する。すなわち、センターコントローラ300は、決定木等の手段により、結果メッセージMR-iをエージェント4iが属するパーティションPに対応する受信キュー312に振り分ける。
また、各エージェントシミュレータ200-iは、エージェント4iに関する配信メッセージMD-iをセンターコントローラ300から取得する(Subscribe)。例えば、各エージェントシミュレータ200-iは、エージェント4iの位置情報とパーティション構成に基づいて、決定木等の手段により、エージェント4iが属するパーティションPを認識する。すなわち、各エージェントシミュレータ200-iは、決定木等の手段により、エージェント4iに関する配信メッセージMD-iが格納されている送信キュー313を認識する。そして、各エージェントシミュレータ200-iは、その送信キュー313からエージェント4iに関する配信メッセージMD-iを取得(Pull)する。尚、Subscribeの方式は、Pull方式に限られない。他の例として、Push方式のSubscrieが行われてもよい。
転送部314は、各受信キュー312に格納される結果メッセージMRのうち必要なものを必要な送信キュー313に転送する。この転送部314の機能は、上述のメッセージフィルタリングの観点から設定される。すなわち、転送部314は、受信キュー312と送信キュー313の組み合わせ毎に、パーティションP間の距離に応じて結果メッセージMRの転送頻度を設定する。上述の通り、参照情報REF2は、パーティション構成の情報、及び、パーティションP間の距離と配信頻度との対応関係を示す関数情報を含んでいる。センターコントローラ300は、その参照情報REF2に基づいて、転送部314の機能を設定することができる。
上述の図10で示された例では、第1パーティションPXと第3パーティションPZとの間の距離は、第2パーティションPYと第3パーティションPZとの間の距離よりも大きい。この場合、センターコントローラ300は、第1パーティション受信キュー312-Xから第3パーティション送信キュー313-Zへの第1結果メッセージMR-Xの転送頻度を、第2パーティション受信キュー312-Yから第3パーティション送信キュー313-Zへの第2結果メッセージMR-Yの転送頻度よりも低く設定する。尚、第3パーティション受信キュー312-Zから第3パーティション送信キュー313-Zへの転送頻度が最も高い。
図12は、空間的観点に基づくメッセージフィルタリングに関連する第2の構成例を示すブロック図である。第2の構成例では、センターコントローラ300は、複数のメッセージフィルタ315-1~315-Nを含んでいる。複数のメッセージフィルタ315-1~315-Nは、それぞれ、複数のエージェントシミュレータ200-1~200-Nに対して設けられており、複数のエージェントシミュレータ200-1~200-Nに関するメッセージフィルタリングを行う。すなわち、複数のメッセージフィルタ315-1~315-Nは、それぞれ、複数のエージェントシミュレータ200-1~200-Nに配信する配信メッセージMD-1~MD-Nの数を調整する。
より詳細には、各メッセージフィルタ315-iは、複数のエージェントシミュレータ200-1~200-Nから結果メッセージMR-1~MR-Nを受け取る。各結果メッセージMRは、各エージェント4の位置情報を含んでいる。また、各メッセージフィルタ315-iは、参照情報REF2(空間構成情報、関数情報)を保持している。各メッセージフィルタ315-iは、参照情報REF2(空間構成情報)と結果メッセージMRに含まれる位置情報に基づいて、対象エージェント4iと他のエージェント4との間の距離を算出する。更に、各メッセージフィルタ315-iは、参照情報REF2(関数情報)に基づいて、結果メッセージMR-1~MR-N毎に、距離に応じた配信頻度を設定する。そして、各メッセージフィルタ315-iは、設定した配信頻度に従って、結果メッセージMR-1~MR-Nを配信メッセージMD-iとしてエージェントシミュレータ200-iに配信する。各メッセージフィルタ315-iは、配信メッセージMD-iの数を調整するためのメッセージキューを含んでいる。
エージェントシミュレータ200とメッセージフィルタ315の配置例としては、上述の図7で示されたものが挙げられる。
2-2-4.効果
以上に説明されたように、一実施形態において、センターコントローラ300は、エージェント4間の距離に基づいて、メッセージフィルタリングを行う。より詳細には、センターコントローラ300は、遠く離れたエージェント4のシミュレーションを行うエージェントシミュレータ200間では、配信メッセージMDの配信頻度を低く設定する。これにより、センターコントローラ300からエージェントシミュレータ200に配信されるメッセージ量が全体として削減される。すなわち、通信量の不必要な増大が抑制され、通信リソースの不必要な消費が抑制される。
シミュレーション対象世界2の空間は、複数のパーティションPに分割されてもよい(図10参照)。この場合、パーティションP単位でメッセージフィルタリングが行われる(図11参照)。この場合であっても、通信量の不必要な増大が抑制され、通信リソースの不必要な消費が抑制される。更に、パーティションP単位でメッセージフィルタリングを行うことにより、計算処理負荷を軽減することが可能となる。計算処理負荷が軽減されることは、シミュレーション速度及びシミュレーションコストの観点から好適である。
2-3.モード切り替え
センターコントローラ300は、メッセージフィルタリングをON/OFF可能に構成されていてもよい。その場合、センターコントローラ300の動作モードは、メッセージフィルタリングを行わない「第1モード」と、メッセージフィルタリングを行う「第2モード」を含む。第1モードでは、センターコントローラ300は、各エージェントシミュレータ200から受け取る結果メッセージMRを選別することなく新たな配信メッセージMDとして配信する。一方、第2モードでは、センターコントローラ300は、各エージェントシミュレータ200から受け取る結果メッセージMRを選択的に新たな配信メッセージMDとして配信する。
センターコントローラ300は、状況に応じて動作モードを第1モードと第2モードとの間で切り替える。例えば、センターコントローラ300は、「通信量の抑制」と「センターコントローラ300における処理負荷の抑制」のバランスの観点からモード切り替えを行う。
図13は、センターコントローラ300におけるモード切り替えの一例を説明するための概念図である。図13に示される例では、センターコントローラ300は、センターコントローラ300が単位時間あたりに受け取る結果メッセージMRの数に基づいて、モード切り替えを行う。
より詳細には、センターコントローラ300が単位時間あたりに受け取る結果メッセージMRの数が少ない場合、結果メッセージMRをそのまま配信メッセージMDとして配信しても、その配信メッセージMDが通信容量を圧迫することはない。そこで、センターコントローラ300が単位時間あたりに受け取る結果メッセージMRの数が閾値以下である場合、センターコントローラ300は、メッセージフィルタリングを行わない第1モードを選択する。具体的には、センターコントローラ300は、上記セクション2-1あるいはセクション2-2で説明されたメッセージフィルタリングの機能をOFFする。メッセージフィルタリングが行われないため、センターコントローラ300における処理負荷が抑制される。
一方、センターコントローラ300が単位時間あたりに受け取る結果メッセージMRの数が多い場合、結果メッセージMRをそのまま配信メッセージMDとして配信すると、センターコントローラ300からエージェントシミュレータ200全体への通信量が増大する。そこで、センターコントローラ300が単位時間あたりに受け取る結果メッセージMRの数が閾値を超えた場合、センターコントローラ300は、メッセージフィルタリングを行う第2モードを選択する。このとき、メッセージフィルタリングは、時間的観点に基づいて行われてもよいし(セクション2-1参照)、空間的観点に基づいて行われてもよい(セクション2-2参照)。メッセージフィルタリングが行われるため、センターコントローラ300からエージェントシミュレータ200全体への通信量が効果的に削減される。
モード切り替えを行う際、センターコントローラ300は、MASシステム100全体にシミュレーションの一時中断を指示してもよい。シミュレーションの一時停止後、センターコントローラ300は、モード切り替えを実行する。各エージェントシミュレータ200は、再開準備が整ったら、再開Readyをセンターコントローラ300に通知する。センターコントローラ300は、全てのエージェントシミュレータ200から再開Readyを受け取ると、シミュレーションの再開を指示する。
MASシステム100のユーザが、モード切り替えをセンターコントローラ300に指示してもよい。例えば、ユーザは、シミュレーションの一時中断をセンターコントローラ300に指示する。シミュレーションの一時停止後、ユーザは、動作モードを指定するモード設定ファイルを書き換える。その後、ユーザは、シミュレーション再開をセンターコントローラ300に指示する。
以上に説明されたように、一実施形態において、センターコントローラ300の動作モードは、メッセージフィルタリングを行わない第1モードと、メッセージフィルタリングを行う第2モードを含む。センターコントローラ300は、状況に応じて、第1モードと第2モードを切り替える。これにより、通信量の抑制と処理負荷の抑制の観点からフレキシブルな運用が可能となる。
3.MASシステムの全体構成例
以下、MASシステム100の全体構成と情報の流れについて図14を用いて説明する。図14に示すように、MASシステム100は、複数のエージェントシミュレータ200と、1つのセンターコントローラ300と、複数のサービスシステム用のバックエンドサーバ400とを備えている。詳細については後述するが、これらは複数のコンピュータに分散して設けられる。つまり、MASシステム100は、複数のコンピュータによる並列分散処理を前提とするシステムである。
センターコントローラ300は、その機能として、移動メッセージディスパッチャ310と、シミュレーションコンダクタ320とを備える。センターコントローラ300は、コンピュータにインストールされたアプリケーションソフトウェアである。移動メッセージディスパッチャ310とシミュレーションコンダクタ320とは、アプリケーションソフトウェアを構成するプログラムである。センターコントローラ300は、1又は複数のエージェントシミュレータ200とハードウェアであるコンピュータを共用することもできるが、好ましくは、1つのコンピュータを専用する。
移動メッセージディスパッチャ310は、エージェントシミュレータ200間の移動メッセージの送受信を中継する。エージェントシミュレータ200と移動メッセージディスパッチャ310との間において実線で示される情報の流れは移動メッセージの流れを示している。センターコントローラ300が備える上述の移動メッセージの交換機能は、移動メッセージディスパッチャ310が担っている。移動メッセージディスパッチャ310は、MASシステム100を構成する全てのエージェントシミュレータ200との間で通信を行う。また、移動メッセージディスパッチャ310は、上述のメッセージフィルタリングの機能を備えている。
シミュレーションコンダクタ320は、各エージェントシミュレータ200の初期設定を行う。また、シミュレーションコンダクタ320は、エージェントシミュレータ200との間でのシミュレーション制御メッセージの交換によってエージェントシミュレータ200によるシミュレーションを制御する。エージェントシミュレータ200とシミュレーションコンダクタ320との間において破線で示される情報の流れはシミュレーション制御メッセージの流れである。シミュレーションコンダクタ320は、MASシステム100を構成する全てのエージェントシミュレータ200との間で通信を行い、シミュレーション制御メッセージを交換する。移動メッセージが移動メッセージディスパッチャ310を介して複数のエージェントシミュレータ200間で交換されるのと異なり、シミュレーション制御メッセージは、シミュレーションコンダクタ320と個々のエージェントシミュレータ200との間で個別に交換される。シミュレーション制御メッセージの交換により、例えば、シミュレーション速度、シミュレーションの停止、シミュレーションの休止、シミュレーションの再開、及びシミュレーションの時間粒度が制御される。シミュレーション速度は、MASシステム100全体として制御されるのに対し、シミュレーションの停止、シミュレーションの休止、シミュレーションの再開、及びシミュレーションの時間粒度は、エージェントシミュレータ200毎に制御される。
バックエンドサーバ400は、現実世界のサービスシステムにおいて実際に用いられるものと同じバックエンドサーバである。現実世界のバックエンドサーバ400を仮想世界に持ち込むことで、サービスシステムにより提供されるサービスを高精度にシミュレーションすることができる。MASシステム100でシミュレーションされるサービスとしては、例えば、自律運転車両を用いたオンデマンドバスや定期運行型バスなどのモビリティサービスや、自律移動型のロボットを用いて荷物を配送する物流サービスを挙げることができる。また、MASシステム100でシミュレーションされるサービスは、例えば、ユーザがユーザ端末においてサービスアプリを操作することによって利用可能となるサービスである。
MASシステム100は異なるサービスシステム用の複数のバックエンドサーバ400を備え、仮想世界2において同時に複数種類のサービスをシミュレーションすることができる。サービスのシミュレーションは、バックエンドサーバ400とエージェントシミュレータ200との間でのサービスメッセージの交換によって行われる。エージェントシミュレータ200とバックエンドサーバ400との間において点線で示される情報の流れはサービスメッセージの流れを示している。各バックエンドサーバ400は、サービスの提供に関係するエージェントシミュレータ200との間でサービスメッセージを交換する。
交換されるサービスメッセージの内容は、エージェントシミュレータ200が担当するエージェントの種類によって異なる。例えば、エージェントがサービスを利用するユーザ(歩行者)である場合、バックエンドサーバ400は、サービス利用情報を含むサービスメッセージをエージェントシミュレータ200から受信し、サービス提供状態情報を含むサービスメッセージをエージェントシミュレータ200に送信する。サービス利用情報とは、ユーザのサービスシステムの利用に関する現状および将来計画に関する情報であり、現在の利用状態とアプリ操作による入力情報を含む。サービス提供状態情報とは、サービスシステムにおけるユーザの状態に関する情報であり、ユーザ端末のサービスアプリを通じて提供される情報である。
エージェントがサービスの提供に用いられる自律ロボットや自律車両である場合、バックエンドサーバ400は、動作状態情報を含むサービスメッセージをエージェントシミュレータ200から受信し、動作指示情報を含むサービスメッセージをエージェントシミュレータ200に送信する。動作状態情報とは、自律ロボットや自律車両の現状および将来計画に関する情報である。現状に関する情報とは、例えば、搭載センサのステータス、測定データ、搭載アクチュエータのステータス、行動決定に関するステータスである。将来計画に関する情報とは、例えば、将来時刻と、アクチュエータのステータスと、行動決定に関するステータスのリストである。動作指示情報は、自律ロボットや自律車両を用いてサービスを提供するための将来計画の全部或いは一部を含む情報である。例えば、自律ロボットや自律車両が移動すべき目標地点や経路は動作指示情報に含まれる。
仮想世界2に存在するエージェントには、カメラを含む路側センサや自動ドアのような定置物体が含まれる。例えば、エージェントが固定カメラである場合、バックエンドサーバ400は、自律ロボットの位置情報の計算に必要な固定カメラの画像情報を含むサービスメッセージをエージェントシミュレータ200から受信する。また、エージェントが自動ドアである場合、バックエンドサーバ400は、自律ロボットの通行のための開扉の指示を含むサービスメッセージをエージェントシミュレータ200に送信する。
また、バックエンドサーバ400は、他のバックエンドサーバ400との間でそれぞれの取り決めのもとでサービスメッセージの交換を行う。バックエンドサーバ400間において点線で示される情報の流れはサービスメッセージの流れを示している。このとき交換されるサービスメッセージには、例えば、それぞれのサービスにおけるユーザの利用状態やサービスの提供状況が含まれる。複数のバックエンドサーバ400間でサービスメッセージを交換することによって、仮想世界2において提供されるサービスを互いに連携させることができる。
複数のサービスの連携の一つの例として、オンデマンドバスサービスと、バス停から自宅までユーザに代わって自律ロボットが荷物を運ぶ物流サービスとの連携を挙げることができる。オンデマンドバスサービスでは、ユーザは、希望する時刻に希望する場所でバスから降車することができる。オンデマンドバスサービスと物流サービスとを連携させることで、ユーザが到着する前に自律ロボットを降車場所に到着させて、降車場所でユーザの到着を待たせておくことができる。また、渋滞などによりバスが遅れた場合や、ユーザがバスに乗り遅れた場合には、バックエンドサーバ400間でサービスメッセージを交換することにより、自律ロボットを降車場所に向かわせる時間をユーザの到着時間に合わせることができる。
エージェントシミュレータ200は、担当するエージェントの種類に応じて複数の種類が存在する。例えば、歩行者エージェント用のエージェントシミュレータ201、自律ロボット/車両エージェント用のエージェントシミュレータ202、VR歩行者エージェント用のエージェントシミュレータ203、及び路側センサエージェント用のエージェントシミュレータ204が存在する。以下、エージェントシミュレータ200とは、これら複数種類のエージェントシミュレータ201、202、203、204の総称とする。
エージェントシミュレータ200は、その機能として、送受信コントローラ210、3D物理エンジン220、サービスシステムクライアントシミュレータ230、及びシミュレータコア240を備える。エージェントシミュレータ200は、コンピュータにインストールされたアプリケーションソフトウェアである。送受信コントローラ210、3D物理エンジン220、サービスシステムクライアントシミュレータ230、及びシミュレータコア240は、アプリケーションソフトウェアを構成するプログラムである。これらの機能は、エージェントシミュレータ201、202、203、204の間で異なっている。ここでは、エージェントシミュレータ201、202、203、204間で概ね共通する機能について説明し、それぞれのエージェントシミュレータ201、202、203、204の機能の詳細については後述する。
送受信コントローラ210は、エージェントシミュレータ200と他のプログラムとの間のインタフェースである。送受信コントローラ210は、移動メッセージディスパッチャ310からの移動メッセージの受信と、移動メッセージディスパッチャ310への移動メッセージの送信とを行う。ただし、エージェントシミュレータ204においては、移動メッセージの受信のみが行われる。送受信コントローラ210は、シミュレーションコンダクタ320からのシミュレーション制御メッセージの受信と、シミュレーションコンダクタ320へのシミュレーション制御メッセージの送信とを行う。また、送受信コントローラ210は、バックエンドサーバ400からのサービスメッセージの受信と、バックエンドサーバ400へのサービスメッセージの送信とを行う。ただし、エージェントシミュレータ204においては、サービスメッセージの送信のみが行われる。
3D物理エンジン220は、他のエージェントシミュレータ200から受信した移動メッセージに基づいて3次元空間における周囲エージェントの現在の状態を推定する。図3を用いて説明した周囲エージェントの過去の状態に基づく現在の状態の推定は、3D物理エンジン220によって行われる。3D物理エンジン220は、周囲エージェントの現在の状態に基づいて自エージェントからの観測で得られる周辺情報を生成する。また、3D物理エンジン220は、後述するシミュレータコア240によるシミュレーション結果に基づいて3次元空間における自エージェントの状態を更新し、自エージェントの状態を表した移動メッセージを生成する。ただし、エージェントシミュレータ204においては、担当するエージェントは不動であるために自エージェントの状態の更新と移動メッセージの生成とは行われない。
サービスシステムクライアントシミュレータ230は、バックエンドサーバ400に係るサービスシステムのクライアントとしての自エージェントの振る舞いをシミュレーションする。送受信コントローラ210で受信されたサービスメッセージは、サービスシステムクライアントシミュレータ230に入力される。そして、サービスシステムクライアントシミュレータ230で生成されたサービスメッセージが送受信コントローラ210から送信される。ただし、エージェントシミュレータ204においては、サービスメッセージの生成のみが行われる。
シミュレータコア240は、次のタイムステップにおける自エージェントの状態をシミュレーションする。自エージェントの状態を算出するタイムステップの時間間隔が上述の時間粒度である。シミュレータコア240におけるシミュレーションの内容は、エージェントシミュレータ200の種類毎に異なる。なお、エージェントシミュレータ204は、担当するエージェントが不動であり自エージェントの状態のシミュレーションは不要であるため、シミュレータコア240を有していない。
4.エージェントシミュレータの具体例
次に、MASシステム100を構成する各種類のエージェントシミュレータ201、202、203、204の詳細な構成と情報の流れについて図15乃至図18を用いて説明する。なお、図15乃至図18において、実線で示すブロック間の情報の流れは移動メッセージの流れを示している。また、点線で示すブロック間の情報の流れはサービスメッセージの流れを示している。そして、破線で示すブロック間の情報の流れはシミュレーション制御メッセージの流れを示している。
4-1.歩行者エージェント用エージェントシミュレータ
図15は、歩行者エージェント用のエージェントシミュレータ201の構成と情報の流れを示すブロック図である。以下、歩行者エージェント用のエージェントシミュレータ201の全体構成と各部の詳細、及びエージェントシミュレータ201における情報の流れについて説明する。
4-1-1.歩行者エージェント用エージェントシミュレータの全体構成
エージェントシミュレータ201は、その機能として、送受信コントローラ211、3D物理エンジン221、サービスシステムクライアントシミュレータ231、及びシミュレータコア241を備える。これらの機能は、概念として、それぞれ送受信コントローラ210、3D物理エンジン220、サービスシステムクライアントシミュレータ230、及びシミュレータコア240に含まれる。
送受信コントローラ211は、各種メッセージを受信する機能として、移動メッセージ受信部211a、サービスメッセージ受信部211b、及びコントロールメッセージ受信部211cを備える。また、送受信コントローラ211は、各種メッセージを送信する機能として、移動メッセージ送信部211d、サービスメッセージ送信部211e、及びコントロールメッセージ送信部211fを備える。さらに、送受信コントローラ211は、シミュレーション動作制御部211hを備える。送受信コントローラ211を構成する各部211a~211hは、それぞれがプログラム或いはプログラムの一部である。
3D物理エンジン221は、その機能として、周囲エージェント状態更新部221a、視覚情報生成部221b、及び自エージェント状態更新部221cを備える。3D物理エンジン221を構成する各部221a、221b、221cは、それぞれがプログラム或いはプログラムの一部である。
サービスシステムクライアントシミュレータ231は、その機能として、サービス提供状態情報処理部231aとサービス利用情報生成部231bとを備える。サービスシステムクライアントシミュレータ231を構成する各部231a、231bは、それぞれがプログラム或いはプログラムの一部である。
シミュレータコア241は、その機能として、全体移動方針決定部241a、行動決定部241b、次タイムステップ状態算出部241d、及びサービス利用行動決定部241eを備える。シミュレータコア241を構成する各部241a、241b、241d、241eは、それぞれがプログラム或いはプログラムの一部である。
4-1-2.送受信コントローラの詳細
送受信コントローラ211において、移動メッセージ受信部211aは、移動メッセージディスパッチャ310から移動メッセージを受信する。移動メッセージ受信部211aは、受信した移動メッセージを3D物理エンジン221の周囲エージェント状態更新部221aに出力する。
サービスメッセージ受信部211bは、バックエンドサーバ400からサービスメッセージを受信する。サービスメッセージ受信部211bは、受信したサービスメッセージをサービスシステムクライアントシミュレータ231のサービス提供状態情報処理部231aに出力する。
コントロールメッセージ受信部211cは、シミュレーションコンダクタ320からシミュレーション制御メッセージを受信する。コントロールメッセージ受信部211cは、受信したシミュレーション制御メッセージをシミュレーション動作制御部211hに出力する。
移動メッセージ送信部211dは、3D物理エンジン221の自エージェント状態更新部221cから自エージェントの現在の状態を含む移動メッセージを取得する。移動メッセージ送信部211dは、取得した移動メッセージを移動メッセージディスパッチャ310に送信する。
サービスメッセージ送信部211eは、サービスシステムクライアントシミュレータ231のサービス利用情報生成部231bからサービス利用情報を含むサービスメッセージを取得する。サービスメッセージ送信部211eは、取得したサービスメッセージをバックエンドサーバ400に送信する。
コントロールメッセージ送信部211fは、シミュレーション動作制御部211hからエージェントシミュレータ201の制御状態を含むシミュレーション制御メッセージを取得する。コントロールメッセージ送信部211fは、シミュレーション動作制御部211hとから取得したシミュレーション制御メッセージをシミュレーションコンダクタ320に送信する。
シミュレーション動作制御部211hは、コントロールメッセージ受信部211cからシミュレーション制御メッセージを取得する。シミュレーション動作制御部211hは、シミュレーション制御メッセージに含まれる指示に従ってエージェントシミュレータ201のシミュレーション動作を制御する。例えば、シミュレーションの時間粒度の変更が指示された場合、シミュレーション動作制御部211hは、エージェントシミュレータ201によるシミュレーションの時間粒度を初期値から指示された時間粒度に変更する。時間粒度の初期値はエージェントシミュレータ201に設定値として記憶されている。また、時間粒度の上限値と下限値は、エージェントの種類ごとにシミュレーションコンダクタ320に記憶されている。
シミュレーション制御メッセージによる指示内容がシミュレーション速度である場合、シミュレーション動作制御部211hは、3D物理エンジン221やシミュレータコア241の動作周波数を変化させてシミュレーション速度を加速或いは減速させる。なお、シミュレーション速度は、実世界の時間の流れに対する仮想世界2の時間の流れの速度比を意味する。シミュレーションの停止が指示された場合、シミュレーション動作制御部211hは、エージェントシミュレータ201によるシミュレーションを停止させる。シミュレーションの休止が指示された場合にはシミュレーションを休止させ、再開が指示された場合にシミュレーションを再開させる。シミュレーション動作制御部211hは、エージェントシミュレータ201の現在の制御状態を含むシミュレーション制御メッセージをコントロールメッセージ送信部211fに出力する。
4-1-3.3D物理エンジンの詳細
3D物理エンジン221において、周囲エージェント状態更新部221aは、移動メッセージ受信部211aから移動メッセージを取得する。移動メッセージ受信部211aから取得される移動メッセージは、移動メッセージディスパッチャ310を経由して他のエージェントシミュレータから送られた移動メッセージである。周囲エージェント状態更新部221aは、取得した移動メッセージに基づいて自エージェントの周囲に存在する周囲エージェントの現在の状態を推定する。
周囲エージェントの現在の状態を過去の状態から推定する場合、周囲エージェント状態更新部221aは、ログに保存されている周囲エージェントの過去の状態を使用する。周囲エージェントの過去の状態を用いて現在の状態を推定する方法は図3を用いて説明した通りである。周囲エージェント状態更新部221aは、推定した周囲エージェントの現在の状態を視覚情報生成部221bに出力するとともに、ログを更新する。
視覚情報生成部221bは、周囲エージェント状態更新部221aから周囲エージェントの現在の状態を取得する。視覚情報生成部221bは、周囲エージェントの現在の状態に基づいて自エージェントからの観測で得られる周辺情報を生成する。自エージェントは歩行者であるので、観測で得られる周辺情報とは、歩行者の目で捉えられる視覚情報を意味する。視覚情報生成部221bは、生成された視覚情報をシミュレータコア241の全体移動方針決定部241a、行動決定部241b、及びサービス利用行動決定部241eに出力する。
自エージェント状態更新部221cは、シミュレータコア241の次タイムステップ状態算出部241dから、シミュレータコア241でシミュレーションされた次タイムステップにおける自エージェントの状態を取得する。自エージェント状態更新部221cは、シミュレータコア241によるシミュレーション結果に基づいて3次元空間における自エージェントの状態を更新する。自エージェント状態更新部221cは、更新された自エージェントの状態を含む移動メッセージを送受信コントローラ211の移動メッセージ送信部211dに出力する。移動メッセージに含まれる自エージェントの状態には、今回タイムステップにおける位置、方向、速度、加速度と、次タイムステップにおける位置、方向、速度、加速度とが含まれる。また、自エージェント状態更新部221cは、更新された自エージェントの状態に関する情報をサービスシステムクライアントシミュレータ231のサービス利用情報生成部231bに出力する。
4-1-4.サービスシステムクライアントシミュレータの詳細
サービスシステムクライアントシミュレータ231において、サービス提供状態情報処理部231aは、サービスメッセージ受信部211bからサービスメッセージを取得する。サービスメッセージ受信部211bから取得されるサービスメッセージはサービス提供状態情報を含む。サービス提供状態情報処理部231aは、サービス提供状態情報を処理し、サービスシステムのユーザとしての自エージェントの状態に関する情報と、ユーザ端末のサービスアプリへの入力項目とを取得する。自エージェントのユーザとしての状態に関する情報はユーザ端末に提示される情報であり、入力項目は自エージェントがサービスを利用するために入力を依頼される情報である。サービス提供状態情報処理部231aは、自エージェントのユーザとしての状態に関する情報と、ユーザ端末のサービスアプリへの入力項目とをシミュレータコア241の全体移動方針決定部241a及びサービス利用行動決定部241eに出力する。
サービス利用情報生成部231bは、シミュレータコア241のサービス利用行動決定部241eから自エージェントのサービス利用行動の決定結果を取得する。また、サービス利用情報生成部231bは、3D物理エンジン221の自エージェント状態更新部221cから3次元空間における自エージェントの状態を取得する。サービス利用情報生成部231bは、取得されたこれらの情報に基づいてサービス利用情報を生成するとともに、自エージェントのサービスの利用状態を更新する。サービス利用情報生成部231bは、サービス利用情報を含むサービスメッセージを送受信コントローラ211のサービスメッセージ送信部211eに出力する。
4-1-5.シミュレータコアの詳細
シミュレータコア241において、全体移動方針決定部241aは、3D物理エンジン221の視覚情報生成部221bから視覚情報を取得する。また、全体移動方針決定部241aは、サービスシステムクライアントシミュレータ231のサービス提供状態情報処理部231aから自エージェントのユーザとしての状態に関する情報と、ユーザ端末のサービスアプリへの入力項目とを取得する。全体移動方針決定部241aは、取得されたこれらの情報に基づいて自エージェントの仮想世界2における全体的な移動方針を決定する。全体移動方針決定部241aは、決定された全体的な移動方針を行動決定部241bに出力する。
行動決定部241bは、全体移動方針決定部241aから全体的な移動方針を取得するとともに、3D物理エンジン221の視覚情報生成部221bから視覚情報を取得する。行動決定部241bは、全体的な移動方針と視覚情報とを移動モデル241cに入力することによって自エージェントの行動を決定する。移動モデル241cは、一定の移動方針のもと歩行者の目に映る周辺の状況に応じて歩行者がどのように移動するのかをモデル化したシミュレーションモデルである。行動決定部241bは、決定した自エージェントの行動を次タイムステップ状態算出部241dに出力する。
次タイムステップ状態算出部241dは、行動決定部241bで決定された自エージェントの行動を取得する。次タイムステップ状態算出部241dは、自エージェントの行動に基づいて次タイムステップにおける自エージェントの状態を算出する。算出される自エージェントの状態は、次タイムステップにおける自エージェントの位置、方向、速度、及び加速度を含む。次タイムステップ状態算出部241dは、算出された次タイムステップにおける自エージェントの状態を3D物理エンジン221の自エージェント状態更新部221cに出力する。
サービス利用行動決定部241eは、3D物理エンジン221の視覚情報生成部221bから視覚情報を取得する。また、サービス利用行動決定部241eは、サービスシステムクライアントシミュレータ231のサービス提供状態情報処理部231aから自エージェントのユーザとしての状態に関する情報と、ユーザ端末のサービスアプリへの入力項目とを取得する。サービス利用行動決定部241eは、取得したこれらの情報を行動モデル241fに入力することによって自エージェントのサービスシステムのユーザとしての行動(サービス利用行動)を決定する。行動モデル241fは、ユーザにサービスに関する情報が提示され、ユーザ端末のサービスアプリへの入力が依頼された場合に、ユーザの目に映る周辺の状況に応じてユーザがどのように移動するのかをモデル化したシミュレーションモデルである。サービス利用行動決定部241eは、決定したサービス利用行動をサービス利用情報生成部231bに出力する。
4-2.自律ロボット/車両エージェント用エージェントシミュレータ
図16は、自律ロボット/車両エージェント用のエージェントシミュレータ202の構成と情報の流れを示すブロック図である。自律ロボット/車両エージェントとは、バックエンドサーバ400が関係するサービスシステムにおいてサービスの提供に用いられる自律ロボット又は自律車両のエージェントである。以下、自律ロボット/車両エージェント用のエージェントシミュレータ202の全体構成と各部の詳細、及びエージェントシミュレータ202における情報の流れについて説明する。
4-2-1.自律ロボット/車両エージェント用エージェントシミュレータの全体構成
エージェントシミュレータ202は、その機能として、送受信コントローラ212、3D物理エンジン222、サービスシステムクライアントシミュレータ232、及びシミュレータコア242を備える。これらの機能は、概念として、それぞれ送受信コントローラ210、3D物理エンジン220、サービスシステムクライアントシミュレータ230、及びシミュレータコア240に含まれる。
送受信コントローラ212は、各種メッセージを受信する機能として、移動メッセージ受信部212a、サービスメッセージ受信部212b、及びコントロールメッセージ受信部212cを備える。また、送受信コントローラ212は、各種メッセージを送信する機能として、移動メッセージ送信部212d、サービスメッセージ送信部212e、及びコントロールメッセージ送信部212fを備える。さらに、送受信コントローラ212は、シミュレーション動作制御部212hを備える。送受信コントローラ211を構成する各部212a~212hは、それぞれがプログラム或いはプログラムの一部である。
3D物理エンジン222は、その機能として、周囲エージェント状態更新部222a、センサ情報生成部222b、及び自エージェント状態更新部222cを備える。3D物理エンジン222を構成する各部222a、222b、222cは、それぞれがプログラム或いはプログラムの一部である。
サービスシステムクライアントシミュレータ232は、その機能として、経路計画用情報受信部232aと動作状態情報生成部232bとを備える。サービスシステムクライアントシミュレータ232を構成する各部232a、232bは、それぞれがプログラム或いはプログラムの一部である。
シミュレータコア242は、その機能として、全体的経路計画部242a、局所的経路計画部242b、アクチュエータ操作量決定部242c、及び次タイムステップ状態算出部242dを備える。シミュレータコア242を構成する各部242a、242b、242c、242dは、それぞれがプログラム或いはプログラムの一部である。
4-2-2.送受信コントローラの詳細
送受信コントローラ212において、移動メッセージ受信部212aは、移動メッセージディスパッチャ310から移動メッセージを受信する。移動メッセージ受信部212aは、受信した移動メッセージを3D物理エンジン222の周囲エージェント状態更新部222aに出力する。
サービスメッセージ受信部212bは、バックエンドサーバ400からサービスメッセージを受信する。サービスメッセージ受信部212bは、受信したサービスメッセージをサービスシステムクライアントシミュレータ232の経路計画用情報受信部232aに出力する。
コントロールメッセージ受信部212cは、シミュレーションコンダクタ320からシミュレーション制御メッセージを受信する。コントロールメッセージ受信部212cは、受信したミュレーション制御メッセージをシミュレーション動作制御部212hに出力する。
移動メッセージ送信部212dは、3D物理エンジン222の自エージェント状態更新部222cから自エージェントの現在の状態を含む移動メッセージを取得する。移動メッセージ送信部212dは、取得した移動メッセージを移動メッセージディスパッチャ310に送信する。
サービスメッセージ送信部212eは、サービスシステムクライアントシミュレータ232の動作状態情報生成部232bから動作状態情報を含むサービスメッセージを取得する。サービスメッセージ送信部212eは、取得したサービスメッセージをバックエンドサーバ400に送信する。
コントロールメッセージ送信部212fは、シミュレーション動作制御部212hからエージェントシミュレータ202の制御状態を含むシミュレーション制御メッセージを取得する。コントロールメッセージ送信部212fは、シミュレーション動作制御部212hから取得したシミュレーション制御メッセージをシミュレーションコンダクタ320に送信する。
シミュレーション動作制御部212hは、コントロールメッセージ受信部212cからシミュレーション制御メッセージを取得する。シミュレーション動作制御部212hは、シミュレーション制御メッセージに含まれる指示に従ってエージェントシミュレータ202のシミュレーション動作を制御する。例えば、シミュレーションの時間粒度の変更が指示された場合、シミュレーション動作制御部212hは、エージェントシミュレータ202によるシミュレーションの時間粒度を初期値から指示された時間粒度に変更する。時間粒度の初期値はエージェントシミュレータ202に設定値として記憶されている。また、時間粒度の上限値と下限値は、エージェントの種類ごとにシミュレーションコンダクタ320に記憶されている。
シミュレーション制御メッセージによる指示内容がシミュレーション速度である場合、シミュレーション動作制御部212hは、3D物理エンジン222やシミュレータコア242の動作周波数を指示されたシミュレーション速度に従って変化させ、エージェントシミュレータ202の演算速度を加速或いは減速する。シミュレーションの停止が指示された場合、シミュレーション動作制御部212hは、エージェントシミュレータ202によるシミュレーションを停止させる。シミュレーションの休止が指示された場合にはシミュレーションを休止させ、再開が指示された場合にシミュレーションを再開させる。シミュレーション動作制御部212hは、エージェントシミュレータ202の現在の制御状態を含むシミュレーション制御メッセージをコントロールメッセージ送信部212fに出力する。
4-2-3.3D物理エンジンの詳細
3D物理エンジン222において、周囲エージェント状態更新部222aは、移動メッセージ受信部212aから移動メッセージを取得する。移動メッセージ受信部212aから取得される移動メッセージは、移動メッセージディスパッチャ310を経由して他のエージェントシミュレータから送られた移動メッセージである。周囲エージェント状態更新部222aは、取得した移動メッセージに基づいて自エージェントの周囲に存在する周囲エージェントの現在の状態を推定する。
周囲エージェントの現在の状態を過去の状態から推定する場合、周囲エージェント状態更新部222aは、ログに保存されている周囲エージェントの過去の状態を使用する。周囲エージェントの過去の状態を用いて現在の状態を推定する方法は図3を用いて説明した通りである。周囲エージェント状態更新部222aは、推定した周囲エージェントの現在の状態をセンサ情報生成部222bに出力するとともに、ログを更新する。
センサ情報生成部222bは、周囲エージェント状態更新部222aから周囲エージェントの現在の状態を取得する。センサ情報生成部222bは、周囲エージェントの現在の状態に基づいて自エージェントからの観測で得られる周辺情報を生成する。自エージェントは自律ロボット或いは自律車両であるので、観測で得られる周辺情報とは、自律ロボット或いは自律車両のセンサで捉えられるセンサ情報を意味する。センサ情報生成部222bは、生成されたセンサ情報をシミュレータコア242の全体的経路計画部242a、及びサービスシステムクライアントシミュレータ232の動作状態情報生成部232bに出力する。
自エージェント状態更新部222cは、シミュレータコア242の次タイムステップ状態算出部242dから、シミュレータコア242で演算された次タイムステップにおける自エージェントの状態を取得する。自エージェント状態更新部222cは、シミュレータコア242による演算結果に基づいて3次元空間における自エージェントの状態を更新する。自エージェント状態更新部222cは、更新された自エージェントの状態を含む移動メッセージを送受信コントローラ212の移動メッセージ送信部212dに出力する。移動メッセージに含まれる自エージェントの状態には、今回タイムステップにおける位置、方向、速度、加速度と、次タイムステップにおける位置、方向、速度、加速度とが含まれる。また、自エージェント状態更新部222cは、更新された自エージェントの状態に関する情報をサービスシステムクライアントシミュレータ232の動作状態情報生成部232bに出力する。
4-2-4.サービスシステムクライアントシミュレータの詳細
サービスシステムクライアントシミュレータ232において、経路計画用情報受信部232aは、サービスメッセージ受信部211bからサービスメッセージを取得する。サービスメッセージ受信部212bから取得されるサービスメッセージは、サービスシステムが自律ロボット/車両を用いてサービスを提供するための動作指示情報と他のサービスシステムに関する情報とを含む。経路計画用情報受信部232aは、動作指示情報と他サービスシステム情報とをシミュレータコア242の全体的経路計画部242aに出力する。
動作状態情報生成部232bは、シミュレータコア242のアクチュエータ操作量決定部242cから自エージェントの次タイムステップにおけるアクチュエータ操作量を取得する。また、動作状態情報生成部232bは、3D物理エンジン222のセンサ情報生成部222bからセンサ情報を取得するとともに、自エージェント状態更新部222cから3次元空間における自エージェントの状態を取得する。動作状態情報生成部232bは、取得されたこれらの情報に基づいてサービスの提供に係る自エージェントの動作状態を表す動作状態情報を生成する。動作状態情報生成部232bは、動作状態情報を含むサービスメッセージを送受信コントローラ212のサービスメッセージ送信部212eに出力する。
4-2-5.シミュレータコアの詳細
シミュレータコア242において、全体的経路計画部242aは、3D物理エンジン222のセンサ情報生成部222bからセンサ情報を取得する。また、全体的経路計画部242aは、サービスシステムクライアントシミュレータ232の経路計画用情報受信部232aから動作指示情報と他サービスシステム情報とを取得する。全体的経路計画部242aは、取得されたこれらの情報に基づいて仮想世界2における自エージェントの全体的な経路を計画する。全体的な経路とは、自エージェントの現在位置から目標地点までの経路を意味する。センサ情報生成部222bと経路計画用情報受信部232aとから取得される情報は毎回変化するので、全体的経路計画部242aは、タイムステップ毎に全体的経路計画を立て直す。全体的経路計画部242aは、決定された全体的経路計画を局所的経路計画部242bに出力する。
局所的経路計画部242bは、全体的経路計画部242aから全体的経路計画を取得する。局所的経路計画部242bは、全体的経路計画に基づいて局所的な経路計画を立てる。局所的な経路とは、例えば、現時点から所定タイムステップ後までの経路、或いは、現在位置から所定距離までの経路を意味する。局所的経路計画は、例えば、自エージェントが辿るべき位置の集合と、各位置における速度或いは加速度とで表される。局所的経路計画部242bは、決定された局所的経路計画をアクチュエータ操作量決定部242cに出力する。
アクチュエータ操作量決定部242cは、局所的経路計画部242bから局所的経路計画を取得する。アクチュエータ操作量決定部242cは、局所的経路計画に基づいて次タイムステップにおける自エージェントのアクチュエータ操作量を決定する。ここでいうアクチュエータとは、自エージェントの方向、速度、及び加速度を制御するアクチュエータである。自エージェントが車輪で走行する自律ロボット或いは自律車両である場合、例えば、制動装置、駆動装置、操舵装置などのアクチュエータが操作対象となる。アクチュエータ操作量決定部242cは、決定したアクチュエータ操作量を次タイムステップ状態算出部242d、及びサービスシステムクライアントシミュレータ232の動作状態情報生成部232bに出力する。
次タイムステップ状態算出部242dは、アクチュエータ操作量決定部242cで決定されたアクチュエータ操作量を取得する。次タイムステップ状態算出部242dは、アクチュエータ操作量に基づいて次タイムステップにおける自エージェントの状態を算出する。算出される自エージェントの状態は、次タイムステップにおける自エージェントの位置、方向、速度、及び加速度を含む。次タイムステップ状態算出部242dは、算出された次タイムステップにおける自エージェントの状態を3D物理エンジン222の自エージェント状態更新部222cに出力する。
4-3.VR歩行者エージェント用エージェントシミュレータ
図17は、VR歩行者エージェント用のエージェントシミュレータ203の構成と情報の流れを示すブロック図である。VR歩行者エージェントとは、実在の人がVR(Virtual Reality)システムを用いてシミュレーションの対象である仮想世界2に参加するための歩行者エージェントである。以下、VR歩行者エージェント用のエージェントシミュレータ203の全体構成と各部の詳細、及びエージェントシミュレータ203における情報の流れについて説明する。
4-3-1.VR歩行者エージェント用エージェントシミュレータの全体構成
エージェントシミュレータ203は、その機能として、送受信コントローラ213、3D物理エンジン223、サービスシステムクライアントシミュレータ233、及びシミュレータコア243を備える。これらの機能は、概念として、それぞれ送受信コントローラ210、3D物理エンジン220、サービスシステムクライアントシミュレータ230、及びシミュレータコア240に含まれる。
送受信コントローラ213は、各種メッセージを受信する機能として、移動メッセージ受信部213a、サービスメッセージ受信部213b、及びコントロールメッセージ受信部213cを備える。また、送受信コントローラ213は、各種メッセージを送信する機能として、移動メッセージ送信部213d、サービスメッセージ送信部213e、及びコントロールメッセージ送信部213fを備える。さらに、送受信コントローラ213は、シミュレーション動作制御部213hを備える。送受信コントローラ213を構成する各部213a~213hは、それぞれがプログラム或いはプログラムの一部である。
3D物理エンジン223は、その機能として、周囲エージェント状態更新部223a、視覚情報生成部223b、及び自エージェント状態更新部223cを備える。3D物理エンジン223を構成する各部223a、223b、223cは、それぞれがプログラム或いはプログラムの一部である。
サービスシステムクライアントシミュレータ233は、その機能として、サービス提供状態情報処理部233aとサービス利用情報生成部233bとを備える。サービスシステムクライアントシミュレータ231を構成する各部233a、233bは、それぞれがプログラム或いはプログラムの一部である。
シミュレータコア243は、その機能として、認知判断用情報提示部243a、移動操作受付部243b、次タイムステップ状態算出部243c、及びアプリ操作受付部243dを備える。シミュレータコア243を構成する各部243a、243b、243c、243dは、それぞれがプログラム或いはプログラムの一部である。
4-3-2.送受信コントローラの詳細
送受信コントローラ213において、移動メッセージ受信部213aは、移動メッセージディスパッチャ310から移動メッセージを受信する。移動メッセージ受信部213aは、受信した移動メッセージを3D物理エンジン223の周囲エージェント状態更新部223aに出力する。
サービスメッセージ受信部213bは、バックエンドサーバ400からサービスメッセージを受信する。サービスメッセージ受信部213bは、受信したサービスメッセージをサービスシステムクライアントシミュレータ233のサービス提供状態情報処理部233aに出力する。
コントロールメッセージ受信部213cは、シミュレーションコンダクタ320からシミュレーション制御メッセージを受信する。コントロールメッセージ受信部213cは、受信したミュレーション制御メッセージをシミュレーション動作制御部213hに出力する。
移動メッセージ送信部213dは、3D物理エンジン223の自エージェント状態更新部223cから自エージェントの現在の状態を含む移動メッセージを取得する。移動メッセージ送信部213dは、取得した移動メッセージを移動メッセージディスパッチャ310に送信する。
サービスメッセージ送信部213eは、サービスシステムクライアントシミュレータ233のサービス利用情報生成部233bからサービス利用情報を含むサービスメッセージを取得する。サービスメッセージ送信部213eは、取得したサービスメッセージをバックエンドサーバ400に送信する。
コントロールメッセージ送信部213fは、シミュレーション動作制御部213hからエージェントシミュレータ203の制御状態を含むシミュレーション制御メッセージを取得する。コントロールメッセージ送信部213fは、シミュレーション動作制御部213hから取得したシミュレーション制御メッセージをシミュレーションコンダクタ320に送信する。
シミュレーション動作制御部213hは、コントロールメッセージ受信部213cからシミュレーション制御メッセージを取得する。シミュレーション動作制御部213hは、シミュレーション制御メッセージに含まれる指示に従ってエージェントシミュレータ203のシミュレーション動作を制御する。VR歩行者エージェントの仮想世界2への参加条件が満たされない場合、シミュレーションコンダクタ320からエージェントシミュレータ203に対してシミュレーションの停止が指示される。
前述のエージェントシミュレータ201、202及び後述するエージェントシミュレータ204は、必要に応じてシミュレーション速度を変更することができる。しかし、シミュレーション速度が変更された場合、VR歩行者エージェントを介して仮想世界2に参加している実在の参加者は、実世界とは異なる時間の流れに対して強い違和感を覚える虞がある。ゆえに、MASシステム100では、シミュレーションが実時間で行われていることを参加条件として、仮想世界2へのVR歩行者エージェントの参加が許容される。実世界の時間の流れよりもシミュレーション速度が加速或いは減速される場合、シミュレーションコンダクタ320は、エージェントシミュレータ203によるシミュレーションを停止させる。シミュレーション動作制御部213hは、エージェントシミュレータ203の現在の制御状態を含むシミュレーション制御メッセージをコントロールメッセージ送信部213fに出力する。
4-3-3.3D物理エンジンの詳細
3D物理エンジン223において、周囲エージェント状態更新部223aは、移動メッセージ受信部213aから移動メッセージを取得する。移動メッセージ受信部213aから取得される移動メッセージは、移動メッセージディスパッチャ310を経由して他のエージェントシミュレータから送られた移動メッセージである。周囲エージェント状態更新部223aは、取得した移動メッセージに基づいて自エージェントの周囲に存在する周囲エージェントの現在の状態を推定する。
周囲エージェントの現在の状態を過去の状態から推定する場合、周囲エージェント状態更新部223aは、ログに保存されている周囲エージェントの過去の状態を使用する。周囲エージェントの過去の状態を用いて現在の状態を推定する方法は図3を用いて説明した通りである。周囲エージェント状態更新部223aは、推定した周囲エージェントの現在の状態を視覚情報生成部223bに出力するとともに、ログを更新する。
視覚情報生成部223bは、周囲エージェント状態更新部223aから周囲エージェントの現在の状態を取得する。視覚情報生成部223bは、周囲エージェントの現在の状態に基づいて自エージェントからの観測で得られる周辺情報を生成する。自エージェントは歩行者であるので、観測で得られる周辺情報とは、歩行者の目で捉えられる視覚情報を意味する。視覚情報生成部223bは、生成された視覚情報をシミュレータコア243の認知判断用情報提示部243a、及び移動操作受付部243bに出力する。
自エージェント状態更新部223cは、シミュレータコア243の次タイムステップ状態算出部243cから、シミュレータコア243で演算された次タイムステップにおける自エージェントの状態を取得する。自エージェント状態更新部223cは、シミュレータコア243による演算結果に基づいて3次元空間における自エージェントの状態を更新する。自エージェント状態更新部223cは、更新された自エージェントの状態を含む移動メッセージを送受信コントローラ213の移動メッセージ送信部213dに出力する。移動メッセージに含まれる自エージェントの状態には、今回タイムステップにおける位置、方向、速度、加速度と、次タイムステップにおける位置、方向、速度、加速度とが含まれる。また、自エージェント状態更新部223cは、更新された自エージェントの状態に関する情報をサービスシステムクライアントシミュレータ233のサービス利用情報生成部233bに出力する。
4-3-4.サービスシステムクライアントシミュレータの詳細
サービスシステムクライアントシミュレータ233において、サービス提供状態情報処理部233aは、サービスメッセージ受信部213bからサービスメッセージを取得する。サービスメッセージ受信部213bから取得されるサービスメッセージはサービス提供状態情報を含む。サービス提供状態情報処理部233aは、サービス提供状態情報を処理し、サービスシステムのユーザとしての自エージェントの状態に関する情報と、ユーザ端末のサービスアプリへの入力項目とを取得する。自エージェントのユーザとしての状態に関する情報はユーザ端末に提示される情報であり、入力項目は自エージェントがサービスを利用するために入力を依頼される情報である。サービス提供状態情報処理部233aは、自エージェントのユーザとしての状態に関する情報と、ユーザ端末のサービスアプリへの入力項目とをシミュレータコア243の認知判断用情報提示部243a及びアプリ操作受付部243dに出力する。
サービス利用情報生成部233bは、シミュレータコア243のアプリ操作受付部243dから、VR歩行者エージェントを介して仮想世界2に参加している実在の参加者によるVR上でのサービスアプリの操作を取得する。また、サービス利用情報生成部233bは、3D物理エンジン223の自エージェント状態更新部223cから3次元空間における自エージェントの状態を取得する。サービス利用情報生成部233bは、取得されたこれらの情報に基づいてサービス利用情報を生成するとともに、自エージェントのサービスの利用状態を更新する。サービス利用情報生成部233bは、サービス利用情報を含むサービスメッセージを送受信コントローラ213のサービスメッセージ送信部213eに出力する。
4-3-5.シミュレータコアの詳細
シミュレータコア243において、認知判断用情報提示部243aは、3D物理エンジン223の視覚情報生成部223bから視覚情報を取得する。また、認知判断用情報提示部243aは、サービスシステムクライアントシミュレータ231のサービス提供状態情報処理部233aから自エージェントのユーザとしての状態に関する情報と、ユーザ端末のサービスアプリへの入力項目とを取得する。取得されたこれらの情報は、VR歩行者エージェントを介して仮想世界2に参加している実在の参加者にとっての認知判断用の情報である。認知判断用情報提示部243aは、認知判断用の情報を実在参加者に対してVRシステムを通じて提示する。
移動操作受付部243bは、3D物理エンジン223の視覚情報生成部223bから視覚情報を取得する。そして、移動操作受付部243bは、VRシステムを通じて視覚情報を実在参加者に提示しながら、実在参加者によるVR上での移動操作を受け付ける。移動操作受付部243bは、受け付けた実在参加者によるVR上での移動操作を次タイムステップ状態算出部243dに出力する。
次タイムステップ状態算出部243dは、移動操作受付部243bから実在参加者によるVR上での移動操作を取得する。次タイムステップ状態算出部243dは、実在参加者によるVR上での移動操作に基づいて次タイムステップにおける自エージェントの状態を算出する。算出される自エージェントの状態は、次タイムステップにおける自エージェントの位置、方向、速度、及び加速度を含む。次タイムステップ状態算出部243dは、算出された次タイムステップにおける自エージェントの状態を3D物理エンジン223の自エージェント状態更新部223cに出力する。
アプリ操作受付部243dは、3D物理エンジン223の視覚情報生成部223bから視覚情報を取得する。また、アプリ操作受付部243dは、サービスシステムクライアントシミュレータ233のサービス提供状態情報処理部233aから自エージェントのユーザとしての状態に関する情報と、ユーザ端末のサービスアプリへの入力項目とを取得する。アプリ操作受付部243dは、取得したこれらの情報を実在参加者に対してVRシステムを通じて提示しながら、実在参加者によるVR上でのサービスアプリの操作を受け付ける。アプリ操作受付部243dは、受け付けた実在参加者によるVR上でのサービスアプリの操作をサービスシステムクライアントシミュレータ233のサービス利用情報生成部233bに出力する。
4-4.路側センサエージェント用エージェントシミュレータ
図18は、路側センサエージェント用のエージェントシミュレータ204の構成と情報の流れを示すブロック図である。路側センサエージェントとは、自律ロボット/車両エージェントの仮想世界2における位置情報の取得に用いられる路側センサのエージェントである。路側センサエージェントにより取得される自律ロボット/車両エージェントの位置情報は、バックエンドサーバ400が関係するサービスシステムにおいて使用される。以下、路側センサエージェント用のエージェントシミュレータ204の全体構成と各部の詳細、及びエージェントシミュレータ204における情報の流れについて説明する。
4-4-1.路側センサエージェント用エージェントシミュレータの全体構成
エージェントシミュレータ204は、その機能として、送受信コントローラ214、3D物理エンジン224、及びサービスシステムクライアントシミュレータ234を備える。これらの機能は、概念として、それぞれ送受信コントローラ210、3D物理エンジン220、及びシミュレータコア240に含まれる。エージェントシミュレータ204は、他のエージェントシミュレータとは異なりシミュレータコアは備えない。
送受信コントローラ214は、各種メッセージを受信する機能として、移動メッセージ受信部214a、及びコントロールメッセージ受信部214bを備える。また、送受信コントローラ212は、各種メッセージを送信する機能として、サービスメッセージ送信部214e、及びコントロールメッセージ送信部214fを備える。さらに、送受信コントローラ212は、シミュレーション動作制御部214hを備える。送受信コントローラ214を構成する各部214a~214hは、それぞれがプログラム或いはプログラムの一部である。
3D物理エンジン224は、その機能として、周囲エージェント状態更新部224a、及びセンサ情報生成部224bを備える。3D物理エンジン224を構成する各部224a、224bは、それぞれがプログラム或いはプログラムの一部である。
サービスシステムクライアントシミュレータ234は、その機能として、サービスメッセージ生成部234aを備える。サービスシステムクライアントシミュレータ234を構成するサービスメッセージ生成部234aは、プログラム或いはプログラムの一部である。
4-4-2.送受信コントローラの詳細
送受信コントローラ214において、移動メッセージ受信部214aは、移動メッセージディスパッチャ310から移動メッセージを受信する。移動メッセージ受信部214aは、受信した移動メッセージを3D物理エンジン224の周囲エージェント状態更新部224aに出力する。
コントロールメッセージ受信部214cは、シミュレーションコンダクタ320からシミュレーション制御メッセージを受信する。コントロールメッセージ受信部214cは、受信したミュレーション制御メッセージをシミュレーション動作制御部214hに出力する。
サービスメッセージ送信部214eは、サービスシステムクライアントシミュレータ234のサービスメッセージ生成部234aからセンサ情報を含むサービスメッセージを取得する。サービスメッセージ送信部214eは、取得したサービスメッセージをバックエンドサーバ400に送信する。
コントロールメッセージ送信部214fは、シミュレーション動作制御部214hからエージェントシミュレータ202の制御状態を含むシミュレーション制御メッセージを取得する。コントロールメッセージ送信部214fは、シミュレーション動作制御部214hから取得したシミュレーション制御メッセージをシミュレーションコンダクタ320に送信する。
シミュレーション動作制御部214hは、コントロールメッセージ受信部214cからシミュレーション制御メッセージを取得する。シミュレーション動作制御部214hは、シミュレーション制御メッセージに含まれる指示に従ってエージェントシミュレータ202のシミュレーション動作を制御する。例えば、シミュレーションの時間粒度の変更が指示された場合、シミュレーション動作制御部214hは、エージェントシミュレータ202によるシミュレーションの時間粒度を初期値から指示された時間粒度に変更する。時間粒度の初期値はエージェントシミュレータ204に設定値として記憶されている。また、時間粒度の上限値と下限値は、エージェントの種類ごとにシミュレーションコンダクタ320に記憶されている。
シミュレーション制御メッセージによる指示内容がシミュレーション速度である場合、シミュレーション動作制御部214hは、3D物理エンジン224の動作周波数を指示されたシミュレーション速度に従って変化させ、エージェントシミュレータ204の演算速度を加速或いは減速する。シミュレーションの停止が指示された場合、シミュレーション動作制御部214hは、エージェントシミュレータ204によるシミュレーションを停止させる。シミュレーションの休止が指示された場合にはシミュレーションを休止させ、再開が指示された場合にシミュレーションを再開させる。シミュレーション動作制御部214hは、エージェントシミュレータ204の現在の制御状態を含むシミュレーション制御メッセージをコントロールメッセージ送信部214fに出力する。
4-4-3.3D物理エンジンの詳細
3D物理エンジン224において、周囲エージェント状態更新部224aは、移動メッセージ受信部214aから移動メッセージを取得する。移動メッセージ受信部214aから取得される移動メッセージは、移動メッセージディスパッチャ310を経由して他のエージェントシミュレータから送られた移動メッセージである。周囲エージェント状態更新部224aは、取得した移動メッセージに基づいて自エージェントの周囲に存在する周囲エージェントの現在の状態を推定する。
周囲エージェントの現在の状態を過去の状態から推定する場合、周囲エージェント状態更新部224aは、ログに保存されている周囲エージェントの過去の状態を使用する。周囲エージェントの過去の状態を用いて現在の状態を推定する方法は図3を用いて説明した通りである。周囲エージェント状態更新部224aは、推定した周囲エージェントの現在の状態をセンサ情報生成部224bに出力するとともに、ログを更新する。
センサ情報生成部224bは、周囲エージェント状態更新部224aから周囲エージェントの現在の状態を取得する。センサ情報生成部224bは、周囲エージェントの現在の状態に基づいて自エージェントからの観測で得られる周辺情報を生成する。自エージェントはカメラのような定置型の路側センサであるので、観測で得られる周辺情報とは、路側センサで捉えられるセンサ情報を意味する。センサ情報生成部224bは、生成されたセンサ情報をサービスシステムクライアントシミュレータ234のサービスメッセージ生成部234aに出力する。
4-4-4.サービスシステムクライアントシミュレータの詳細
サービスシステムクライアントシミュレータ234において、サービスメッセージ生成部234aは、3D物理エンジン224のセンサ情報生成部224bからセンサ情報を取得する。サービスメッセージ生成部234aは、取得されたセンサ情報を含むサービスメッセージを送受信コントローラ214のサービスメッセージ送信部214eに出力する。
5.MASシステムの物理構成
MASシステム100の物理構成について説明する。図19は、MASシステム100の物理構成の一例を示す図である。MASシステム100は、例えば、同一のサブネット30上に配置された複数のコンピュータ10で構成することができる。さらに、サブネット30と別のサブネット32とをゲートウェイ40によって接続することにより、サブネット32上に配置された複数のコンピュータ10までMASシステム100を拡大することができる。
図19に示す例では、ソフトウェアであるセンターコントローラ300は1つのコンピュータ10にインストールされている。ただし、センターコントローラ300の機能を複数のコンピュータ10に分散させてもよい。
また、MASシステム100は、複数のバックエンドサーバ400を備えている。図19に示す例では、それぞれのバックエンドサーバ400が別々のコンピュータ10にインストールされている。ただし、バックエンドサーバ400の機能を複数のコンピュータ10に分散させてもよい。また、1つのサーバを複数サーバに分割する仮想化技術によって、1つのコンピュータ10に複数のバックエンドサーバ400をインストールしてもよい。
図19に示す例では、1つのコンピュータ10に複数のエージェントシミュレータ200がインストールされている。1つのコンピュータ10の上で複数のエージェントシミュレータ200を独立して動作させる手法としては仮想化技術を用いることができる。仮想化技術としては仮想マシンでもよいしコンテナ仮想化でもよい。1つのコンピュータ10に同一種類の複数のエージェントシミュレータ200をインストールしてもよいし、種類の異なる複数のエージェントシミュレータ200をインストールしてもよい。なお、1つのコンピュータ10に1つのエージェントシミュレータ200のみがインストールされていてもよい。
以上のように、MASシステム100は、単一のコンピュータによる処理ではなく、複数のコンピュータ10を用いた並列分散処理を採用する。これにより、コンピュータの処理能力によって仮想世界2に搭乗させるエージェントの数が制限されることや、コンピュータの処理能力によって仮想世界2で提供されるサービスの数が制限されることを防ぐことができる。つまり、MASシステム100によれば、並列分散処理による大規模なシミュレーションが可能である。
6.その他
仮想世界2を外から観察するための観察用エージェントを設けても良い。観察用エージェントは、例えば、街角カメラのような定置物体でもよく、カメラを備えたドローンのような移動物体であってもよい。