(57)【特許請求の範囲】
【請求項１】
各々体と肩とを点で表現することにより人をモデル化した複数のエージェントの各々について、他のエージェントから受ける反発力として、前記他のエージェントとの体間の距離が長くなれば小さくなるように定めた体反発力と、前記他のエージェントとの肩間の距離が長くなれば小さくなるように定めた肩反発力との合力を設定する反発力設定部と、
前記複数のエージェントの各々について、前記設定された反発力と予め設定された進行方向に進もうとする力とに基づいて、前記エージェントの位置を計算する計算部と、
を備えるマルチエージェントシミュレーション装置。
【請求項２】
前記複数のエージェントの各々について、他のエージェントが、前記エージェントの位置を基準とした第１の範囲の中に存在するか否かを判断する判断部を更に備え、
前記反発力設定部は、前記他のエージェントが前記第１の範囲の中に存在すると判断された場合には、前記他のエージェントから受ける反発力として、前記体反発力と、前記肩反発力との合力を設定し、前記他のエージェントが前記第１の範囲の中に存在すると判断されなかった場合には、前記反発力として、前記体反発力のみを設定する請求項１記載のマルチエージェントシミュレーション装置。
【請求項３】
前記判断部は、前記他のエージェントが前記第１の範囲の中に存在すると判断されなかった場合には、前記他のエージェントが、前記第１の範囲より外側の所定の面積の第２の範囲の中に存在するか否かを更に判断し、
前記反発力設定部は、前記他のエージェントが前記第２の範囲の中に存在すると判断された場合にのみ、前記反発力として、前記体反発力のみを設定し、
前記計算部は、前記他のエージェントが前記第２の範囲の中に存在すると判断されなかった場合には、前記進行方向に進もうとする力のみに基づいて、前記エージェントの位置を計算する、
請求項２記載のマルチエージェントシミュレーション装置。
【請求項４】
各々体と肩とを点で表現することにより人をモデル化した複数のエージェントの各々について、他のエージェントから受ける反発力として、前記他のエージェントとの体間の距離が長くなれば小さくなるように定めた体反発力と、前記他のエージェントとの肩間の距離が長くなれば小さくなるように定めた肩反発力との合力を設定し、
前記複数のエージェントの各々について、前記設定された反発力と予め設定された進行方向に進もうとする力とに基づいて、前記エージェントの位置を計算する、
マルチエージェントシミュレーション方法。
【請求項５】
前記複数のエージェントの各々について、他のエージェントが、前記エージェントの位置を基準とした第１の範囲の中に存在するか否かを判断し、
前記他のエージェントが前記第１の範囲の中に存在すると判断された場合には、前記他のエージェントから受ける反発力として、前記体反発力と、前記肩反発力との合力を設定し、前記他のエージェントが前記第１の範囲の中に存在すると判断されなかった場合には、前記反発力として、前記体反発力のみを設定する請求項４記載のマルチエージェントシミュレーション方法。
【請求項６】
前記他のエージェントが前記第１の範囲の中に存在すると判断されなかった場合には、前記他のエージェントが、前記第１の範囲より外側の所定の面積の第２の範囲の中に存在するか否かを更に判断し、
前記他のエージェントが前記第２の範囲の中に存在すると判断された場合にのみ、前記反発力として、前記体反発力のみを設定し、
前記他のエージェントが前記第２の範囲の中に存在すると判断されなかった場合には、前記進行方向に進もうとする力のみに基づいて、前記エージェントの位置を計算する、
請求項５記載のマルチエージェントシミュレーション方法。
【請求項７】
コンピュータを、請求項１〜請求項３の何れか１項に記載のマルチエージェントシミュレーション装置の各部として機能させるためのマルチエージェントシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチエージェントシミュレーション装置、マルチエージェントシミュレーション方法、及びマルチエージェントシミュレーションプログラムに関する。
【背景技術】
【０００２】
近年、経済学をはじめとする社会科学分野において様々な社会現象をシミュレートするために、マルチエージェントシミュレーション（Ｍｕｌｔｉ Ａｇｅｎｔ−Ｓｉｍｕｌａｔｉｏｎ: ＭＡＳ）が用いられるようになった。マルチエージェントシミュレーションとは、多数のエージェントが影響しあうことを繰り返し、これにより引き起こされるマクロな現象をシミュレートするものである。例えば、狭い建物内に配置した複数の人間を表すエージェントを定義し、緊急時の人間の避難状況をシミュレートする場合や、交差点内に配置した複数の車を表すエージェントを定義し、渋滞発生と緩和をシミュレートする場合などがある。
【０００３】
図１１には、人の大きさのモデルが示されている。例えば、人の動きをシミュレートするマルチエージェントシミュレーションにおいて、人を、図１１に示すように、上方（又は下方）から見た「肩幅６０ｃｍ× 厚み４５ｃｍ」の楕円要素として表現する。
【０００４】
非特許文献１における拡張個別要素法（Ｅｘｔｅｎｄｅｄ Ｄｉｓｔｉｎｃｔ Ｅｌｅｍｅｎｔ Ｍｅｔｈｏｄ（ＥＤＥＭ））では、任意の２つの楕円体のペアの衝突判定を行っている。下記のような４段階の接触判定を用いることで、従来の楕円要素同士の衝突判定より計算を簡略化している。図１２には、あるエージェントを中心とする３つの仮想円が示されている。
【０００５】
第１のステップで、あるエージェントを中心とする第１の仮想円１００（パーソナルスペースの半径ｒの３倍の半径の円）内で、他のエージェントと接触しているのかを判定する。
【０００６】
第１のステップが肯定判定の場合に、第２のステップで、上記のあるエージェントを中心とする第２の仮想円１０２（パーソナルスペースの半径の円）内で、他のエージェントと接触しているのかを判定する。
【０００７】
第２のステップが肯定判定の場合に、第３のステップで、上記のあるエージェントを中心とする第３の仮想円１０４（肩幅を直径とした円）内で、他のエージェントと接触しているのかを判定する。
【０００８】
第３のステップが肯定判定の場合に、第４のステップで、上記のあるエージェントと他のエージェントの上記楕円要素（図１参照）同士が接触しているのかを判定する。
【０００９】
非特許文献２における楕円型ＲＶＯ（Ｅｌｌｉｐｔｉｃａｌ  Ｒｅｃｉｐｒｏｃａｌ  Ｖｅｌｏｃｉｔｙ  Ｏｂｓｔａｃｌｅｓ（ＥＲＶＯ））モデルでは、任意の２つの楕円体の衝突判定を行うために、下記のステップ（ＳＴＥＰ）を用いる。図１３には、ＥＲＶＯモデルを使ったシミュレーションにおける各ＳＴＥＰでの概念図が示されている。楕円要素同士の衝突の判定のための計算量は、円要素同士の衝突の判定のための計算量よりもはるかに多いので、座標変換行列を用いて、楕円要素を円要素に変換する。ＳＴＥＰ１における楕円要素Ａを、ＳＴＥＰ２に示すように、円Ａ′に変換する。当該座標変換行列を用いて、楕円要素Ｂは、歪楕円要素Ｂ′になる。
【００１０】
ＳＴＥＰ３で、円Ａ′の半径を歪楕円要素Ｂ′に加算することにより、歪楕円要素Ｂ′を歪楕円要素Ｄに変換する。これにより、点Ｃと歪楕円要素Ｄとの衝突判定に置換される。
【００１１】
ＳＴＥＰ４で、点Ｃ、歪楕円要素Ｄを、点Ｃ′、円要素Ｄ′に変換し、ＳＴＥＰ５で、点Ｃ′と円要素Ｄ′とが衝突するか否か判断し、点Ｃ′と円要素Ｄ′とが衝突すると判断した場合には、楕円要素Ａと楕円要素Ｂとが衝突すると判断する。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】杉本太一、目黒公郎著、「都市施設の安全性評価を目的とした群衆挙動の解析的研究」、生産研究56.3 (2004)、ｐ.223-226
【非特許文献２】安福健祐著、「楕円型ＲＶＯ モデルを用いた高密度群集流動の再現」、日本建築学会技術報告集17.35 (2011)、ｐ．187-190
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ところで、非特許文献１の発明では、上記第１のステップ〜第３のステップの何れかが否定判定された場合には、第４のステップでの楕円要素同士が接触しているのかの判定が実行されないので、全てのペアで楕円要素同士の接触判定を回避している。しかし、エージェントが他のエージェントと接触する場合には、４度の接触判定を行っているため、計算量が多くなる。
【００１４】
また、非特許文献２の発明では、直接楕円要素同士の距離を求めずに、空間の変換を計算して衝突の判定を行っている。座標変換行列を用いて、変換した空間での距離を計算している。しかし、全ての楕円体のペア間で距離の計算を行うには計算量が非常に多くなり、近傍のエージェント間での計算でも比較的計算量が多くなる。
【００１５】
本発明は、上記の課題に鑑みてなされたもので、マルチエージェントシミュレーションにおいて計算量を少なくすることができるマルチエージェントシミュレーション装置、マルチエージェントシミュレーション方法、及びマルチエージェントシミュレーションプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記の目的を達成するために請求項１に記載の発明に係るマルチエージェントシミュレーション装置は、各々体と肩とを点で表現することにより人をモデル化した複数のエージェントの各々について、他のエージェントから受ける反発力として、前記他のエージェントとの体間の距離が長くなれば小さくなるように定めた体反発力と、前記他のエージェントとの肩間の距離が長くなれば小さくなるように定めた肩反発力との合力を設定する反発力設定部と、前記複数のエージェントの各々について、前記設定された反発力と予め設定された進行方向に進もうとする力とに基づいて、前記エージェントの位置を計算する計算部と、を備えている。
【００１７】
反発力設定部は、各々体と肩とを点で表現することにより人をモデル化した複数のエージェントの各々について、他のエージェントから受ける反発力として、前記他のエージェントとの体間の距離が長くなれば小さくなるように定めた体反発力と、前記他のエージェントとの肩間の距離が長くなれば小さくなるように定めた肩反発力との合力を設定する。
【００１８】
計算部は、前記複数のエージェントの各々について、前記設定された反発力と予め設定された進行方向に進もうとする力とに基づいて、前記エージェントの位置を計算する。
【００１９】
このように、複数のエージェントの各々において、体と肩とを点で表現することにより人をモデル化し、他のエージェントから受ける反発力を設定し、設定された反発力と予め設定された進行方向に進もうとする力とに基づいて、前記エージェントの位置を計算する。よって、座標変換などの計算をしないことができ、計算量を少なくすることができる。
【００２０】
請求項２に記載の発明に係るマルチエージェントシミュレーション装置は、請求項１に記載の発明において、前記複数のエージェントの各々について、他のエージェントが、前記エージェントの位置を基準とした第１の範囲の中に存在するか否かを判断する判断部を更に備え、前記反発力設定部は、前記他のエージェントが前記第１の範囲の中に存在すると判断された場合には、前記他のエージェントから受ける反発力として、前記体反発力と、前記肩反発力との合力を設定し、前記他のエージェントが前記第１の範囲の中に存在すると判断されなかった場合には、前記反発力として、前記体反発力のみを設定する。
【００２１】
このように、前記他のエージェントが前記第１の範囲の中に存在すると判断された場合には、前記他のエージェントから受ける反発力として、前記体反発力と、前記肩反発力との合力を設定する。しかし、前記他のエージェントが前記第１の範囲の中に存在すると判断されなかった場合には、前記反発力として、前記体反発力のみを設定する。従って、前記他のエージェントが前記第１の範囲の中に存在すると判断されなかった場合には、前記反発力として、前記体反発力のみを考慮し、肩反発力を考慮しないので、計算量を少なくすることができる。
【００２２】
請求項３に記載の発明に係るマルチエージェントシミュレーション装置は、請求項２に記載の発明において、前記判断部は、前記他のエージェントが前記第１の範囲の中に存在すると判断されなかった場合には、前記他のエージェントが、前記第１の範囲より外側の所定の面積の第２の範囲の中に存在するか否かを更に判断し、前記反発力設定部は、前記他のエージェントが前記第２の範囲の中に存在すると判断された場合にのみ、前記反発力として、前記体反発力のみを設定し、前記計算部は、前記他のエージェントが前記第２の範囲の中に存在すると判断されなかった場合には、前記進行方向に進もうとする力のみに基づいて、前記エージェントの位置を計算する。
【００２３】
このように、前記他のエージェントが前記第２の範囲の中に存在すると判断された場合にのみ、前記反発力として、前記体反発力のみを設定する。しかし、前記他のエージェントが前記第２の範囲の中に存在すると判断されなかった場合には、前記進行方向に進もうとする力のみに基づいて、前記エージェントの位置を計算する。従って、前記他のエージェントが前記第２の範囲の中に存在すると判断されなかった場合には、反発力を考慮しないので、計算量を更に少なくすることができる。
【００２４】
本発明に係るマルチエージェントシミュレーションプログラムは、コンピュータを、請求項１〜請求項３の何れか１項に記載のマルチエージェントシミュレーション装置の各部として機能させるためのプログラムである。
【発明の効果】
【００２５】
以上説明したように、本発明の、マルチエージェントシミュレーション装置、方法、及びプログラムによれば、マルチエージェントシミュレーションにおいて計算量を少なくすることができる、という効果が得られる。
【図面の簡単な説明】
【００２６】
【図１】マルチエージェントシミュレーションシステム１０のブロック図である。
【図２】エージェントｉがエージェントｊから受ける反発力Ｆｉｊの概念図である。
【図３】エージェントｉがエージェントｊから受ける反発力Ｆｉｊと、エージェントｉがエージェントj から受ける体全体の体反発力ｆｂｏｄｙｉｊ及びエージェントｉの各肩がエージェントｊの各肩から受ける反発力ｆｓｈｏｌｄｉｊとの関係を示す図である。
【図４】α＝１、β＝３として、人（エージェントｉ）が別の人（エージェントｊ）から受ける反発力Ｆｉｊを計算した結果を示す図である。
【図５】マルチエージェントシミュレーション装置１２が実行するマルチエージェントシミュレーションプログラムを示すフローチャートである。
【図６】マルチエージェントシミュレーションのための初期処理を説明する図である。
【図７】周期境界条件を説明する図である。
【図８】肩を考慮せずに体からの反発力のみを計算したケースでのシミュレーション結果を示す図である。
【図９】肩を考慮して計算をしたケースでのシミュレーション結果を示す図である。
【図１０】変形例におけるエージェントｉに対してエージェントｊが遠方、中間位置、近傍に位置しているかを判断する方法を説明する図である。
【図１１】人の大きさのモデルを示す図である。
【図１２】あるエージェントを中心とする３つの仮想円を示す図である。
【図１３】ＲＶＯモデルを使ったシミュレーションにおける各ＳＴＥＰの概念図である。
【発明を実施するための形態】
【００２７】
以下、図面を参照して本発明の実施の形態を詳細に説明する。
（構成）
図１には、マルチエージェントシミュレーションシステム１０のブロック図が示されている。図１に示すように、マルチエージェントシミュレーションシステム１０は、マルチエージェントシミュレーション装置１２と、表示装置１４とを備えている。マルチエージェントシミュレーション装置１２は、後述するマルチエージェントシミュレーションにおける初期処理を実行する初期処理部１６と、マルチエージェントシミュレーションの回数を更新する回数更新部１８と、を備えている。マルチエージェントシミュレーション装置１２は、初期処理終了後に、エージェントの位置を判断する判断部２６、後述する反発力を設定する反発力設定部２０と、設定された反発力に基づいて、エージェントの位置を計算する計算部２２とを備えている。マルチエージェントシミュレーション装置１２は、計算された位置にエージェントが画面上で移動するように表示装置１４を制御する制御部２４を備えている。
【００２８】
マルチエージェントシミュレーション装置１２は、図示しないＣＰＵ、ＲＯＭ、メモリ、及び後述するマルチエージェントシミュレーションプログラムを記憶する記憶装置などを含んで構成されている。ＣＰＵが記憶装置に記憶されたマルチエージェントシミュレーションプログラムを実行することで、ＣＰＵは、上記各部（１６〜２６）として機能する。
【００２９】
次に、反発力について説明する。人は、正面から自分の方に近づく別の人とぶつからないように、事前に自分の進行方向を変える。このように人が自分の進行方向を変えるのは、別の人とぶつかって受ける物理的な力によるもではない。これは、お互いのパーソナルスペースを保とうとするため、もしくはぶつかるのを避けるために、自分と別の人との間に距離を保とうと心理的に作用する力によるものである。本実施の形態では、このように心理的に作用する力を反発力という。本実施の形態では、この反発力は、エージェントの部位と別のエージェントの部位との間の距離が長くなれば小さくなるように定めている。具体的には、エージェントｉがエージェントｊから受ける反発力Ｆｉｊは、
【００３０】
【数１】
0006561013.tif 000002
【００３１】
と表す。ここで、ｆｂｏｄｙｉｊは、エージェントｉがエージェントj から受ける体全体の体反発力である。ｆｓｈｏｌｄｉｊは、エージェントｉの各肩がエージェントｊの各肩から受ける肩反発力である。a、b は体反発力及び肩反発力のそれぞれにおける係数である。α、β はそれぞれの反発力の関数を冪関数の冪指数である。ｒｉｊはエージェントｉとエージェントｊの相対距離ベクトルで、エージェントｉ、ｊの座標をそれぞれ、ｘi、ｘjとした場合、ｒｉｊは以下となる。なお、ｘi、ｘjは、各エージェントの体の所定の水平面内の中心位置を基準に定められている。なお、高さ方向の位置は考慮されてはいない。
【００３２】
【数２】
0006561013.tif 000003
【００３３】
ｆｓｈｏｌｄｉｊにおけるｒｒｒｉｊ はエージェントｉの右肩とエージェントｊの右肩の相対距離ベクトルである。ｒｒｌｉｊ はエージェントｉの右肩とエージェントｊの左肩の相対距離ベクトルである。ｒｌｒｉｊ はエージェントｉの左肩とエージェントｊの右肩の相対距離ベクトルである。ｒｌｌｉｊ はエージェントｉの左肩とエージェントｊの左肩の相対距離ベクトルである。これらの相対距離ベクトルは、エージェントｉの右肩、左肩をそれぞれ、ｘｒｉｇｈｔi、ｘｌｅｆｔi とし、エージェントｊの右肩、左肩をそれぞれ、ｘｒｉｇｈｔj、ｘｌｅｆｔjとすると、次の通りである。
【００３４】
【数３】
0006561013.tif 000004
【００３５】
ここで、エージェントの右肩は、エージェントの進行方向に対する右側の肩であり、エージェントの左肩は、エージェントの進行方向に対する左側の肩である。ｘｒｉｇｈｔi、ｘｌｅｆｔi 、ｘｒｉｇｈｔj、ｘｌｅｆｔjは、各エージェントの各肩の部分の所定の水平面内の中心位置を基準に定められている。なお、高さ方向の位置は考慮されてはいない。
【００３６】
本実施の形態では、人を、体の所定の水平面内の中心位置、及び各肩の部分の所定の水平面内の中心位置の３点で表している。
【００３７】
図２には、エージェントｉがエージェントｊから受ける反発力Ｆｉｊの概念が示されている。図３には、エージェントｉがエージェントｊから受ける反発力Ｆｉｊと、エージェントｉがエージェントj から受ける体全体の体反発力ｆｂｏｄｙｉｊ及びエージェントｉの各肩がエージェントｊの各肩から受ける反発力ｆｓｈｏｌｄｉｊとの関係が示されている。エージェントｉがエージェントｊから受ける反発力Ｆｉｊは、エージェントｉがエージェントjから受ける体全体の体反発力ｆｂｏｄｙｉｊと、エージェントｉの各肩がエージェントｊの各肩から受ける肩反発力ｆｓｈｏｌｄｉｊとの合力である。
【００３８】
次に、本実施の形態において、マルチエージェントシミュレーションにおいて計算量を少なくする方法を説明する。
【００３９】
（第１の方法）
人は、別の人が自分の近傍に位置していると、体同士がぶつからないことばかりではなく、肩同士がぶつからないことも考慮して、自分の進行方向を変える。よって、別の人が自分の近傍に位置していると、人が別の人から受ける反発力は、体全体の体反発力と、肩反発力とにより定まる。一方、別の人が近傍より遠方に位置すると、体同士がぶつからないことを考慮するが、肩同士がぶつからないことは考慮しない。よって、別の人が近傍より遠方に位置すると、人が別の人から受ける反発力Ｆｉｊは、体全体の体反発力のみにより定まる。以上から、本実施の形態では、体全体の体反発力ｆｂｏｄｙｉｊ、肩反発力ｆｓｈｏｌｄｉｊにおける冪指数については、α＜βとする。この場合、別の人が近傍より遠方に位置すると、体全体の体反発力ｆｂｏｄｙｉｊに比べて、肩反発力ｆｓｈｏｌｄｉｊは、無視できるぐらい小さくなる。そこで、マルチエージェントシミュレーションでは、まず、別の人が近傍に位置する場合には、人が別の人から受ける反発力Ｆｉｊとして、体全体の体反発力ｆｂｏｄｙｉｊと、肩反発力ｆｓｈｏｌｄｉｊとを設定する。しかし、別の人が近傍より遠方に位置する場合には、人が別の人から受ける反発力Ｆｉｊとして、体全体の体反発力ｆｂｏｄｙｉｊのみを設定、即ち、近似して、肩反発力ｆｓｈｏｌｄｉｊは無視することにより、計算量を少なくすることができる。
【００４０】
図４には、α＝１、β＝３として、第１の方法に従って、人（エージェントｉ）が別の人（エージェントｊ）から受ける反発力Ｆｉｊを計算した結果が示されている。図４のｘ軸、ｙ軸は上記水平面の位置を示し、高さは、反発力Ｆｉｊを示す。なお、ｘ軸、ｙ軸の１は、３０ｃｍである。（ｘ、ｙ）＝（０、０）にエージェントｉが位置する。エージェントｊがｘ−ｙ平面の各位置に位置する場合、図４に示すように、近傍では肩からの反発力が効く反面、遠ざかると体からの反発力ｆｂｏｄｙｉｊのみの影響になっていることが分かる。
【００４１】
（第２の方法）
上記第１の方法では、別の人が近傍より遠方（周辺）に位置する場合には、人が別の人から受ける反発力Ｆｉｊとして、体全体の体反発力ｆｂｏｄｙｉｊのみを計算し、肩反発力ｆｓｈｏｌｄｉｊは計算しないことにより、計算量を少なくしている。しかし、別の人が、周辺よりも更に遠方に位置すると、体同士がぶつからないことをも考慮しない。そこで、マルチエージェントシミュレーションでは、別の人が近傍に位置する場合には、人が別の人から受ける反発力Ｆｉｊとして、体全体の体反発力ｆｂｏｄｙｉｊと、肩反発力ｆｓｈｏｌｄｉｊとを設定する。別の人が近傍より遠方（周辺：中間位置）に位置する場合には、人が別の人から受ける反発力Ｆｉｊとして、体全体の体反発力ｆｂｏｄｙｉｊのみを設定し、肩反発力ｆｓｈｏｌｄｉｊは無視する。別の人が中間位置より更に遠方に位置する場合には、人が別の人から受ける反発力Ｆｉｊ自体を計算しない。このように、別の人が周辺より遠方に位置する場合には、人が別の人から受ける反発力Ｆｉｊ自体を計算しないことにより、計算量を、第１の方法より少なくすることができる。なお、具体的には、例えば、２＜α＜βとする。
【００４２】
（作用）
次に、本実施の形態の作用を説明する。
図５は、マルチエージェントシミュレーション装置１２が実行するマルチエージェントシミュレーションプログラムを示すフローチャートである。
図５のステップ３２〜３８で、初期処理部１６は、初期処理を実行する。図６は、マルチエージェントシミュレーションのための初期処理を説明する図である。図７は、周期境界条件を説明する図である。
【００４３】
初期処理部１６は、図５のステップ３２で、図６に示すように、右に進むエージェント群７２を生成し、ステップ３４で、左に進むエージェント群７４を生成する。具体的には、初期処理部１６は、右に進むエージェント群７２には右方向に進もうとする力を設定し、左に進むエージェント群７４には左方向に進もうとする力を設定する。ステップ３６で、各エージェントの初期配置（エージェントの位置と右肩の位置と左肩の位置）をランダムに設定する。
【００４４】
ステップ３８で、初期処理部１６は、境界条件を設定する。図６に示すように、境界条件として、エージェントの横方向への進行を規制する壁７６、７８を与え、左右の両端８０には周期境界条件として右端から左端へ、左端から右端へ移動可能とする。図７に示すように、壁７６、７８、左右の両端８０により区切られる領域８２において、左右の両端８０では、エージェントが右端から左端へ、左端から右端へ移動可能となっている。なお、領域８２には、ターゲットとなるＩ個のエージェントが存在する。
【００４５】
図５のステップ４０で、回数更新部１８は、シミュレーションの回数を識別する変数ｔを０に初期化し、ステップ４２で、回数更新部１８は、変数ｔを１インクリメントする。
【００４６】
ステップ４４で、反発力設定部２０は、上記領域８２の中にいる合計Ｉ個のエージェントの各々を識別する変数ｉ、上記領域８２の中にいる、変数ｉで識別されるエージェント以外の合計Ｊ個（＝Ｉ−１）のエージェントを識別する変数ｊを０に初期化する。ステップ４６で、反発力設定部２０は、変数ｉを１インクリメントし、ステップ４８で、反発力設定部２０は、変数ｊを１インクリメントする。
【００４７】
ここで、エージェントｉを基準にエージェントｊがどこに位置するのかが、反発力の計算量の減少には重要である。エージェントｉを基準にエージェントｊが、近傍、遠方、近傍と遠方との中間位置に位置するかを判断する。
【００４８】
そこで、本実施の形態では、まず、ステップ５０で、反発力設定部２０は、上記ステップ３８で設定された、又は後述するステップ６４で計算されたエージェントｉ及びエージェントｊの位置に基づいて、エージェントｉとエージェントｊとのユークリッド距離ｒｉｊを計算する。
【００４９】
そして、ステップ５２で、判断部２６は、ユークリッド距離ｒｉｊが第１の距離ｒ１以上か否かを判断することにより、エージェントｉに対してエージェントｊが遠方に位置しているかを判断する。エージェントｉに対してエージェントｊが遠方に位置していると判断された場合には、ステップ５４で、反発力設定部２０は、エージェントｊから受けるエージェントｉの反発力Ｆｉｊに０を設定する。なお、その後、処理はステップ６２に進む。
【００５０】
エージェントｉに対してエージェントｊが遠方に位置していると判断されなかった場合には、ステップ５６で、判断部２６は、エージェントｉに対してエージェントｊが、中間位置（第２の範囲）に位置するかを判断する。具体的には、判断部２６は、ユークリッド距離ｒｉｊが、第１の距離ｒ１よりも短く、かつ第１の距離ｒ１よりも短い第２の距離ｒ０以上か否かを判断する。エージェントｉに対してエージェントｊが中間位置に位置すると判断された場合には、ステップ５８で、反発力設定部２０は、上記ステップ５０で計算されたユークリッド距離ｒｉｊと、エージェントｉ及びエージェントｊの位置とに基づいて、エージェントｊから受けるエージェントｉの反発力Ｆｉｊに、体反発力ｆｂｏｄｙｉｊを設定する。なお、その後、処理はステップ６２に進む。
【００５１】
エージェントｉに対してエージェントｊが中間位置に位置すると判断されなかった場合には、エージェントｉに対してエージェントｊが近傍（第１の範囲）に位置していると判断できるので、ステップ６０で、反発力設定部２０は、上記ステップ５０で計算されたユークリッド距離ｒｉｊと、エージェントｉ及びエージェントｊの位置と、右肩の位置と、左肩の位置とに基づいて、エージェントｊから受けるエージェントｉの反発力Ｆｉｊに、ｆｂｏｄｙｉｊ（体反発力）＋ｆｓｈｏｌｄｉｊ（肩反発力）を設定する。なお、その後、処理はステップ６２に進む。
【００５２】
ステップ６２で、反発力設定部２０は、変数ｊが、上記領域８２の中にいる、変数ｉで識別されるエージェント以外のエージェントの合計の数である総数Ｊ（＝Ｉ−１）か否かを判断する。変数ｊが総数Ｊでないと判断された場合には、エージェントｉに対する反発力が設定されていないエージェントがあるので、処理はステップ４８に戻って、以上の処理（ステップ４８〜６２）を繰り返す。変数ｊが総数Ｊであると判断された場合には、エージェントｉに反発力が設定されていないエージェントがないので、処理はステップ６４に進む。
【００５３】
ステップ６４で、計算部２２は、以下の式（９）〜（１１）を計算して、エージェントｉの位置ｘi(t＋１)を計算すると共に、エージェントｉの右肩の位置及び左肩の位置を計算する。
【００５４】
【数４】
0006561013.tif 000005
【００５５】
ｘi(t) は、前回のシミュレーション時（t−１）におけるエージェントｉの座標である。Ｖi(t) は前回のシミュレーション時（t−１）におけるエージェントｉの速度である。γは、速度を距離に変換する係数である。Ｆi(t) は、エージェントｉにかかる力である。具体的には、Ｆi(t) は、他の全てのエージェント（ｊ＝１〜Ｊ）から受け、かつ上記設定された反発力Ｆｉｊの合力、上記初期処理で設定された進行方向に進もうとする力、及び壁７６、７８から受ける反発力の合力である。δは、力を速度に変換する係数である。Ｖmaｘ は、エージェントの速度の絶対値の上限である。
【００５６】
ステップ６６で、反発力設定部２０は、変数ｉが総数Ｉに等しいか否かを判断する。変数ｉが総数Ｉに等しくない場合には、今回のシミュレーション時（ｔ）において反発力が設定されずに、位置が計算されていないエージェントがあるので、処理はステップ４６に戻って、以上の処理（ステップ４６〜６６）を実行する。
【００５７】
変数ｉが総数Ｉに等しいと判断された場合には、今回のシミュレーション時（ｔ）において、全てのエージェントについて位置が計算されたので、ステップ６８で、制御部２４は、各エージェント（ｊ＝１〜Ｊ）が、位置ｘi(t＋１)に画面上で移動するように、表示装置１４を制御する。
【００５８】
ステップ７０で、回数更新部１８は、変数ｔがシミュレーションの回数の総数Ｔ（例えば、１００００回 ）に等しいか否かを判断する。変数ｔが総数Ｔに等しくない場合には、シミュレーションする必要があるので、処理はステップ４２に戻って、以上の処理（ステップ４２〜７０）を実行する。変数ｔが総数Ｔに等しい場合には、シミュレーションする必要がないので、本マルチエージェントシミュレーションプログラムの実行を終了する。
【００５９】
図８には、肩を考慮せずに体からの反発力のみを計算したケースでのシミュレーション結果が示されている。図９には、肩を考慮して計算をしたケースでのシミュレーション結果が示されている。図９に示すように、肩が当たることを考慮した方が、肩を考慮しない場合（図８）より、エージェント同士の正面衝突を回避する傾向があり、かつ同じ方向に進むエージェント同士では並んで進もうとする傾向が強くなる。より現実的な『狭い通路での混雑状況では、列を作って並んで人が流れる』という現象を再現することができる。
【００６０】
（効果）
以上説明したように、第１の実施の形態によれば、両肩及び体を点として人が別の人から受ける反発力Ｆｉｊを計算するので、座標変換などの計算をしないことができ、計算量を少なくすることができる。
【００６１】
第１の実施の形態では、別の人が周辺に位置する場合には、人が別の人から受ける反発力Ｆｉｊとして、体反発力ｆｂｏｄｙｉｊのみを計算し、肩反発力ｆｓｈｏｌｄｉｊは計算しないことにより、計算量を少なくすることができる。計算の効率化も図ることができる。
【００６２】
また、第１の実施の形態では、別の人が周辺より遠方に位置する場合には、人が別の人から受ける反発力Ｆｉｊ自体を計算しないことにより、計算量を更に少なくすることができる。計算の効率化も更に図ることができる。
【００６３】
（変形例）
以上説明した実施の形態では、エージェントｉに対してエージェントｊが遠方、中間位置、近傍に位置しているかの判断を次のよう実行している。即ち、ステップ５０で、反発力設定部２０は、エージェントｉとエージェントｊとのユークリッド距離ｒｉｊを計算する。ステップ５２、５６で、計算されたユークリッド距離ｒｉｊと、第１の距離ｒ１、第２の距離ｒ０とを比較して、エージェントｉに対してエージェントｊが遠方、中間位置に位置しているかの判断をしている。本発明では、これに限定されず、次のように判断することができる。
【００６４】
図１０には、エージェントｉに対してエージェントｊが遠方、中間位置、近傍に位置しているかを判断する別の方法を説明する図である。図１０に示すように、領域８２を、各々面積が等しい正方形の複数の小領域に予め分割しておく。
【００６５】
ステップ５０では、反発力設定部２０は、ユークリッド距離ｒｉｊを計算することに代えて、エージェントｉの位置を基準に、近傍の領域９０、中間位置の領域９２、遠方の領域９４を設定する。例えば、エージェントｉの位置に対応する小領域を取り囲む８個の小領域を近傍の領域９０として設定する。近傍の領域９０を取り囲む１６個の小領域と、１６個の小領域を取り囲む２４個の小領域とを、中間位置の領域９２として設定する。中間位置の領域の外側の全ての小領域を遠方の領域９４として設定する。
【００６６】
ステップ５２では、反発力設定部２０は、エージェントｊに対応する小領域が遠方の領域９４に位置するか否かを判断する。また、ステップ５６では、反発力設定部２０は、エージェントｊに対応する小領域が中間位置の領域９２に位置するか否かを判断する。
【００６７】
このように、エージェントｊに対応する小領域が近傍の領域９０、中間位置の領域９２、遠方の領域９４の何れに位置するかを判断すれば、ユークリッド距離を計算しかつ第１の距離ｒ１、第２の距離ｒ０と比較することよりも、計算量を少なくすることができる。
【００６８】
図１０に示す変形例では、中間位置の領域９２を、各々面積が等しい正方形の複数の小領域に予め分割している。本発明では、これに限定されず、次のようにすることができる。中間位置の領域９２内において、より外側の領域の小領域の面積をより大きくする。例えば、近傍の領域９０を取り囲む１６個の小領域を取り囲む領域を、１６個の小領域の各々の２倍の面積の小領域に分割する。即ち、図１０の中間位置の領域９２における上記２４個の小領域を２個併せた、各々２倍の面積の合計１２個の小領域に分割する。そして、２倍の面積の小領域に、複数のエージェントが位置する場合には、反発力Ｆｉｊを近似計算する。即ち、２倍の面積の小領域に位置する複数のエージェント、例えば、３個のエージェントの内、最も内側に位置するエージェントとの反発力を計算し、計算した反発力を３倍する。また、本願発明は、当該最も内側に位置するエージェントとの反発力を３倍することに限定されない。例えば、３個のエージェントの重心座標を用いて反発力を計算する。更に、本願発明は、上記のように、近傍の領域９０を取り囲む１６個の小領域を取り囲む領域を、１６個の小領域の各々の２倍の面積の小領域に分割して、上記のように反発力を計算することに限定されない。例えば、上記少領域内に複数のエージェントがある場合には、重心座標を用いて反発力を計算する。以上のように反発力を近似計算するので、計算量をより少なくすることができる。なお、近傍の領域９０は、「第１の範囲」に対応する。中間位置の領域９２は、「第２の範囲」に対応する。
【００６９】
また、前述して実施の形態では、肩反発力を、エージェントｉの両肩とエージェントｊの両肩との関係で定めている。本願発明はこれに限定されない。エージェントｉの両肩とエージェントｊの両肩の内、ぶつかりやすい最も近い肩のペアのみの関係で定めるようにしてもよい。
【００７０】
なお、マルチエージェントシミュレーションプログラムをコンピュータ読み取り可能な記録媒体に記録して、当該記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するようにしてもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものであってもよい。また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリ等の書き込み可能な不揮発性メモリ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。
【００７１】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（例えばＤＲＡＭ（Dynamic Ｒandom Access Memoｒy））のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００７２】
以上、この発明の実施の形態について図面を参照して詳述してきたが、具体的な構成はこの実施の形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【００７３】
（応用例）
以上説明した実施の形態は、マルチエージェントシミュレーションの分野において、特に通路や、駅のホーム、混雑しているイベント会場付近での人の流れの解析分野などに応用することができる。
【符号の説明】
【００７４】
１０   マルチエージェントシミュレーションシステム
１２   マルチエージェントシミュレーション装置
１４   表示装置
１６   初期処理部
１８   回数更新部
２０   反発力設定部
２２   計算部
２４   制御部
２６   判断部
【図１】
0006561013.tif 000006
【図２】
0006561013.tif 000007
【図３】
0006561013.tif 000008
【図４】
0006561013.tif 000009
【図５】
0006561013.tif 000010
【図６】
0006561013.tif 000011
【図７】
0006561013.tif 000012
【図８】
0006561013.tif 000013
【図９】
0006561013.tif 000014
【図１０】
0006561013.tif 000015
【図１１】
0006561013.tif 000016
【図１２】
0006561013.tif 000017
【図１３】
0006561013.tif 000018