ᵡᵿᵱᵮᵟ ᵣᶌᶅᶇᶌᶃ
6.4 高い実行効率の実現
6.
レーションはFUSEの想定する用途の一つであることから,FUSEもAARに対応する ための事後再生機能を有しており,一度実行したシミュレーションを終了後に再生表 示することができる.
再生表示を行っている際にはエージェントのactionメソッドは呼ばれないため,シ ミュレーション実行時と比較して計算機の負荷は小さく,高速な表示が可能である.
6.3.7 CaSPA による行動判断ルール
FUSEは前章で記述したCaSPAを標準で含んでおり,CaSPAルールに基づき行動 するエージェントを容易に実装することができる.また,CaSPAを利用したエージェ ントの思考を確認するために,CaSPAのタスクグラフを可視化する機能を有している.
6.4 高い実行効率の実現
>ŽĂĚͲďĂůĂŶĐŝŶŐ
&ŽƌŵƵůƚŝƉůĞ ĐŽŵƉƵƚĞƌƐ
&ŽƌƐŝŶŐůĞ ĐŽŵƉƵƚĞƌ
&ŽƌŐĞŶĞƌĂů ƉƵƌƉŽƐĞ
&ŽƌD^
&ŽƌŐĞŶĞƌĂů ƉƵƌƉŽƐĞ
&ŽƌD^
ŽƌĚĂƐĐŽ ;ϮϬϭϭͿ
KƵƌWƌŽƉŽƐĂů LJďĞŶŬŽ ;ϭϵϴϵͿ
&ƵƌƵŝĐŚŝ;ϮϬϬϭͿ
ZŽƵŶĚͲƌŽďŝŶ WƌŝŽƌŝƚLJƐĐŚĞĚƵůŝŶŐ ĂĐŚWhŚĂƐĚŝĨĨĞƌĞŶƚŵĞŵŽƌLJƐƉĂĐĞ
ůůWhƐŚĂƌĞĐŽŵŵŽŶŵĞŵŽƌLJƐƉĂĐĞ
&ƵƌƵŝĐŚŝ;ϭϵϵϬͿ
DƵůƚŝƉůĞƋƵĞƵĞƐ
͙
͙
͙
図 6.3: 負荷分散技術の分類
らシミュレーションが進行する.
エージェントのジョブをCPUコアに分配する場合,もっとも基本的な方法はジョブ 数が均等になるように割り振る方法である(図6.4).
ただし,この場合は各エージェントの負荷を考慮していないため,スレッドごとの 負荷が不均等になる可能性がある.短時間で処理を終了するスレッドがあった場合,他 のスレッドが処理を終えるまで待たされるため,CPU資源を有効に利用しているとは 言えない.
多数のエージェントが登場する大規模シミュレーションを想定する場合,エージェ ントのジョブが処理負荷の大部分を占める.このような場合においてCPUを効率よく 利用するため,エージェントの負荷はCPUの各コアに対してできるだけ均等に分配す ることが必要となる(図6.6).
負荷の均等化を実施するためには,ジョブの処理負荷を予測することが必要となる.
一般的なジョブを対象とした場合,予め処理負荷を見積もることは難しい.一方,本 研究においては対象とするジョブをMASにおけるエージェントのジョブに限定するこ とにより,ジョブの負荷を予測可能とする.
6.
dŚƌĞĂĚϭ dŚƌĞĂĚϮ
dŚƌĞĂĚE
͙͘͘
0000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000
LJĐůĞ ĞŐŝŶ LJĐůĞŶĚ
͙ ͙͘ ͘
͗ŐĞŶƚ:Žď ŐĞŶƚ:Žď
00000000000000000000000000000 00000000000000000000000000000
00000000000000000000000000000 ͗tĂŝƚŝŶŐKƚŚĞƌdŚƌĞĂĚƐ
ŐĞŶƚ:Žď >ŝƐƚ ϭ Ϯ ϯ ϰ ϱ
ϭ Ϯ E
͙
図 6.4: 基本的なジョブ分配の例
6.4.2 ジョブ負荷の推定方法
一般的に,大規模なMASには様々な種類のエージェントが登場する.災害対処であ れば災害に対する消防,自衛隊等の人員や避難民等が考えられ,また組織に属するエー ジェントには指揮官や現場の隊員等,それぞれの役割が存在する.本研究においては,
エージェントのジョブの負荷について,それぞれのエージェントの負荷が急激には変 動しないという仮説に基づき均等化方法を構築した.
本方法では,次のサイクルにおけるエージェントのジョブ負荷を,前のサイクルに おけるジョブ負荷によって推定することとした.これによって,スレッド負荷を均等化 させるが,エージェントのジョブ負荷は常に前サイクルと一致するわけではない.そ のため,このアルゴリズムのみによってスレッドの待ち時間が必ずゼロになることは ない.
上記のことから,負荷の推定が失敗した場合にもそれによる待ち時間の増大を可能 な限り抑える方策が必要となる.
本方法では,エージェントのジョブを管理するエージェントマネージャーを設定し,
ジョブを動的に割り振ることとした.各スレッドは自分に割り当てられたジョブが終 了した時点でエージェントマネージャーに次のジョブを要求する.この方式では処理 を終えたスレッドには即座に次のジョブが割り当てられるため,事前に各スレッドの 担当ジョブを決定する方式と違って推定誤差が蓄積することはない.
一方,この方式においても処理の終盤近くで配布するジョブの負荷は問題となる.役