Ējento bēsu moderu ni yoru sōtai torihiki shijō no bunseki : jōhō kakusa to shijō
Teks penuh
(2) 慶應義塾大学大学院経営管理研究科修士課程 学位論文(. 2018. 年度). 論文題名. エージェント・ベース・モデルによる相対取引市場の分析―情報格差と市場―. 主 査. 高橋 大志. 副 査. 大林 厚臣. 副 査. 市来嵜 治. 氏 名. 李 晟陽.
(3) 論 文 要 旨. 所属ゼミ. 高橋. 研究会. 氏名. 李 晟陽. (論文題名) エージェント・ベース・モデルによる相対取引市場の分析―情報格差と市場― (内容の要旨). 背景 経済活動および金融市場における取引において、情報は重要な役割を果たす。 各主体の保有する情報の量は、各主体の能力に依存し異なる可能性があり、その ような情報格差は、各主体の効用、社会に対し影響をもたらす可能性がある。本 研究は、このような情報格差がもたらす影響に焦点を当て分析を行う。 分析方法 現実の経済活動において主体の意思決定方法は多様であり、主体の保有する情 報に関しても情報の非対称性が存在する。本分析では、エージェント・ベース・ モデルを通じ、それら要因を考慮し情報格差がもたらす影響について分析を行う。 具体的には、Epstein・Axtell [1996]による Sugarscape モデルを拡張し、エージ ェントの視力、代謝率、位置などの諸要因と外部環境となる取引量、取引価格、 エージェント全体の貧富格差の諸要因を考慮し、分析を実施する。 分析結果 はじめに、計算機上に相対取引を行う取引市場の構築を行った。計算機上にお ける分析の結果、(1)情報獲得能力が市場参加者の利益に相当な影響を与える こと、(2)情報獲得能力の向上を通じ、取引範囲が広くなり、取引相手も多く なり、市場全体のパフォーマンスに影響が現れること、(3)取引空間上における 市場参加者の位置も自身に大きな影響を与えること、(4)資源や地域の多様性も 市場参加者の効用に影響を与えること、(5)市場参加者自身の属性(代謝率)も 強い影響を与えること、(6)取引者の資産がストックとして、取引に影響が大き く、大口投資者が多くなると、市場全体が活発化しに行く傾向が見えること、な どの興味深い傾向をみいだした。 まとめ・今後の課題 本研究を通じ、相対取引における投資者に影響を与える主な要因を分析し、 エージェントのミクロ行動と市場全体のマクロ行動に関し分析を行った。結果の 頑健性に関する分析やより詳細な分析は今後の課題として挙げられる。. 2.
(4) 1. はじめに 1.1. 研究背景 CAPM(Capital Asset Pricing Model, CAPM)モデルは現代ポートフォリオ理論の最大の理論的 な成果と言える。1952 年にハリー・マーコウィッツが発表した「ポートフォリオ選択理論」によ り、平均分散分析( mean-variance analysis)を用いて市場リスクを革新的な方法で測ることがで きた。そして、ある特定の平均分散的に効率的なポートフォリオ(接点ポートフォリオ)と安全資 産への投資比率を変化させるだけで効率的フロンティアを再現できるという分離定理が示され、 極複雑な投資判断問題を平均分散分析と期待効用最大化の関係という二次元の問題に簡略化した。 すなわち、期待効用が同じの場合、投資リスクが最も小さいポートフォリオを選ぶべき、逆に投 資リスクが同じの場合、期待効用が最も大きなポートフォリオを選ぶべきだという。1963 年、こ の研究に基づき、ウィリアム・シャープがさらに簡略化・実用化させ、証券の最も効率的に分散 されたポートフォリオを求める「資本資産価格モデル」 (Capital Asset Pricing Model;CAPM) を構築した。. :資産の期待収益率 :安全資産の利子率(例:10 年期国債の利回り) :市場ポートフォリオと呼ばれ、市場に存在するすべてのリスク資産の時価 総額加重平均のポートフォリオの期待収益率である。 :マーケットリスクプレミアムと呼ばれ、資産の期待 収益率と安全資 産の利子率の差で表れる :資産のベータと呼ばれ、資産の収益率と市場ポートフォリオの収益率の共分 散が市場ポートフォリオの収益率の分散を割り、数値である。 この故に、全ての資産のリスクプレミアムが共通ファクターである市場ポートフォリオのリス クプレミアムと、それに対する各資産固有の感応度であるベータの積で表されることから、資産 の期待収益率のクロスセクション構造が完全に決定されている。CAPM により理論上のリスクプレ ミアムが評価できることから、資産の適正価格を導くことができ、適正な資産価格の一つの基準 として利用することが出来る。 ただ、CAPM が成立する為にいくつかの前提条件が設けられている。 1、 安全資産が存在する 2、 投資家の同質化。すなわち全ての投資家は平均分散分析により、ポートフォリオを選 択する 3、 取引コストが存在しない 4、 資産に関する情報がすべての投資家に伝えられる 3.
(5) 5、 市場は均衡状態になっており、市場の価格は直ちに情報を反映する まとめると、CAPM が成立する為に市場は完全有効市場でなければならない。CAPM の下では全て の投資家が理性人である市場の資産価格の変動、収益とリスクの関係が示された。 このような現実と離れたことに対し、行動ファイナンス学による Shleifer 教授が非効率市場 理論( Inefficient Market )を提唱した。現実の金融市場では、株価が全ての市場情報を反映 していなく、投資者が持つ情報も不完全であり、理性人とともに、非理性人も多数存在している。 例えば、インサイダー取引、粉飾決算、投資者の投資に関する知識の欠如などのことで、金融市 場に激しい変動をもたらすことがある。 行動ファイナンスの研究領域においてこのような非効率市場での「資本資産価格モデル」に関 しては、いくつかの研究がある。 1994 年に Shefrin と Statman が「行動資本資産価格モデル」 (Behavioral Asset Pricing Model, BAPM)が発表した。全ての投資者が理性人とみなされることではなく、インフォメーショ ン投資者(information traders)とノイズ投資者(noise traders)の二種類に分ける。インフ ォメーション投資者が CAPM に従って行動する一方、ノイズ投資者が自らの理念や感情などによ って行動する。市場全体のベータはノイズ投資者のリスク(Noise Traders Risk, NTR)と資本市 場リスク(ベータ)合わせて決まることにする。 ただし、非効率市場理論( Inefficient Market )を研究する為に、アプローチがモデリング には限らない。21 世紀以来、IT 技術の進歩とともに、コンピューターシミュレーションをアプロ ーチとする研究も盛んになっていた。シミュレーションは「実験」の一つにとって扱われ、モデ リングを代表とする「理論」と並んで重要な研究方法である。自然科学や工学が扱う対象が物質 の世界のシステムである。これらは基本的には力学や電磁気学といった物理学の基礎方程式で記 述できるシステムであるし、その一部分を切り出した「実験的環境」を創出することも比較的や りやすいものとなっている。このため、実験によるアプローチは精度、再現性など科学的研究に 必要な要件が一定程度保証でき、理論研究との両輪でこの分野の発展を支えてきた。. 図 1.1 科学研究の三つの手法 1.2. 研究目的 経済活動および金融市場における取引において、情報は重要な役割を果たす。ただし、現 実上に「行動資本資産価格モデル」が示したように個人の様々な主観的あるいは客観的な要因 4.
(6) により、市場参加者の間に情報格差が広く存在している。このような情報格差は、各主体の効 用、社会に対し影響をもたらす可能性がある。本研究は、このような情報格差がもたらす影響 に焦点を当て分析を行う。このコンピューターシミュレーションというアプローチを用いて、 情報格差と市場参加者と市場全体の関係性について研究しようと考えている。特にコンピュー タの高性能化や複雑なソフトウェアの開発技術の進歩とともに、エージェント・ベース・シミ ュレーション( Agent-Based Simulation, ABS)を利用し、研究を行う。エージェント・ベー ス・シミュレーションでは、社会の中で活動する個人や組織をソフトウェアエージェント、す なわち自律的に行動するコンピュータプログラムとして記述する。. 図 1.2 実の生活とエージェント・ベース・シミュレーションの異なり 従来のエージェント・ベース・シミュレーションにおいて、エージェントは比較的単純な定型 的な行動(ルーチン Routine)や、環境変化に応じて行動を多少調整するタイプが多い。例えば、 株式市場において、エージェントが移動平均線により、調整を行うタイプがある。ゴールドクロ スが発生した場合、買い注文を出し、デットクロスが発生した場合、売り注文を出すという行動 を起こすタイプのエージェントが多数ある。 本文において、独創的なアプローチは従来の比較的単純な定型的なエージェントより拡張し、 情報格差や大口投資者など実世界を反映する人工取引市場を構築することである。システムの「創 発性(設計した社会制度が当初の意図の通りに機能しないことが生じるという。 Emergence)」を 観察し、定性及び定量的な分析を行うことで、複雑な相対取引市場と取引者を理解していく。 1.3. 研究方法 本研究において、S4(エスクワトロ) Simulation System を利用し、エージェント・ベース・シ ミュレーションの手法を通じ、相対取引市場を構築し、取引のシミュレーションを行う。そこで 得た結果を統計手法で分析し、相対取引市場あるいは市場参加者に影響がある要因を分析する。 エージェント・ベース・シミュレーションのツールについて Matlab、Netlog などのソフトが研 究で多く使われている。今回は研究の操作性、機能の拡張性を考慮し、 S4(エスクワトロ) Simulation System を利用した。GUI ベースのシミュレーション操作を行い、シミュレーションの アニメーションが作ることができた。また、Python 言語に基づくモデルを組み込み、シミュレー 5.
(7) ションの柔軟性と拡張性を持つこともできた。. 図 1.3 S クワトロでシミュレーションを行うインターフェース 1.4. 研究内容 本文において、主に六つの部分に分ける。 第一章、. はじめに。本研究の概要について述べる。研究背景、研究意義、研究方向と研 究内容を含める。. 第二章、. 先行研究。主にシミュレーション・アプローチの説明、エージェント・ベー ス・シミュレーション( Agent-Based Simulation, ABS)の発展経緯、金融 市場ミクロメカニズムという三つの部分を通じ、本研究の理論基礎を述べる。 また、社会に広く存在している情報格差について述べる。. 第三章、. 実験設計。シミュレーションで登場するエージェントを構築する方法、コン トロール組などを説明する。. 第四章、. 実験の結果と分析。シミュレーションの結果により、市場の変動、出来高、エ ージェントの収益状況に基づき、エージェントあるいは市場全体に影響を与 える要因をひとつずつ分析する。. 第五章、. まとめ. 第六章、. 本研究の限界と今後の課題. 第七章、. 附表. 第八章、. 参考文献. 6.
(8) 2. 先行研究 2.1. 社会科学においてのシミュレーション・アプローチ モデリングの「理論」アプローチと異なり、シミュレーション・アプローチはエージェントと いう概念を導入した。エージェントは従来の成績を評価し、将来の行動を調整する行動ができ、 意思決定の最適化を図る。システム全体も静態から動態に変わり、より多くの多様性が現れるこ とができる。このようなボトムアップ方式の研究方法により、システム全体の構造ではなく、エ ージェントとエージェントの関係、エージェントと環境の関係などのミクロ視点に着手し、シス テムのマクロ現象と合わせて研究することができるようになった。. 図 2.1 エージェント学習の構造 Farmer J.D.と Andrew W. Lo (1999)は初めて金融市場のモデルと生態系モデルと合わせての研 究を提唱した。従来のより細かく精度が高い数学モデルではなく、 「市場が動態的だ」ということ に着目し、金融市場にいる数多くの主体の間の競争、協調などの行動を研究した。 Brock と Hommes(2000)は金融市場を Adaptive Belief System(ABS)と見なす。金融市場におい ての投資者が同質ではなく、さまざまな違いがある異質性を持っている。特に、投資者は随時に 変化している金融市場を適応する為に、学習を通じ、常に考え方が変わったり、投資理念が変わ ったりする。これによって、投資者のタイプの比例が常に変動し、資産価格にも影響を及ぼし、 さらに投資者の考え方が変わるというお互いフィードバックがあるループが形成した。 Gaunersdorger と Hommes(2001)は ABS 理論を拡張し、ABS モデルを導入した。ABS は取引戦略の 進化競争である。異なる投資者は将来の価格に対する予測もそれぞれである。理性的な投資者が ファンダメンタル指標に注目し、価値投資を行う。それに対して、ノイズ投資者が過去の成績に よって投資判断を行う。全ての投資者は自分の考えにより、投資判断が随時変わっている。 2.2. エージェント・ベース・シミュレーション Agent-based Computational Finance (ACF) は金融市場を異質性を持っている主体が含んで いるシステムとみなし、IT 技術を用いて金融市場をシミュレーターする。既定の市場構造の上、 エージェントの行動を観察することで、市場の特性とメカニズムを解明する研究である。実験の 方法は主に三つのステップがある。ステップⅠが金融市場の多様性を保つ為に、エージェントベ 7.
(9) ースでモデリングを行う。ステップⅡが現実の金融市場を照らし、シミュレーション環境を構築 する。ステップⅢがシミュレーションの結果を分析し、原因を解明する。 従来の研究方法はモデリングに着目し、市場の均衡を求める。シミュレーションも同じく市場 の均衡を求めるので、研究の目標が一致と言えるが、研究の方法が異なる。モデリング方法が精 度が高く、理性的な行動を予測しやすいと考える一方、シミュレーション方法が動態的な進化が 観察ができるというメリットがある。ACF の具体的な研究方法が三つある。 一つ目は、単一な取引戦略モデル。比較的単純な定型的なエージェントと少数の取引戦略によ って構築されたシミュレーションである。数少ないので、モデリングに近く、解析解が求められ る。Frankel と Froot(1988)、Kirman(1991)、Grauwe、Dewachter と Embrechts (1993)などの研究 者の研究成果が主に単一な取引戦略モデルに集中していた。今後、エージェント・ベース・シミ ュレーションの発展に大きな貢献があった。 二つ目は、ダイナミック学習モデル。IT 技術の発展とともに、コンピュータの計算能力も向上 し、単一な取引戦略モデルの代わりに、金融市場の動向に応じてエージェントの行動が調整でき るようになった。Lettau(1997)の研究によると、リスク選好が異なるエージェントを構築し、ポ ートフォリオの組み合わせに関わるシミュレーションが行った。 三つ目は、マルチエージェントモデル。ミクロの視点から市場を観察し、注目したのはエージ ェントではなく、金融市場になる。金融市場の変動に基づいてどのようなエージェントが育てら れるのかを研究し、非効率市場理論の研究にも役に立つと考える。本研究はこのモデルに属し、 シミュレーションを行う。 サンタフェ人工株式市場(SFI)はマルチエージェントモデルの中に注目されているのである。 Arthur、Holland、LeBaron、Palmer と Tayler(1997,1999)はこのモデルを説明する論文がそれぞ れ発表した。Chen と Yeh(2001)は SFI を簡略化・モジュール化し、エージェントの着装とシミュ レーションの実行がより易しくなった。 Beltratti、Margarita と Terna(1996)の研究によると、エージェントにニューラルネットワー クを組み込み、株価の予測を行った。Chakrabarti と Roll(1999)はエージェント間のネットワー クを構築し、金融市場における情報伝達ルートもシミュレーションをした。 Levy と Solomon(1994,2000)の研究によると、二種類のエージェントを構築した。一つは、理性 的なエージェントであり、CAPM によるファンダメンタルと株価の乖離に基づいて取引を行う。も う一つは、テクニカル指標に基づいて過去の情報を利用し、取引を行う。エージェントの種類が 少ない時に、株価が周期的に変動していたが、エージェントの種類が多ければ多いほど、株価の 変動が無規則になっていたことが分かった。 日本国内には、上記のような ABS により、仮想の市場を想定し、そこで取引を行うソフトウェ アエージェントを作成する研究もいくつかある。和泉らによる東京為替市場のシミュレーション が行われ、塩沢らによる株価指数先物のシミュレーションの U-Mart があった。人工市場などの ABS 研究では複雑なシミュレーションプログラムや実験設定などを研究者間で共有することが問 題になってきた。これに対して、人間とエージェント両方が同時に参加できるシミュレーション を作り、さらにシステムの多様性を増やした。. 8.
(10) 2.3. 金融市場のミクロ構造 Demsetz(1968)が「取引コスト」を発表し、取引コストが価格に対する影響を初めて提唱した。 Garman(1976)の「市場ミクロ構造」の中に、価格に対してマーケットメーカーによる影響を研究 した。O`Hara(1996)は市場ミクロ構造の研究を市場取引規制に集中させた。Madhavan(2000)は市 場ミクロ構造の研究分野を投資者の潜在ニーズ、価格形成、価格発見、市場構造と設計、情報の 伝達などの他の分野に拡大した。Biais、Glosten と Spatt(2005)は明確に市場ミクロ構造を定義 した。市場ミクロ構造理論とは取引過程、価格形成及び市場組織から価格に対する影響を分析す る分野である。狭義上には価格メカニズムだけを指している。. 図 2.2 市場ミクロ構造 市場ミクロ構造理論の発展は三つの段階に分けられる。第一段階において、取引コストを主な 切り口として、価格メカニズムを研究していた。Garman をはじめ、マーケットメーカーを分析し、 最適化することで、取引コストを抑え、価格に影響を及ぼすというルートを研究し、ストックモ デルと呼ばれていた。第二段階において、情報の対称性を主な切り口として、投資者との行動を 研究し、価格に対する影響を研究し、情報モデルと呼ばれた。情報の不対称性が価格のギャップ を生じる原因の一つと証明した。第三段階において、オピニオンの違い(difference of opinions) が主な切り口として研究した。具体的には投資者が完全に同じ情報を得ても、解釈の違いによっ て、投資の意思決定も異なることを指す。本研究において、第二段階の情報の非対称性を切り口 とし、相対取引モデルを構築し、研究を行う。 2.4. 情報格差の現状 情報格差について、本研究では総務省の「平成 23 年版 情報通信白書」の中にデジタル・ディ バイドの定義を引用する。 「デジタル・ディバイドとは、 「インターネットやパ ソコン等の情報通信技術を利用できる 9.
(11) 者と利用できな い者との間に生じる格差 」のことをいう。具体的に は、インターネットやブロ ードバンド等の利用可能性 に関する国内地域格差を示す「地域間デジタル・ディ バイド」、身体 的・社会的条件(性別、年齢、学歴の 有無等)の相違に伴う ICT の利用格差を示す「個人間・ 集団間デジタル・ディバイド」、インターネットやブ ロードバンド等の利用可能性に関する国際 間格差を示 す「国際間デジタル・ディバイド」等の観点で論じら れることが多い。」 よりまとめると、情報格差を論じる際に、二種類の能力を指している。一つ目は Kvasny (2002) が論じた「情報処理能力」である。. 「情報格差とは獲得した情報をうまく利用する能力と情報の価値を意識する能力である。」 二つ目は Don Fallis(2004)が論じた「情報獲得能力」である。本研究では、この定義に基づき、 シミュレーションを設計する。. 「情報格差とは情報を獲得する能力の不平等性である。」 情報格差の現状を見ると、先進国の中でも先行しており、ICT 基盤は世界的に見ても高い水準を 持つ日本でも、依然として一部の地域、あるいは年齢層に限られている等、情報獲得能力の違い が存在している。図 2.3 と図 2.4 が総務省「情報格差是正に関する調査研究」から引用したデー タである。. 図 2.3. 2015 年都道府県別ブロードバンド普及率. 10.
(12) 図 2.4 2015 年都道府県別携帯インターネット普及率 また、インターネットの利用格差に関わる要因を分析し、総務省の「平成 23 年版 情報通信 白書」のデータ図 2.5 を見ると、最も大きな影響を与えている要因が年齢である。高齢者のほう が若年層よりインターネットを利用していない傾向が見える。次の要因が所得である。低所得層 のほうが高所得層よりインターネットを利用していない傾向が見える。. 図 2.5 インターネットの利用/未利用に最も大きな影響を及ぼしている要因は年齢、次いで年収 本研究では、実世界において経済活動に参加する人々の情報獲得能力の違いにより、個人及び 社会の利得にもたらす影響に焦点を当て分析を行う。. 3. エージェント・ベース・モデルの構築 3.1. モデルの前提条件 相対取引市場とは参加者がお互い競争しながら、影響し合うシステムである。需要と供給のア 11.
(13) ンバランスで取引価格が決まる一方、取引価格も参加者へ影響を与え、市場の需給バランスを調 整する。従って、モデルを構築した時に、取引価格以外のエージェントに関わる設定も加えた。 例えば、情報獲得能力、感情等従来の研究と異なる要因も入った。 従来の研究に於いて、エージェントを理性的と非理性的、市場参加者とノイズ参加者等の分け 方が多い。ただし、現実に於いて取引の出来高がそれぞれだが、市場情報を完全にブロックされ たノイズ参加者やランダムで取引を行う非理性的な取引者が極めて少ない。この故、今回のモデ ル設定はこれらの要因を考え、以下のような前提条件を設けた。 (1) 市場価格は一つしかない。 (2) エージェントの間に情報格差が存在する。自分が得た情報に基づき、取引を行う。ただ し、ランダムな行動はしない。 3.2. モデルの構築 本研究のモデルは Sugarscape(Epstein, Axtell 1996)というモデルを基づいて構築した。、 Sugarscape は Josh Epstein と Bob Axtell 二人が開発した人口社会モデルである。ある二次元 のスペースにおいてシュガーという資源が配置されている。多くのエージェントがこの二次元の スペースに移動し、 「シュガー」という資源を収穫することで自分が持っている資源を増やす。エ ージェントは一定の期間に一定の単位の「シュガー」を消費し、自分が持っているシュガーがゼ ロになると死んでしまう。本研究では、このモデルに基づいて拡張し、取引場取引と比較し、取 引価格が共有されない相対取引市場において情報格差の影響がより著しくなる可能性があると考 えられ、相対取引市場においての諸要因を分析する。 3.2.1. 空間配置 図が示しているような 50*50 の格子上に 2500 の場所があるスペースを構築する。この空間は格 子状の 2 次元空間であり、それぞれの格子が(x, y)の座標が付く以外、シュガーとスパイスの 現在量と最大容量という 4 つの要素がある。最大容量は現在量を取るマックス値である。従って、 格子においてすべてのシュガーとスパイスがエージェントに収穫され、現在量がゼロになっても 最大容量が変化しない。その後しばらくエージェントがこの格子に移動しなければ、この格子の シュガーとスパイスの量は現在量から最大容量まで再生する。また、モデルが実行する時点では すべての格子が最大容量と同じシュガーとスパイスを持っている。. 図 3.1 Sugarscape 12.
(14) 格子の北東と西南に黄色い山がある。山の頂上付近はシュガーが最も豊富な地域(最大容量 4) であり、スパイスが最も欠乏な地域(最大容量 1)である。山を降りるとともにシュガーが減少 し、格子の西北と東南になると、シュガーの最大容量が 1 となる。 一方、スパイスに対して、格子の西北と東南に赤い山がある。山の頂上付近はスパイスが最も 豊富な地域であり、シュガーが最も欠乏な地域である。山を降りるとともにスパイスが減少し、 格子の北東と西南になると、スパイスの最大容量が 1 となる。 また、格子に於いてエージェントにシュガーとスパイスが収穫され、現在量がゼロになる時点 から、最大容量まで再生するスピートを設定しなければならない。資源をその最大容量まで瞬時 に再生することができるし、一定の期間に 1 単位を再生することもできる。故に、再生ルール Gα を以下のように設定できる。 すべての格子に於いて、シュガーとスパイスは現在量から最大容量まで期間あたりα単位を再 生する。 本研究に於いて再生ルールを G1 に設定する。 3.2.2 エージェント設定 本研究に於いて、Sugarscape にいるエージェントをさまざまな能力を与える。空間で観察、移 動、取引、収穫、消費のタスクを実行する能力を与え、エージェントの内部状況と行動ルールを 設定しなければならない。以下がこれらを解説する。 (1) 位置。エージェントが空間にいる位置である。(x,y)という二次元座標で表す。複数 のエージェントが同時に同じ格子にいることができない。初期位置はランダムで空間に 配置される。図は空間に 200 エージェントの初期位置の模様である。ラッキーでシュガ ーとスパイス両方取れる位置に配置されるエージェントがいる一方、シュガーかスパイ ス一つだけ取れるエージェントもいる。. 図 3.2 Sugarscape においてエージェントの移動と生存 (2) 財産。エージェントが持っているシュガーとスパイスの量を指す。一回目の財産は初期 財産という。持つ資産の制限がないが、シュガーかスパイスかどちらがゼロになると、 13.
(15) 死亡と判断し、空間から去る。 (3) 代謝率。期間ごとに、エージェントが消耗する砂糖とスパイスの量のことである。エー ジェントごとに異なる代謝率を与える (4) 視力。エージェントが見える距離を表す。視力値がエージェントが格子のすべての方向 について、何単位先を見えるかといる意味である。図のように対角方向を見ることはで きない。視力値の違いはエージェントの間の情報格差を表す。視力値が大きいエージェ ントがより遠いところが見え、情報獲得能力が強く、他のエージェントより豊富な情報 を持っていることを示している。. 図 3.3 エージェンの視力による見える範囲 (5) 移動。エージェントが期間ごとある格子から他の格子に移ることを指す。移動出来る最 大距離と視力値が等しい。ただし、移動方向を決めるため、エージェントが内部評価を 行う厚生関数を導入する。砂糖とスパイスの代謝率が (𝑚1, 𝑚2) にし、現在に持って いる資産が ( 𝑤1, 𝑤2) にする。従って、厚生関数は、. 𝑚1 /𝑚𝑡. W(𝑤1 , 𝑤2 ) = 𝑤1. 𝑚2/ 𝑚𝑡. 𝑤2. すなわち、自分のシュガーとスパイスのそれぞれの代謝率と資産を考慮し、資源を収 穫しないままの余命期間を計算し、その時点のシュガーとスパイスの相対重要度を計算 した。厚生関数が1未満の場合、スパイスよりシュガーのほうが重要だと表している。 逆に1より大きい場合、シュガーよりスパイスを至急に探さなければならない。 そして、エージェントが見える範囲内に最もよい目的地を決めなければならない。移 動する時に、移動先にある砂糖とスパイスの量 (𝑥_1,𝑥_2) を厚生関数に入り、最適化 計算を行う。. max 𝑊 (𝑤, +𝑥1 , 𝑊2 + 𝑥2 ) すなわち、目的地のシュガーとスパイスを収穫すると、自分の厚生関数がどう変化す るかを計算し、この式の最大値になる場所へ移動する。 14.
(16) 従って、本研究に於いて、移動ルール M を設定する。 . 空間内に直交する 4 方向を視力値の範囲内に見る. . エージェントがない場所を考慮し、厚生関数が最も大きい場所を選択する。. . 新しい場所へ移動し、シュガーとスパイスを収穫する。. 以下の図のようにエージェントが移動する。. 図 3.4 エージェントの移動 (6) 取引。エージェント同士の間に自分が持っているスパイスとシュガーを一定の比率で交 換することを指す。この交換率は取引価格である。取引ができるために、取引するタイ ミング、取引量、取引価格などが決まるルールをさだめなければならない。合わせて 3 つのステップがある。まず、エージェントは持っている砂糖とスパイスの内部評価を行 う。また、交渉を行い、取引価格を合意する。最後、エージェント同士が取引価格を決 め、シュガーとスパイスを交換する。 本研究に於いて、内部評価を行う際、ミクロ経済の限界代替率(MRS)という概念を 引用する。あるエージェントが持っているシュガーに対するスパイスの MRS は、1 単 位のシュガーに対してスパイスが何単位ということを表している。前文の厚生関数に MRS を加えると、. ⅆ𝑤2. M𝑅𝑆 = ⅆ𝑤 = 1. 𝜕𝑤(𝑤1 ,𝑤2 ) 𝜕𝑤1 𝜕𝑤(𝑤1 ,𝑤2 ) 𝜕𝑤2. =. 𝑚1 (𝑚1 −𝑚𝑡 )/𝑚𝑡 𝑚2/𝑚𝑡 𝑤 𝑤2 𝑚𝑡 1 𝑚2 𝑚1 /𝑚𝑡 (𝑚2 −𝑚𝑡 )/𝑚𝑡 𝑤 𝑤2 𝑚𝑡 1. 15. =. 𝑚1 𝑤2 𝑚2 𝑤1. =. 𝑤2 𝑚2 𝑤1 𝑚1.
(17) すなわち、MRS はあるエージェントに対して、シュガーとスパイスの相対需要度を 表している。MRS が1より小さい場合、スパイスによる余命期間がシュガーより短い ため、スパイスがよりほしいということを表している。 そして、エージェント同士がお互い自分の MRS を比較し、取引価格を決める。以下 の表は両者の MRS と交換方法を表している。. この故、取引の方向も決めた。最後、取引量も決めないといけない。取引量を決める 方法は Albin と Foley [1990](エージェントの情報が不完全な場合の総合交渉につい て)に従い、エージェント同士の MRS の幾何平均を交換比率とする。取引価格pは、. p(MRSA , MRSB) = √MRSA MRSB この方法でエージェントの間に取引を行う。取引相手の選定については、周りの視 野内に存在するエージェントをランダムに選定する。 まとめると、エージェントの行動ロジックが以下の図のように示している。. 移動:移動ルールにより、目的地 を決めた後に移動を行う. 取引:取引相手を選定し、厚生関 数を最大化するために取引を行う 消費:代謝率によってスパイスと シュガーを消費する 生存判定:資産がゼロになる場合、 Sugarscapeから撤去される 図 3.5 エージェントの行動ロジック. 4. 分析結果 4.1. シミュレーションの設計 16.
(18) 本研究の相対取引モデルは Epstein・Axtell [1996]による Sugarscape モデルを拡張し、エージ ェントの視力、代謝率、位置などの諸要因と外部環境となる取引量、取引価格、エージェント全 体の貧富格差の諸要因を考慮し、設定した。 4.1.1. コントロール組の設定 シミュレーションの実験結果を分析するため、スタンダード設定をするコントロール組を設け た。50*50 の空間を作成し、シュガーとスパイスの再生ルールが G1 と設定する。すなわち、ある 格子内に 1 期間ごと、シュガーとスパイスが 1 単位しか再生できない。そして、移動ルール M と MRS を利用する取引ルールを利用する。また、シミュレーション期間が 1000 回と設ける。最後、 エージェントに関する設定について、 . 視力が 1-5 の一様分布を設定する. . 代謝率が 1-5 の一様分布を設定する. . 初期資産が 25-50 の一様分布を設定する. . 初期位置がランダムで空間に配置する. . 初期エージェントの数が 400 を設定する. 下の図がエージェントの初期と末期位置を表すシミュレーションの模様である。. 初期位置. 末期位置. シミュレーションの結果(図 4.1 と図 4.2)について、初期エージェントの数が 400 に対して、 最後まで生き残るエージェントの数が 84 である。視力 1 の数が最も少なく、生存率が最も低い一 方、視力 5 の数が最も大きく、生存率が最も高い。実験が進むに従い、エージェントが大量に死 亡した。ただし、初期と末期の視力分布図を比べると、視力の差と最後まで生き残る可能性に影 響を与える傾向がある。. 17.
(19) 図 4.1 初期の視力ごとエージェント数. 図 4.2 末期の視力ごとエージェントの生存数と生存率. 初期砂糖/砂糖代謝 初期スパイス/スパイス代謝. 0-10 11-20 21-30 31-40 41-50. 0-10 0.0% 0.0% 0.0% 0.0% 0.0%. 11-20 0.0% 6.3% 28.6% 85.7% 70.6%. 21-30 0.0% 62.5% 100.0% 100.0% 100.0%. 31-40 0.0% 66.7% 100.0% 100.0% 100.0%. 41-50 11.1% 33.3% 75.0% 100.0% 100.0%. 図 4.3 代謝率と初期資産とエージェント生存率の関係 図 4.3 により、代謝率に対する初期資産が大きいほど生き残る傾向があり、シュガーとスパイ スどちら一方の比が小さくても、かたほうが大きければ、生き残りやすい可能性がある。 次に、シミュレーションの外部環境を見ると、平均取引価格は同じ期間内に行ったすべての平 均取引価格の対数をとり、その標準偏差をプロットする方法を利用している。平均取引価格が初 期にかなり変動していた。ただし、期間が進むとともに、標準偏差が小さくなり、変動幅が抑え 18.
(20) る傾向がある。ただし、全体的に見ると価格が収束していく様子が見えない。取引量について期 間内に約 110,000 万件の取引を行い、全体の取引量がパレード分布に近似しており、多数の期間 が小規模で、わずかの期間が爆発的な取引量がある。ジニ係数について、初期にエージェント間 の貧富格差が取引と伴い、急速に拡大する傾向がある。末期にジニ係数の変動が激しく、エージ ェント間に繋がりが弱くなる可能性がある。. 図 4.4 期間ごと取引量. 図 4.5 期間ごと平均取引価格. 図 4.6 期間ごと取引の標準偏差 19.
(21) 図 4.7 期間ごとエージェントの資産のジニ係数 他の生存要因を分析すると、平均で見ると、生存は視力、代謝率、初期位置と関連性があるこ とが示唆された。こちらで、生存数とは、シミュレーション全期間生きたエージェントである。 死亡者とは、シミュレーション半期間までに死んだエージェント. 生存者. 死亡者. 視力平均. 3.34. 2.99. 初期砂糖平均. 37.48. 37.86. 初期スパイス平均. 37.83. 37.67. 砂糖代謝率. 1.70. 3.30. スパイス代謝率. 1.60. 3.47. 表 4.1 生存要因分析. 20.
(22) 4.1.2. エージェントの視力による影響 この実験は視力値の変化はエージェントの生存と外部環境にどのような影響を与えるかを分析 する。視力値以外の設定はコントロール組と同じだ。ただし、視力値が 1-5 の一様分布以外に、 エージェント半分ずつ視力が 1 と 5、すべてのエージェントの視力が 5、すべてのエージェントの 視力が1という3つの設定を加え、分析を行う。 まず、エージェントの生存に関する結果を見る。すべてのエージェントの視力が 5 である実験 において、生存数が 84 であり、生存率が 21%である。すべてのエージェントの視力が1である実 験において、生存数が 81 であり、生存率が 20%である。エージェント半分ずつ視力が 1 と 5 で ある実験において、生存数が 77 である。エージェントの視力と生存数・生存率の関係を見ると、 エージェントの視力と生存数・生存率の関係を見ると、位置や代謝率の影響で、視力と生存率の 強い線形相関がみれない。ただし、視力値が高いエージェントが比較的最後まで生き残っていく 傾向が分かるだろう。すなわち、情報獲得能力が高いエージェントの生存能力が強いことが示唆 される。. 図 4.8 視力1-5の一様分布のエージェント視力ごと生存数と生存率. 図 4.9 視力1又は5の一様分布のエージェント視力ごと生存数と生存率. 21.
(23) そして、エージェント移動と位置を見ると、コントロール組、エージェント半分ずつ視力が 1 と 5、すべてのエージェントの視力が 5 三組によるエージェントの位置を示している。エージェント が山頂には集中せず、砂糖・スパイスの収穫量は低いが、両方を収穫できる等高線付近で生存し ていることが分かる。エージェントが山頂には集中せず、シュガーとスパイスが両方を収穫でき る等高線付近で生存していることが分かる。視力以外にエージェントの位置もエージェントの生 存率に関わる要因だと考えられる さらに視力50のみの完全情報市場と比較すれば、情報格差がない状態においてエージェント が自身に最適な位置が見つけられる。ただし、情報格差が存在する場合、視力値が小さいエージ ェントがシュガー・スパイスの山の頂上におり、生存率と生存数に影響を与える。. 視力1-5. 視力 1 又は5. 視力5のみ. 視力50のみ また、外部環境を分析すると、下の図がそれぞれの実験の取引価格の標準偏差である。視力が 取引価格の収束性に影響を与える可能性があると考えられる。視力値が低くなると、取引価格が 収束せず、分散している一方、視力値が高いエージェントが多ければ、取引価格が収束していく 傾向があるとみなされる. 22.
(24) 視力1-5の一様分布. 視力1又は5の一様分布. 視力17のみ 最後、エージェント間のジニ係数について、取引により、ジニ係数が急速に拡大していく傾向 があり、視力値が高ければ、期間ごとのジニ係数が収束していく傾向がある。期間ごとのジニ係 数の分散度はエージェント間の繋がりを反映する可能性がある。分散度が小さければ、エージェ ントの繋がりがより強いと示す傾向がある。. 23.
(25) 視力1-5の一様分布. 視力1又は5の一様分布. 視力17のみ 4.1.3. エージェントの代謝率による影響 この実験においてエージェントの代謝率がエージェントと外部環境にどのような影響を与える かを分析する。視力と代謝率以外の設定がすべてコントロール組と同じである。視力についてす べてのエージェントが5とし、視力がもたらす影響を排除したいと考える。代謝率について、コ 24.
(26) ントロール組の設定が 1―5 の一様分布であるが、こちらは 1-3 の一様分布と 1-5 の一様分布を 2 つに分け、実験を行う。 まず、エージェントの生存について、エージェントが 400 のうち、代謝率 1-3 の組が 244 生き 残った。それに対して代謝率 1-5 組が 84しか生き残っていない。代謝率がエージェントの生存 と強い関連性があり、代謝率が小さければ小さいほど、エージェントの生存がしやすくなる可能 性が高いと考えられる。. 代謝率1~3の一様分布、視力5. 代謝率1~5の一様分布、視力5 そして、代謝率と取引量の関連性について、エージェントの代謝率が低くなるとともに、エー ジェントがより多くの持ち資産を取引し、取引量が増え、取引価格もより収束していき、市場全 体の流動性が高くなる傾向が見える。. 代謝率1~3の一様分布 25.
(27) 代謝率1~5の一様分布 また、代謝率と取引価格の関連性について、こちらでは期間ごと取引価格の標準偏差を利用氏 分析する。エージェントが多く生存したことで、全体の取引ネットワークが成立し、取引の回数 が非常に高いエージェントを通じ、価格情報をエージェント全員に拡散し、価格評価のばらつき が小さくなる。. 代謝率1~3の一様分布. 代謝率1~5の一様分布. 26.
(28) 最後、代謝率とジニ係数の関連性について、代謝率が高ければ、期間ごとのジニ係数が収束し ていく傾向があり、期間ごと、より頻繁な取引を通じ、エージェントの繋がりがより強いと示す 傾向がある。. 代謝率1~3の一様分布. 代謝率1~5の一様分布 4.1.4. エージェントの初期資産による影響 この実験において、エージェントの初期資産がどのようにエージェントの行動に影響を与える かを分析する。初期資産以外の設定がコントロール組と同じである。コントロール組の初期資産 の設定は [25,50] の一様分布である。さらに [1,24] と [51,75] の一様分布の 2 つを追加し、初 期資産からもたらす影響を分析する。. 27.
(29) 初期資産[25,50]. 初期資産[25,50]. 初期資産[1,24]. 初期資産[1,24]. 初期資産[51,75]. 初期資産[51,75]. 上の図は初期資産が異なる三回の実験のエージェント生存数と生存率を示している。生存数につ いて初期資産[1,24]のが最も多いが、生存率の大きな変化がなく、エージェントの生存への著しい 影響がある可能性が低いと考えられる。 一方、外部環境から見ると、初期資産と取引量の関連性が強いと考えられる。初期資産が多け れば、全期間にわたる取引も活発し、取引量が増える様子が見えるだろう。取引量の増加ととも に、エージェント同士の間に価格合意がより多く行うことができ、平均取引価格が収束していく 様子も見える。また、取引の活発化に従い、シュガーとスパイスを多量に持っているエージェン トがさらに多くの資源を手に入れ、エージェント全体の貧富の格差が拡大し、ジニ係数が収束し て大きくなる傾向があると見える。. 初期資産[25,50]. 初期資産[25,50]. 初期資産[1,24]. 初期資産[1,24]. 28. 初期資産[51,75]. 初期資産[51,75].
(30) 初期資産[25,50]. 初期資産[1,24]. 初期資産[51,75]. 4.1.6 まとめ 本研究はエージェント・ベース・シミュレーションを通じ、Sugarscape を拡張したモデルを構 築し、相対取引において視力、位置、代謝率、初期資産などの要因がエージェント自体と市場全 体にどのような影響を与えるかを分析した。 まず、情報獲得能力が市場参加者の利益に相当な影響を与える。情報獲得能力が向上すると、 取引範囲が広くなり、取引相手も多くなり、取引者に有利な影響が現れる。ただし、視力が唯一 の要因ではない。理由として情報獲得能力がどのぐらい強くても限界があることで、完全効用市 場ではないからである。情報格差のほか、取引者の位置も自身に大きな影響を与える。資源や地 域の多様性により正の影響が与えられる様子が見える。その他、取引者自身の属性(代謝率)が 生存に最も大きな影響を与える傾向がある。最後、取引者の資産がストックとして生存に影響が 少ない。しかし、取引のフローに対する影響が大きく、大口投資者が多くなると、市場全体が活 発化しに行く傾向が見える。. 5. まとめ 経済活動において、様々な主体と影響要因がある。エージェント・ベース・シミュレーション がその中のいくつかの要因を抽出し、研究を行う。このようなアプローチは実取引市場を簡潔に 再現し、要因間の関連性が研究できる一方、いくつかの問題点も存在しており、経済活動メカニ ズムの複雑性を反映している。 本研究において、最初に資本資産価格モデルに基づき、経済社会の情報の非対称性を切り口と してエージェント・ベース・モデルを構築した。このモデルが Epstein・Axtell [1996]による Sugarscape モデルを拡張し、エージェントの視力、代謝率、位置などの諸要因と外部環境となる 取引量、取引価格、エージェント全体の貧富格差の諸要因を考慮し、シミュレーションすること ができる。 分析結果により、(1)情報獲得能力が市場参加者の利益に相当な影響を与えること、(2)情 報獲得能力の向上を通じ、取引範囲が広くなり、取引相手も多くなり、市場全体のパフォーマン スに影響が現れること、 (3)取引空間上における市場参加者の位置も自身に大きな影響を与える こと、(4)資源や地域の多様性も市場参加者の効用に影響を与えること、 (5)市場参加者自身 の属性(代謝率)も強い影響を与えること、 (6)取引者の資産がストックとして、取引に影響が 大きく、大口投資者が多くなると、市場全体が活発化しに行く傾向が見えること、などの興味深 29.
(31) い傾向をみいだした。 本研究は、 (1)相対取引における投資者に影響を与える主な要因を分析し、エージェントのミ クロ行動と市場全体のマクロ行動をつなげた。 (2)モデルにおいて大量なエージェントと長期間 のシミュレーションを行い、従来のエージェント数が少ないシミュレーションを補完した。. 6. 今後の課題 本研究はモデルの簡潔さを維持するため、ある設定が比較的に簡単である。例えば、エージェン トが取引を行う時、MRS が完全に公開的である。しかし、現実には、市場参加者の誤判断や騙し合 いのようなノイズ情報が大量に存在する。また、今回は相対取引のみ研究を進めたが、現実には 逆に取引場取引が主流的な存在することである。今後はこれらの課題を深め、モデルをさらに拡 張することができ、より現実的になると考える。. 7. 附録 シミュレーションコード # -*- Mode: Python; coding: utf-8-dos; -*-. from psim import * from graph import graphclient import datetime graphclient.GraphServer.createServer(uri='http://127.0.0.1:59247'). initialize(). setGlobalSeed(None). # カスタムコード import networkx as nx import random as rd import math import copy. # シミュレーションパラメータの定義 class SimulationParam: def __init__(self, inputDir = u"input\\default", outputDir = u"output\\default"): self.fnameSugar = constantValue(u"C:\\Users\\barbossa\\Desktop\\sugarmap.csv").next() # self.fnameSpice = constantValue(u"C:\\Users\\barbossa\\Desktop\\spicemap0.csv").next() #. 30.
(32) self.maxTradeIterate = constantValue(10).next() # 最大取引反復回数. # シミュレーターの定義 class Simulator (SimulatorBase): def __init__(self, param = SimulationParam(), inputDir = u"input\\default", outputDir = u"output\\default", showGraph = True, start = lambda self: None, warm = lambda self: 0.0, until = lambda self: 1000.0, odesolver = lambda self: dopri54Solver(dt = 0.1, rtol = 0.001, atol = 1e-06), dataDir = u"data"): SimulatorBase.__init__(self, param, inputDir, outputDir, showGraph, start, warm, until, odesolver, dataDir). # 資源の定義. # オブジェクトの生成 # リンクの生成 # 格子グラフ の定義. class LatticeGraph (LatticeGraphBase): def __init__(self, **keys): LatticeGraphBase.__init__(self, u"格子グラフ", width = 50, height = 50, type = 4, directed = False, **keys) def initAfter(self, **keys): f = open(param.fnameSugar,"r"). self.map = []. height = 0 for l in f: l = l.decode('utf-8') ls=l.split(",") # 空白文字列の除外 ls = [int(l.strip()) for l in ls] self.map = self.map + ls. 31.
(33) width = len(ls) height += 1. #. print ls. f.close(). v = 0 for i in range(0, width): for j in range(0, height): self.graph.node[v]["maxsugar"] = self.map[height*(width-1-j) +i] self.graph.node[v]["sugar"] = self.graph.node[v]["maxsugar"]. # 最大 sugar 量. # 現在の sugar 量(初期値). v += 1. f = open(param.fnameSpice,"r"). self.map = []. height = 0 for l in f: l = l.decode('utf-8') ls=l.split(",") # 空白文字列の除外 ls = [int(l.strip()) for l in ls] self.map = self.map + ls width = len(ls) height += 1. #. print ls. f.close(). v = 0 for i in range(0, width): for j in range(0, height): self.graph.node[v]["maxspice"] = self.map[height*(width-1-j) +i] self.graph.node[v]["spice"] = self.graph.node[v]["maxspice"] v += 1. 32. # 最大 spice 量. # 現在の spice 量(初期値).
(34) def initAttribute(self, agent): pass def setPosition(self, agent, pos): try: origPos = self._agentAttrs[agent] if isinstance(origPos, (list, tuple)): # エッジ上 self.graph[origPos[0]][origPos[1]]["agents"].remove(agent) else: # ノード上 self.graph.node[origPos]["agents"].remove(agent) except: pass self._agentAttrs[agent] = pos if isinstance(pos, (list, tuple)): # エッジ上 self.graph[pos[0]][pos[1]]["agents"].append(agent) else: # ノード上 self.graph.node[pos]["agents"].append(agent) def getPosition(self, agent): return self._agentAttrs[agent] def getRandomPosition(self): return self.gnodeOrEdge.next() def draw(self, panel): screen = panel.screen #for (u, v) in self.graph.edges_iter(): #. (x0, y0) = self.layout[u]. #. (x1, y1) = self.layout[v]. #. screen.line(x0, y0, x1, y1, alpha = 0.3). maxVal = max(self.map). for u in self.graph.nodes_iter(): (x, y) = self.layout[u] val = self.graph.node[u]["sugar"] screen.point(x, y, size = 100,. 33.
(35) color = '#FFD700', alpha = val/float(maxVal)) val = self.graph.node[u]["spice"] screen.point(x, y, size = 100, color = '#FF7F24', alpha = val/float(maxVal)). def drawAgents(self, panel, agents): screen = panel.screen for agent in agents: pos = agent.getPosition() if isinstance(pos, (list, tuple)): (u, v, d) = pos p0 = numpy.asarray(self.layout[u]) p1 = numpy.asarray(self.layout[v]) p = (1 - d) * p0 + d * p1 screen.point(p[0], p[1], size = agent.screenSize, color = agent.screenColor, marker = agent.screenMarker, alpha = agent.screenAlpha) else: (x, y) = self.layout[pos] screen.point(x, y, size = agent.screenSize, color = agent.screenColor, marker = agent.screenMarker, alpha = agent.screenAlpha) def custom(self): pass. self.eLatticeGraph = LatticeGraph(simulator = self). self.addEnv(self.eLatticeGraph) # 同期エージェント の定義. class SynchronousAgentSet (SynchronousAgentSetBase): def _defAgent(self): class _Agent (SynchronousAgentBase):. 34.
(36) def initAfter(self, *args, **keys):. import random as rd. # タイプ別設定 #self.type = rd.randint(1,4) # # if self.type == 1: # aaa # elif self.type == 2: # bbb #. while True: p = self.getRandomPosition() if len(self.agentset.env.findNodeAgents(p)) == 0: self.setPosition(p) self.sugarMetabolism = rd.randint(5,10) # 1~4 の整数をランダムに設定 self.spiceMetabolism = rd.randint(5,10) # 1~4 の整数をランダムに設定 self.screenColor = 'b' self.screenSize = 100 self.die = False break. # # 以下はオリジナルなコード # #while True: #. p = self.getRandomPosition(). #. if len(self.agentset.env.findNodeAgents(p)) == 0:. #. self.setPosition(p). #. seq = [1,2,10]. #. self.vision = rd.choice(seq) #カッコの中から一様分布 #self.vision = rd.randint(1,6)# 1~6 の整数をランダムに設定 #self.vision = 6 #print(self.vision). 35.
(37) #. self.sugar = rd.randint(1,25) # 1~25 の整数をランダムに設定. #. self.spice = rd.randint(1,25) # 1~25 の整数をランダムに設定. #. self.sugarMetabolism = rd.randint(1,4) # 1~4 の整数をランダムに設定. #. self.spiceMetabolism = rd.randint(1,4) # 1~4 の整数をランダムに設定. #. self.screenColor = 'r'. #. self.screenSize = 100. #. self.die = False. #. break. def step(self): u"""エージェントのステップ処理""". # 近傍取得(key:ノード ID, val: ホップ数) neighbor=nx.single_source_shortest_path_length(self.agentset.env.graph,. self.getPosition(),. self.vision) del neighbor[self.getPosition()] # 自ノードは削除. # すでにエージェントがいる近傍を除外 neighborBuf = {} for k in neighbor.keys(): if len(self.agentset.env.findNodeAgents(k)) == 0: neighborBuf[k]=neighbor[k] neighbor = neighborBuf. if len(neighbor) == 0: # 移動先がない場合 dest = self.getPosition() # その場にとどまる else: # 効用関数による最大値 a = self.sugarMetabolism / float((self.sugarMetabolism + self.spiceMetabolism)) neighborW. =. [pow(self.agentset.env.graph.node[n]["sugar"],a)*pow(self.agentset.env.graph.node[n]["spice"],1-a) neighbor.keys()] maxW = max(neighborW). # 近傍から効用値が最大ノードを取得 maxWNode = {} for k in neighbor.keys(): if. 36. for. n. in.
(38) pow(self.agentset.env.graph.node[k]["sugar"],a)*pow(self.agentset.env.graph.node[k]["spice"],1-a) == maxW: maxWNode[k]=neighbor[k]. # 最も近いノードを取得 closestNode = [] for k in maxWNode.keys(): if maxWNode[k] == min(maxWNode.values()): closestNode.append(k). # 移動先を決定 dest = rd.choice(closestNode). # 移動 self.setPosition(dest). # eat self.sugar = self.sugar - self.sugarMetabolism + self.agentset.env.graph.node[dest]["sugar"] self.spice = self.spice - self.spiceMetabolism + self.agentset.env.graph.node[dest]["spice"]. # 死 if self.sugar <= 0 or self.spice <= 0: self.agentset.remove(self) return. # 近傍のエージェントと取引 #neighbor = self.findNeighborAgents(d=1) neighbor=nx.single_source_shortest_path_length(self.agentset.env.graph, self.vision) del neighbor[self.getPosition()] # 自ノードは削除. # 近傍からエージェントを取得 neighborAgents = [] for k in neighbor.keys(): neighborAgents += self.agentset.env.findNodeAgents(k). if len(neighborAgents)>0: # ランダムに一人選択 neighbor = rd.choice(neighborAgents). 37. self.getPosition(),.
(39) else: return # 取引せず終了. # 取引交渉 self_sugar_tmp = self.sugar self_spice_tmp = self.spice neighbor_sugar_tmp = neighbor.sugar neighbor_spice_tmp = neighbor.spice. def MRS(sugar, spice, sugarMetabo, spiceMetabo): return (sugarMetabo *spice)/float(spiceMetabo* sugar). for i in range(0, self.simulator.param.maxTradeIterate): # 最大取引回数まで取引成立しなかった ら取引をしない # MRS を計算 self_MRS = MRS(self_sugar_tmp, self_spice_tmp, self.sugarMetabolism, self.spiceMetabolism) neighbor_MRS. =. MRS(neighbor_sugar_tmp,. neighbor_spice_tmp,. neighbor.sugarMetabolism,. neighbor.spiceMetabolism). # 価格は幾何平均 p = math.sqrt(self_MRS * neighbor_MRS). if self_MRS == neighbor_MRS: # MRs が等しければ終了 return elif self_MRS < neighbor_MRS: # self: sugar の売り手, spice の買い手,. neighbor: sugar の. 買い手, spice の売り手 if p > 1: self_spice_tmp += int(p) neighbor_spice_tmp -= int(p) self_sugar_tmp -= 1 neighbor_sugar_tmp += 1 else: self_spice_tmp += 1 neighbor_spice_tmp -= 1 self_sugar_tmp -= int(1/p) neighbor_sugar_tmp += int(1/p) else: # self: sugar の買い手, spice の売り手,. 38. neighbor: sugar の売り手, spice の買い手.
(40) if p > 1: neighbor_spice_tmp += int(p) self_spice_tmp -= int(p) neighbor_sugar_tmp -= 1 self_sugar_tmp += 1 else: neighbor_spice_tmp += 1 self_spice_tmp -= 1 neighbor_sugar_tmp -= int(1/p) self_sugar_tmp += int(1/p). if. self_sugar_tmp. <=. 0. or. self_spice_tmp. <=. 0. or. neighbor_sugar_tmp. <=. 0. or. neighbor_spice_tmp <= 0: # 交渉の結果 0 以下になる場合には、取引しない return. # 交換後の MRS self_MRS2. =. MRS(self_sugar_tmp,. self_spice_tmp,. self.sugarMetabolism,. neighbor_MRS2. =. MRS(neighbor_sugar_tmp,. neighbor_spice_tmp,. neighbor.sugarMetabolism,. self.spiceMetabolism). neighbor.spiceMetabolism). # 取引ログを記録 self.agentset.monitor.observe(now(), i, self.agentid, neighbor.agentid, self_sugar_tmp, self_spice_tmp, neighbor_sugar_tmp, neighbor_spice_tmp, self_MRS, neighbor_MRS, self_MRS2, neighbor_MRS2, p). # 終了判定 if self_MRS < neighbor_MRS: if self_MRS > self_MRS2 and neighbor_MRS < neighbor_MRS2 and self_MRS < neighbor_MRS:# MRS が向上し、MRS が逆転しないなら次の交渉へ pass else: # 取引を実施して終了 self.sugar = self_sugar_tmp self.spice = self_spice_tmp neighbor.sugar = neighbor_sugar_tmp neighbor.spice = neighbor_spice_tmp break. return. 39.
(41) return _Agent def initAfter(self, **keys): self.interval = 1.0 # ステップ間隔 self.freezeAddAgent = False # エージェントの追加を次ステップまで凍結する self.freezeDelAgent = False # エージェントの削除を次ステップまで凍結する u"""エージェント集合の作成後にこのメソッドが呼ばれる。. エージェント集合固有の初期化を行う。""" self.agentFreezeVars = [] # エージェントの凍結する変数リスト # エージェントの生成. #n = 30 # エージェントの生成数 n = 400 self.generateAgents(n). self.monitor. =. Monitor([u". 時. 刻. ",u"trade",. u"self",. u"neighbor",. u"selfSugar",u"selfSpice",u"neighborSugar",u"neighborSpice",u"MRS_self",u"MRS_neighbor",u"MRS_self2",u"MRS_neighbor2" ,u"p"], ["f","i","i","i","i","i","i","i","f","f","f","f","f"], name = u"取引"). #self.monitor2 = Monitor([u"時刻",u"agent", u"sugar", u"spice"], ["f","i","i","i"], name = u"エージェ ントの状態") self.monitor2. =. Monitor([u". 時. 刻. ",u"x","y",u"agent",. u"sugar",. u"spice",u". 視. u"sugarMetabolism",u"spiceMetabolism"], ["f","f","f","i","i","i","i","i","i"], name = u"エージェントの状態"). self.simulator.addMonitor(self.monitor) self.simulator.addMonitor(self.monitor2). # agents は配列 # タイプ 1. タイプ割合を設定. : タイプ 2. = 1 : 2. # とすると、. agents1 = self.agents[:(int(n*0.3)+1)] agents2 = self.agents[(int(n*0.3)+1):]. for agent in agents1:. 40. 野. ",.
(42) agent.vision = rd.randint(1,5) agent.sugar = rd.randint(25,50) agent.spice = rd.randint(25,50). for agent in agents2: agent.vision = rd.randint(1,5) agent.sugar = rd.randint(25,50) agent.spice = rd.randint(25,50). def step(self): u"""エージェント集合のステップ処理を行う。""" # エージェント集合へのエージェントの追加削除を凍結 self.freeze() # 全エージェントを凍結 if len(self.agentFreezeVars) > 0: for agent in self.agents: agent.freeze(self.agentFreezeVars). # 全エージェントの状態を記録(時刻 0 :初期状態、時刻 1:時刻 0 で取引した結果、、、) for agent in self.agents: (x,y)=self.env.node2xy[agent.getPosition()] self.monitor2.observe(now(),x,y,. agent.agentid,. agent.sugar,. agent.sugarMetabolism, agent.spiceMetabolism). # 全エージェントのステップ処理 for agent in self.agents: agent.step(). # 全エージェントの凍結されていた変更を反映 if len(self.agentFreezeVars) > 0: for agent in self.agents: agent.melt() # エージェント集合への凍結されていたエージェントの追加削除を反映 self.melt() def start(self): u"""同期エージェント集合の動作を開始する。""" # エージェント集合のプロセス. 41. agent.spice,. agent.vision,.
(43) def proc(): try: while True: # ステップ処理 self.step() yield pause(self.interval) except FinishException, e: raise e except Exception, e: fatal(u"[%s]エージェントエラー: エージェント集合のプロセスでエラーが発生しました。" % self.name, "error in agentset process", tb = True) # エージェント集合のプロセスを起動 activate(proc)() def view(self): u"""エージェントの描画を開始する。""" interval = 1 # 表示間隔 screen = self.getAgentScreen(interval = interval, xlim = (0,1), ylim = (0,1)) screen.addAgentSet(self) screen.start(). self.aSynchronousAgentSet = SynchronousAgentSet(u"同期エージェント", self.eLatticeGraph, simulator = self) self.addAgentSet(self.aSynchronousAgentSet). def startSynchronousAgentSet(): self.aSynchronousAgentSet.start() self.aSynchronousAgentSet.view(). self.procs.append(startSynchronousAgentSet) def run(self, **args): # オブジェクトの起動 pass def startProcs(): for proc in self.procs: proc() yield alwaysTrue() activate(startProcs)(). 42.
(44) # シミュレーション開始 start(until = self.until, odesolver = self.odesolver, **args) # 結果の保存 self.save() self.flush() def objective(self): return 0. if __name__ == "__main__": # 実行時の処理 simulator = Simulator(param = SimulationParam(), inputDir = u"input\\default", outputDir = u"output\\default", start = lambda self: None, warm = lambda self: 0.0, until = lambda self: 1000.0, odesolver = lambda self: dopri54Solver(dt = 0.1, rtol = 0.001, atol = 1e-06)). simulator.run() result = simulator.calcObjective() print result simulator.saveResult(result, u"objective") if simulator.agentApp is not None: print u"エージェント画面の終了待ち受け..." simulator.join() sys.exit(). 43.
(45) 8. 謝辞 本論文は筆者が慶應義塾大学大学院経営管理研究科経営管理専攻修士課程に在籍中の研究 成果をまとめたものである。同専攻教授 高橋大志先生には指導教官として本研究の実施の 機会を与えて戴き、その遂行にあたって終始、ご指導を戴いた。ここに深謝の意を表する。 同専攻教授 大林厚臣先生、並びに、同専攻専任講師 市来嵜治先生には副査としてご助言を 戴くとともに本論文の細部にわたりご指導を戴いた。ここに深謝の意を表する。本研究の第 4 章の分析では同専攻の先輩 菅愛子氏に有益なご助言を戴いた。ここに同氏に対して感謝 の意を表する。また、本研究の実験に協力頂いた NTT データ数理システム株式会社 嶋田氏 に感謝する。本専攻 高橋研究室の各位には研究遂行にあたり日頃より有益なご討論ご助言を 戴いた。ここに感謝の意を表する。. 44.
(46) 9. 参考文献 1. Fama, Eugene (1970). “Efficient Capital Markets: A Review of Theory and Empirical Work”. Journal of Finance 25(2): 383–417. 2. Anderson, Charles & Johnson (2003). The impressive psychology paper. Chicago: Lucerne Publishing. 3. Smith, M. (2001). Writing a successful paper. The Trey Research Monthly, 53, 149-150. 4. Holland J.,Hidden Order. How Adaptation Builds Complexity. Boston : Addison Wesley Publishing Company,1995. 5. Farmer J.D.,Andrew W.Lo,Frontiers of finance: Evolution and efficient markets. Proceedings of the National Academy of Sciences,1999. 6. Hommes C.H., Financial Markets as Nonlinear Adaptive Evolutionary Systems. Quantitative Finance,2001. 7. Brock W.A.,HommesC.H.,Heterogeneous beliefs and routes to complex dynamics in asset pricing models with price contingent contracts. Working Paper, Universiteit Van Amsterdam Center for Nonlinear Dynamics in Economics and Finance, 2000. 8. Gaunersdorfer A., Hommes C.H., Nonlinear Adaptive Beliefs and the Dynamics of Financial Markets: The Role of the Evolutionary Fitness Measure. Lecture notes in computer science,2001. 9. Brock W.A., HommesC.H., Evolutionary dynamics in financial markets with many trader types. Working Paper, Computing in Economics and Finance of society for Computational Economics, 2001. 10. Andrew W.Lo,The Adaptive Markets Hypothesis. Journal of Portfolio Management, 2004. 11. Frankel J.,Froot L.,Explaining the demand for dollars: International rates of return and the expectations of chartists and fundamentalists. Economics Working Papers, Agriculture, Macroeconomics and the Exchange Rate, 1988. 12. Kirman A.P., Epidemics of opinion and speculative bubbles in financial markets. Money and Financial Markets. 1991. 13. Grauwe P.D., Dewachter H., Embrechts M., Exchange rate theory: Chaotic models of foreign exchange markets. Oxford: Blackwell, 1993. 14. Lettau M., Explaining the facts with adaptive agents: The case of mutual fund flows. Journal of Economic Dynamics and Control, 1997, 1117-1148. 15. Arifovic J., The behavior of the exchange rate in the genetic algorithm and experimental economies. Journal of Political Economy, 1996,5 10-541. 16. Routledge B.R., Genetic algorithm learning to choose and use information. Macroeconomic Dynamics, 2001. 45.
(47) 17. Grossman S.J., Stiglitz J.E., On the impossibility of informationally efficient markets. The American Economic Review, 1980,70(3):-11. 18. Stoll H.R., The supply of dealer securities in securities markets. Journal of Finance, 1987,33(4):1133-1151. 19. 喜多一他著,「人工市場で学ぶマーケットメカニズム U-Mart 工学編」,共立出版,2009. 20. 塩沢由典他著,「人工市場で学ぶマーケットメカニズム. U-Mart 経済学編」,共立出. 版,2009. 21. 出口弘,「複雑系としての経済学―自律的エージェント集団の科学としての経済学を目指 いして」,日科技連,2000. 22. J. Epstein, R.Axtell 著,服部正太,木村香代子訳,「人工社会―複雑系とマルチエージ ェント・シミュレーション」,構造計画研究所,1999. 23. 和泉潔,「人工市場, 市場分析の複雑系アプローチ」,森北出版,2003. 24. 刘逖,证券市场微观结构理论与实践.上海:复旦大学出版社,2002. 25. 施东晖,孙培源.市场微观结构-理论与中国实践.上海:上海三联书店出版社,2005(12).. 46.
(48)
Dokumen terkait
Peserta pelelangan dapat menyampaikan sanggahan secara online melalui website pengadaan : lpse.tegalkota.go.id atas penetapan pemenang ini kepada Kelompok Kerja Unit
Manfaat hasil penelitian ini bagi guru adalah sebagai acuan untuk mengembangkan pembelajaran yang membantu siswa untuk mengembangkan model mentalnya dan
dan masukan serta penelitian lebih lanjut untuk kelengkapan ilmu yang diteliti ini. Semoga penelitian ini bermanfaat untuk bidang ilmu pendidikan
menyimpan, mengolah, dan menyampaikan informasi, baik dalam bentuk tulisan, suara, gambar, suara dan gambar, serta data dan grafik dengan menggunakan media cetak, elektronik,
[r]
[r]
Pada masa ini Spanyol sudah terpecah-pecah menjadi beberapa negara kecil yang berpusat di kota-kota tertentu. Bahkan Spanyol terpecah menjadi 30 negara kecil di bawah
Tindakan ini merupakan tindakan yang dilakukan dalam kondisi pilihan terakhir manakala masalah organ yang terjadi pada ekstremitas sudah tidak mungkin dapat diperbaiki