2000年度 森泰吉郎記念研究振興基金 研究報告書

エージェントベース経済シミュレーションのためのフレームワークの作成

中鉢 欣秀

政策・メディア研究科博士課程3年

 

エージェントベース経済シミュレーションの共有基盤である「Boxed Economy シミュレーションプラットフォーム」の構築に向け、プロトタイプ実装を行なった。 実装に際し、「Boxed Economy基礎モデル」にデザインパターンを適用し、柔軟 性・再利用性の高いコンポーネントフレームワークとするための設計を試みた。 その結果、エージェントの動的な振舞の実現と、概念モデルと実装モデルを関係 付ける手法としてデザインパターンの利用が有用であることが示された。

 

 従来のエージェントベース社会シミュレーション研究においては、研究対象に特 化したシミュレーションの開発が行なわれてきた。そこでは新たなシミュレーシ ョンを開発する場合に、毎回白紙の状態からモデル化と実装が行なわれている。 また、実装の詳細な仕様(特に、ソフトウェアのソースコード)が公開されていない研究例も多く、他の研究者による拡張や再利用が困難となっている。これら は、社会シミュレーション開発の方法論としてソフトウェア工学的見地からも改善されるべき問題である。特定の事例を対象として社会シミュレーションが開発されるだけではなく、再利用可能な「フレームワーク」が提供されるならば、今後の本分野における研究の発展 に寄与すると思われる。

 このような現状に対し、私達はエージェントベース経済シミュレーションの共有 基盤として「Boxed Economy」というシミュレーションプラットフォームを提案 し、その構築に取り組んでいる。Boxed Economyは経済シミュレーションにおけ るフレームワーク、およびそこで利用可能な部分モデルコンポーネントを作成・ 蓄積するための基盤を提供する。本論文では、社会 モデルにデザインパターンを適用することによって柔軟性・再利用性の高いコン ポーネントフレームワークを設計することの検討と、これに基づくプロ トタイピングの現状について報告する。

 


 

基礎モデルとデザインパターン

 Boxed Economyでは、エージェントベースの経済シュミレーションのための基本 的な社会モデルとして「Boxed Economy基礎モデル」(以下、基礎モデル)を提 案している。 今回、この基礎モデルに対して以下の2つの観点から「デザインパターン」の適用を検討した。

 エージェントベース社会シミュレーションにおいて、エージェントの行動、他の エージェントの関係などはシミュレーションの実行中に動的に変化させなくては ならない。また、抽象的・概念的な「社会モデル」をソフトウェアとして動作さ せるためには、基礎モデルに対して具体的な「実装モデル」の追加が必要となる。 このとき、再利用性を高めるためには社会モデルと実装モデルの関係ができるだ け分離されていることが望ましい。これらを実現するために、デザインパターン から主にオブジェクト間の柔軟な関係を構築する目的のものを抽出し、利用の可 能性について検討を行なった。

 

Observerパターン

 Observerパターンは、オブジェクト間の依存関係を動的に構築す ることを可能とする。基礎モデルでは、シミュレーションの進行に伴い、オブジ ェクト間の関係が動的に変化する。例えば、経済主体と経路は互いに依存関係を 持つが、その関係が構築されている時間は非常に短く、財の移動が必要な場面に おいて経路の開設と閉鎖が繰り返される。これにObserverパターンを適用すると、 クラス間の関係を疎に保ちながら、必要に応じて関係を変化させることが可能と なる。 また、シミュレーション中、経済主体の行動を外部から観察する必要がある。こ れに対するObserverパターンの適用は、最も典型的な利用方法である。

 

Delegationパターン

 Delegationパターン\cite{Grand98}は、機能を提供するもとのクラスに対して機 能追加を行なうときに、継承ではなく、別なクラスに機能を委譲することにより、 クラスを拡張する方法である。経済主体は、シミュレーションの実行時において その機能を動的に変化させる必要があるが、静的な継承によるサブクラスでの機 能実現では、これに対応できない。そこで、経済主体の機能(行動・思考)を拡 張するための手段として、Delegationパターンを用いることにする。

 

State/Strategyパターン

 State/Strategyパターンはアルゴリズムの種類をオブジェクトご とに選択したり、動的に変化させるための仕組みである。基礎モデルに対して、 経済主体の振舞の実装にState/Strategyパターンを利用する。シミュレーション において、経済主体は自ら行動(Strategy)を決定する。行動の詳細は、状態(State)に 分割し、他の経済主体とのインタラクションによる状態変化として記述すること ができる。このことにより、基礎モデルをもとにしたフレームワークに対して、 経済主体の機能を様々に拡張可能とし、他の経済主体との経済行為の詳細を実装 することができる。

 

Compositeパターン

 Compositeパターン\cite{Gamma95}は、ツリー状に構成された全てのオブジェク トに対して、共通のインターフェースを持たせることにより、ツリー上のオブジ ェクトを一貫した方法で操作できるようにする。基礎モデルにおいては、社会集 団に複数の個人が属しているというような構造を実現する場合に、この Compositeパターンを適用する。

 

Visitorパターン

 Visitorパターンは、Compositeパターンで構成された全てのオブ ジェクトに対して統一したアクセス手法を提供する。これを用いて、シミュレー ションに存在する全ての経済主体をツリー構造に従って走査することが可能とな る。例えば、ある社会集団に属する全ての経済主体が所有する財について、何ら かの統計処理を行ないたい場合などに使用することができる。

 


 

プロトタイピング

 今回のプロトタイプ実装は、前節で検討したデザインパターンの基礎モデルへ の適用の妥当性を確かめることを主眼とした。実装のための環境としてJava言語 を用い、実装モデルとしてJavaBeansコンポーネントフレームワークを使用した。プロトタイピングの目的は、基礎モデルに従い、デザ インパターンを用いてエージェントの動的な振舞を実装することと、基礎モデル に一切の変更を加えることなく基礎モデルと実装モデルとを疎に結合させ、実際 に動作するソフトウェアを作成することである。なお、今回のプロトタイピング において、エージェントの振舞についてはあらかじめ定められたシナリオに基づ き経済的行動を行なうように実装した。

 

Java言語による実装モデル

 プロトタイピングで使用したJava言語は、現在、広く普及しているオブジェクト 指向のプログラミング言語であり、言語の機能としてソフトウェアの部品化(コ ンポーネント化)が可能である。加えて、経済シミュレーションのように本質的 に計算量を必要とするアプリケーションへの利用に際して不安要素となる実行速 度についても、実行時コンパイラやHotSpot\cite{HotSpot}等の技術の登場によ る改善が見られる。

 今回は、JavaBeansフレームワークを「実装モデル」 としてコンポーネント化を行なった。JavaBeansはJava言語によるコンポーネン トフレームワークである。この技術はGUIコンポーネントを作成することに広く 利用されており、JavaのGUIコンポーネントパッケージである「Swing」において も用いられているものである。本プロトタイプでは、基礎モデルにあるクラスを、 JavaBeansコンポーネント、あるいはSwingコンポーネントの子クラスとして実装 する\footnote{将来的には、基礎モデルクラスはSwingに依存しないクラスとし、 より実装モデルと切り離されることが望ましい。}。これにより、プロトタイプ 実装でありながらも、GUIを備えた訴求力のあるシミュレータを、短時間で完成 させることができる。

 また、JavaBeansフレームワークには、随所にデザインパターンが取り入れられ ている。このことも今回のプロトタイプ実装において同技術を利用するメリット であり、前節で検討した基礎モデルにデザインパターンを適用することで実装モ デルと結合するアプローチにも適している。

 

プロトタイプ実装

 今回実装したプロトタイプ版シミュレータの実行画面を図に示す。 シミュレータは、Javaアプリケーションとして作成され、1つのメインフレーム を持つ。このフレームには、シミュレーションの初期 設定を行なうための「世界」コンポーネントが配置されている。

 また、経済主体の行動を監視するための「経済主体監視Frame」を表示させるこ とができる。ここには、エージェントの行動、エージェントが所有する財の変化 などが表示される。

 

 

世界コンポーネントと時間コンポーネント

 世界コンポーネントには、「時間」コンポーネントが配置されている (図\ref{beproto}、メインフレーム内左上)。 同様に、シミュレータの動作を制御するためのボタン、メッセージ等の表示のた めのラベルを用意した。

 世界コンポーネントの中央には基礎モデルの「空間」コンポーネントが配置され ている。この空間コンポーネント上に、基礎モデルの「経済主体」及びその子ク ラスである「社会集団」と「個人」が配置され、これがシミュレーションの初期 状態となる。

 世界コンポーネントは初期化の際、空間コンポーネントに配置されている全ての 経済主体及びその子クラス(以下、単に「経済主体」と言った場合、その子クラ スも含む)に対して、時間コンポーネントより通知される「時間Event」が受信 されるように設定する。時間コンポーネントは、シミュレーションが動作中、一 定時間ごとに時間Eventを発行し、経済主体がこれを受信することで、経済主体 に行動の機会を与える。

 本プロトタイプ実装では、世界コンポーネントは経済主体の行動を監視するため の「行動監視Event」、「所有財監視Event」、「経路監視Event」を受信する。 これらは経済主体より通知され、シミュレーションにおける経済主体の行動をユ ーザが監視するために使用する。これらのイベントにより、画面上の経済主体を マウスでクリックすると、「経済主体監視Frame」が表示されて、経済主体の行 動を監視することができる。なお、以上の仕組みは、デザインパターンの Observerパターンを利用している。

 

経済主体コンポーネント

 「経済主体」は、Boxed Economyシミュレーションモデルにおけるエージェント の実装クラスであり、「社会集団」と「個人」を子クラスにもつ。主な役割とし て、「財」及び「情報」の所有、Delegationパターンによる「機能(思考・行動)」 の実行、「関係」の保持と「経路」の開設、「情報」の記憶などをつかさどる。

 「社会集団」は、他の経済主体を内包しながら、自律した経済主体としての機能 を実現するものであり、Compositeパターンを利用している。また、経済主体は、 複数の社会集団に同時に所属することもできる。

 「個人」は、「欲求」コンポーネントを所有する経済主体である。欲求は個人を 刺激し、個人の行動を駆動する役割を担う

 なお、本プロトタイプでは、経済主体にあらかじめ用意されたシナリオに基づく 経済活動を行なわせることを目標として作成された。従って、エージェントが外 部・内部の環境を認知し、自律的に意思決定を行なう仕組みの実装は行なってい ない。基礎モデル中の、「記憶」コンポーネントと個人コンポーネントが所有す る「欲求」コンポーネント、及び財に付随する「情報」コンポーネントは、エー ジェントの意思決定に使用されるものであるため、今回のプロトタイプでは実装 を省略した。

 本プロトタイプにおいて「社会集団」と「個人」の経済主体を配置した画面を図に示す。

 

 

 

所有財・財コンポーネント

 「所有財」コンポーネントは、経済主体が所有する財の管理を行なうクラスであ る。財の追加や削除は本クラスのメソッドとして実装されている。

 「財」の属性として、基礎モデルにある「種類」と「名称」、「数量」を実装し た。ここで、基礎モデルの考え方では「価格」は財の属性として含まず、経済主 体の状態や、取引をする他の経済主体との関係によって決定されることになって いる。しかし、今回のプロトタイプでは簡単のため数量と価格が等しいとした。 例えば、100万円分の商品は、数量が100万であるとして表す。また、財は全て分 割可能であるとした。例えば、「1万円の現金」という財を分割して、「2千円の 現金」と「8千円の現金」に分け、その一方を他の経済主体に経路を経由して送 ることができる。

 

関係・経路コンポーネント

 「関係」・「経路」についても、グラフィカルに表示できる。 図では個人・社会集団間に関係が構築され、その上で経路が開設された状態を示 す。関係及び経路は、片方向であるため、相手先を黒丸で示すことにした。

 「関係」及び「経路」にはObserverパターンを実装している。関係のある他の経 済主体との間で経路を開設したい場合、経済主体は「関係」に対して「関係 Event」を発行し、「関係」コンポーネントはこれを監視している。関係Eventに は、相手先が含まれることから、これをもとに関係は経路を構築する。同様に、 「経路」コンポーネントも「経路Event」を監視している。経路に財を送りたい 場合、経済主体は同Eventを発行する。これにより経路は、自分と接続されてい る経済主体に対して財の到着を知らせることができる。この経路Eventは経済主 体により行動Eventに変換され、経済主体に行動の機会を与える。

 

 

 

「機能(思考・行動)」コンポーネント

本プロトタイプにおいては、エージェントの思考機能の実装は行なっていない。 従って、「機能(思考・行動)」コンポーネントを単に「行動」コンポーネント として実装した。行動コンポーネントは、経済主体の一連の行動(Strategy)を 決定する「行動アダプタ」と、状態遷移により行動を実現する「行動」の2つの クラスに分離されている。行動アダプタは、行動の決定と、行動への「行動 Event」の伝達(Delegation)を行なう。行動は、イベントによって駆動される 状態機械(オートマトン)であり、実装にはStateパターンが利用されている。 これをもとにして、2つの経済主体が経済活動を行なう際のシーケンス図を図 \ref{kounyu-seq} に、双方の行動の状態遷移を図に示す。

 


 

今後の発展に向けて

 

 今回のプロトタイプ実装により、社会モデル(Boxed Economy基礎モデル)と実装 モデル(Java Beansコンポーネントフレームワーク)をデザインパターンを用いて 関連させる手法の有用性を確認することができた。経済主体エージェントの振舞 を、エージェント間のインタラクションによって動的に変化させることができ、 基礎モデルの構造を何ら変更することなく、実際に動作するソフトウェアが実装 されている。このことから、デザインパターンの利用が、拡張性・柔軟性を備え たエージェントベース社会シミュレーションのプラットフォームを構築するため 有効な方法であるといえる。

 また、本研究における、基礎モデルのデザインからプロトタイプの実装に至る過 程は、今後、社会シミュレーションを開発する一つの手法として提案できると考 えている。例えば、社会モデルの設計作業と、実装モデルに関する事柄とを完全 に分離することは、コンピュータ技術についての知識の多寡を問題にすることな く、様々な研究者のモデル設計作業への参加につながり得る。また、オブジェク ト指向のモデル表記法として定着しているUML(Unified Modeling Language)を研 究者間の共通言語として使用することによって、非常に円滑なコラボレーティブ ワークが行なえることも、私達の経験として得られている。これらについては、 機会を改めて紹介させていただくつもりである。

 


 

関連する研究成果報告