Comments
Description
Transcript
PDF版 - 東洋大学国際地域学部教授 池田誠の未来実感ラボ
人工社会シミュレーション SimTaKN2artisoc で作る人工社会構築指南 (導入編・応用編) 科研費研究「マルチエージェントによる人工社会の基礎モデル構築」 2012 年 3 月 31 日 東洋大学国際地域学部教授 池田誠 はじめに このマニュアルは、山影進著『人工社会構築指南』書籍工房早山、2007 のモデルを SimTaKN2artisoc でモデル化したものである。 マニュアルと SimTaKN2artisoc、artisoc のモデルを見比べて、モデルの 作成や操作を楽しんで下さい。なお、最初のモデルは東洋大学大学院国際地 域学専攻博士前期課程1年喬ロさんが作成しています。 なお、SimTaKN と SimTaKN2artisoc に関する操作説明は、制作者であ る NPO 法人「情報化ユートピア」の中村州男代表がホームページで公開し ますので、そちらも参考にしてください。 本稿は平成21年度科学研究費補助金(基盤研究(C)、課題番号: 21530665) 「マルチエージェントによる人工社会の基礎モデル構築」 (3 年計 画)の成果の一部である。 印刷時の注意:このマニュアルは A5 版サイズの書籍をイメージしています。 そのため、印刷時には、プロパティのページレイアウト設定で「冊子」を選 択し、用紙サイズの設定を A5、出力用紙サイズをA4とし、詳細設定で綴 じ代を 0 に設定して下さい。プリンターによって設定が異なりますので、冊 子印刷の設定を確かめて下さい。 1 シミュレータおよびモデル・ファイルなどに関する注意事項 (必ずお読みください。 ) 本書で紹介するモデルは、情報化ユニオンの中村州男氏が開発した SimTaKN と株式会社構造計画研究所が開発したartisoc で作成しています。 artisoc については、山影進著『人工社会構築指南』を購入すると利用可能 となる artisoc textbook のバージョン 1.1 を基本的には利用して作成してい ます。しかし、モデルによっては、artisoc academic Ver.2.6 を利用している モデルもあります。アカデミック版でしか動かないモデルもありますので、 そのようなモデルについては、アカデミック版を株式会社構造計画研究所か ら購入したうえで利用して下さい。Artisoc については、上記の山影先生の 本や株式会社構造計画研究所のホームページ(http://mas.kke.co.jp)に記載 されている注意事項をご確認下さい。 SimTaKN(SimTaKN2artisoc)については、中村州男氏のオンラインヘ ルプ(http://simtakn.exblog.jp/)に記載されている注意事項をご確認下さい。 本書のモデルは、SimTaKN を用いて山影先生の本と株式会社構造計画研 究所のホームページに掲載されているモデルを参考に、筆者が作成していま す。それぞれのモデル作成に当たって、出典や参考文献を明記するようにし ていますが、記載漏れがありましたら訂正しますのでご連絡をお願いしま す。 本 書の 図の カラ ー版お よ びモ デル は、 池田誠 の ホー ムペ ージ (http://simtakn.net/)からダウンロードすることができます。本書で構築 したモデルに基づいて研究発表をする際には、その旨を発表資料等に明記し てください。 なお、いかなる場合も artisoc、SimTaKM のご使用、池田のホームペー ジに掲載されているモデルや技法の使用によって、何らかの損失や影響が生 じたとしても、本書の著者、出版社および池田のホームページの著者・制作 者ならびに東洋大学はいっさいの責任を負えません。以上のことをご了承頂 いた上で、artisoc、SimTaKM をご使用願います。 2 目次 導入編 1.エージェントを動かす・・・・・・・・・・・・・・・・・・・・・ 5 oozora.flh oozora.model academic 版:oozora_Ver2.model 2.エージェントに判断させる・・・・・・・・・・・・・・・・・・・11 hanabi.flh hanabi.model 2:hanabi_02.flh hanabi 02.model 3.エージェントに周囲の環境を調べさせる・・・・・・・・・・・・・14 tachibanasi.flh tachibanasi.model 3−2.コントロールパネルを作る・・・・・・・・・・・・・・・・・19 tachibanasi_B.flh tachibanasi_B.model 3−3.1種類のエージェントだけに注目する(第 6 章) ・・・・・・・26 tachibanasi_C.model tachibanasi_C.flh 応用編 4.立ち話・・・・・・・・・・・・・・・・・・・・・・・・・・・・29 20100914_Hajimete_04_08-1_Tachibanashi.flh 20100914_Hajimete_04_08-1_Tachibanashi.model 5.分居モデル・・・・・・・・・・・・・・・・・・・・・・・・・・31 20100906_20100416_Bunkyo-3c.flh 20100906_20100416_Bunkyo-3c.model 6.空気感染モデル ・・・・・・・・・・・・・・・・・・・・・・・33 IM_01-15-00-01_18-5_Influenza.model 20100915_18-5_Influenza_01.flh 20100915_18-5_Influenza_01.model 7.プランクトンの補食モデルから食料採集モデル・・・・・・・・・・36 20101001_16-6-Plankton_F_01_A01.flh 20101001_16-6-Plankton_F_01_A01.model 20101001_16-6-Plankton_F_01_A01_aca.flh 20101001_16-6-Plankton_F_01_A01_aca.model 8.ボイド・モデルから問題群回避のモデルへ・・・・・・・・・・・・38 ボイド・モデル:IM_01-24-00-01_26-4_Boid_D.model 問題群回避のモデル:20100904_26-4-boid-D-09.flh 3 20100904_26-4-boid-D-09.model 20100904_26-4-boid-D-09_aca.flh (Academic 版) 20100904_26-4-boid-D-09_aca.model (Academic 版) 8−2.問題解決と性格(行動特性)モデル・・・・・・・・・・・・・41 20101001_26-4-boid-D-13.flh 20101001_26-4-boid-D-13.model 20101001_26-4-boid-D-13_aca.flh(Academic 版) 20101001_26-4-boid-D-13_aca.model(Academic 版) 9.六角モデルで帝国モデル ・・・・・・・・・・・・・・・・・・・43 20100915_28-2_Empire_B_01.flh 20100915_28-2_Empire_B_01.model 10.アクセルロッドのゲーム戦略選手権モデル・・・・・・・・・・・・45 20101127_29-2_IPD_B_J5.flh 20101127_29-2_IPD_B_J5.model 11.ゲーム戦略選手権モデルの模倣による学習のルール化・・・・・・・48 20100911_29-3_IPD_C_J6_02.flh 20100911_29-3_IPD_C_J6_02.model 20100911_29-3_IPD_C_J6_02_aca.flh 20100911_29-3_IPD_C_J6_02_aca.model 12.適者生存のルール化・・・・・・・・・・・・・・・・・・・・・・50 20100913_29-4_IPD_D_J_05_最初は 1a_改 2.flh 20100913_29-4_IPD_D_J_05_最初は 1a_改 2.model 20100913_29-4_IPD_D_J_05_最初は 1a_改 2_aca.flh 20100913_29-4_IPD_D_J_05_最初は 1a_改 2_aca.moodel 4 1.エージェントを動かす oozora.flh oozora.model academic 版:oozora_Ver2.model 注:academic 版の model は、srtisoc Ver.2.6. を利用して SimTaKN2artisoc で変換したモデルです。 ルールが改行されている点が Text 版との違いです。 (1) 初期設定 山影進著『人工社会構築指南』第 4 章のモデルを SimTaKN で作成してみ よう。SimTaKN を起動し、 「設定」の「artisoc」のラジオボタンをクリッ クすると、 「SimTaKN→artisoc」の画面が出て、初期設定ができる。 本章のモデルの場合は、 「2.空間定義」のところで、空間にを「oozora」 を入力する。 「3.エージェント定義」のところで、 「1」のエージェント名 を「共通」に入力し、 「2」の「空間 No」を「1」 、 「空間名」を「oozora」 、 「エージェント名」を「tori」を入力して、 「書き込み」を選択し、初期設定 ができあがる。 操作の間で初期値を変えたい場合、 ダブの操作をすればいい。 5 以上の操作ができたら、SimTaKN の画面は以下のようになる。 SimTaKN 上の「共通」は Artisoc 上の「Universe」で、 「oozora.tori」は artisoc 上のエージェントを表す。 6 保存すれば、Artisoc が立ち上がり、初期設定の画面ができあがる。 (注:artisoc 上で、初期設定を終えて、実行すれば、tori のエージェントは マップの左下にいるが。SimTaKN で操作するとき、エージェントは真ん中 にいる。SimTaKN の初期設定の(x,y)は(25,25)になっているためであ る。 ) でも、マップで表すエージェントは一つの点に集まるはずだが、上の画面 のエージェントがドーナツ状になっている。それは、SimTaKN 上で「一つ 進む」というルールが自動的に認識されているからである。正確に初期設定 するのは、 「一つ進む」から「マップ」への線を切って、 「マップ」で表すよ うにするため「x」や「ID」の関数から「マップ」と繋いでおいた方がいい。 直した画面は以下の通りである。 (注:緑の線は順番並べるだけ、計算していない、青の線が計算している ことを示している。そして、緑の図形も計算していないことを示し、青い図 形はデータやルールが入っていることを示している。 ) 7 SimTaKN の画面 artisoc の画面 8 (2) 動かす(If 関数の応用) これからの操作は主に「oozora.tori」の空間で行う。 a.「Init」から「年齢値」という関数を「step」に移動させ、そのまま置く。 また「step」で「30 になったら」という新しい関数を作る。 b.ルールを入力する作業。 「30 になったら」の箱を選択し、画面の右側が「入力」に変わる。 「式入 力」の下のフレームがルールを入力する場所である。 9 式を入力するとき、手数を簡単にするため、 「関数選択」の上下スクロール バーをクリックすると、 「関数選択パネル」が飛び出す。 「関数選択パネル」 で関数のキーワードを入力すると、関数の式が出てくる。本章の場合は If 関 数を使う。 (注:EQ/0→= NE/1→≠ GT/2→≻ GE/3→≧ LT/4→≺ LE/5→ ≦) 入力する前に、前置いた「年齢値」から「30 になったら」へリンク線を 繋ぐ。次に、 「式入力」のところに「If(x, EQ,y) 」を入力する。x に「値の 選択」の所の「年齢値」を選択して入力し、y に「30」を入力する。 10 次に「Init」から「一つ進む」の関数を「Step」に移動させ、 「Else」の中 に置く。また、 「Step」で「Direction」という新しい関数を作り、 「Then」 の中に置く。 これを保存すれば、artisoc のモデルが自動的に生成される。 以上で第四章の作業が完成である。 11 2.エージェントに判断させる hanabi.flh hanabi.model (1) 初期値設定: 『人工社会構築指南』第 5 章のモデルでは oozora のモデルを hanabi とい う名前に変更して保存し、hanabi のモデルで操作を行う。初期設定値の(x,y) は(25,25)だが、地上からの発射をイメージさせるために y を「0」に設定す る。 「Direction」の「RANDOM(0)*360」を垂直方向の「90」に設定する。 (2) 場合い分け 1: 「30 になったら」の下に、もう一つのルールを入力する。 「Then」の中に、 「<0.5」という箱を作る。 「式入力」に「If」関数を入 力:If(RANDOM(0),LT,0.5)というルールである。 また「Direction」を「0.5」の「Then」の中に移動させ、初期設定の 「RANDOM(0)*360」から「180- RANDOM(0)*30」に変更する。 12 「0.5」の「Else」の中にもう一つの「Direction」を作り、初期設定の 「RANDOM(0)*360」から「RANDOM(0)*30」に変更する。 保存すれば、完成である。 13 (3) 場合い分け 2:hanabi_02.flh hanabi_02.model 新しいルールを入力するため、 「<0.5」の設定を変える。 「Then」中の 「Direction」のルールを「180」に変更し、 「Else」中の「Direction」のル ールを「0」へ変更する。 もう一つの関数を作り、 「40 になったら」という名を付け、 「年齢値」から リンク線を繋ぐ。これからルールを入力する。 「If(x,GE,y)」というルールを 「40 になったら」の式入力に書き込む。 「40 になったら」中の「Then」に「m.Turn()」というルールを入力する。 本章のモデルは「m.Turn(RANDOM(0)*20-10」を使う。 14 次に「30 になったら」の「Else」から「一つ進む」を持ち出し、 「マップ」 とリンク線を繋ぐ。 15 保存すれば、完成である。 以上で第五章の作業が完成である。 16 3.エージェントに周囲の環境を調べさせる tachibanasi.flh tachibanasi.model (1) 初期設定 山影進著『人工社会構築指南』第 6 章のモデルを作成するために「空間名」 を「hiroba」に、エージェント名を「hito」に、 「初期生成数」を「100」に 設定する。 「書き込む」をクッリクすれば、以下の画面が出来上がる。 hito の中に「mawari」という集合変数をつくる。artisoc の操作ではルー ルの入力が必要であるが、SimTaKN では箱を作って、式入力にルールを作 成すれば完成できる。 「m.Dim(変数名,Agtset)」というルールを入力し、 「変 数名」を「mawari」にする。 x,y の値も 25 から RANDOM(50)に設定する。以上で初期設定が終わる 17 (2) 立ち話をさせる モデルを動かすため、 「人数」という変数と「ヒトを集める」 、 「人数の計算」 、 「3 人以上なら」という三つの関数が必要である。 「人数」に「0」を、 「ヒト を集める」に「MakeAllAgtsetAroundown(mawari,2,false)を、 「人数の計算」 に「CountAgtset(mawari,人数)」を、 「3 人以上なら」に「If(人数,GE,3)を 入力する。以下のように繋げれば、完成である。 18 artisoc の画面: 以上は第 6 章の 6.4 までの作業である。これからの作業は「sub」に関す る作業である。 19 3−2.コントロールパネルを作る tachibanasi_B.flh tachibanasi_B.model (1) 初期設定 山影進著『人工社会構築指南』第 6 章前半のモデルを用いて、これからの 作業を続く。6.5 章の「パラメータを変えてみる」ということですが、artisoc 上のコントロールパネルが必要である。SimTaKN でコントロールパネルを 作るには定数箱(六角形)で設定をする必要がある。 今回の作業は「イヌ」というエージェントを作成し、それを動くようにす るために、 「一つ進む」をイヌのシートの「Init」から「Step」へ移動させ、 「マップ」とのリンク線を切る。 「x」から「マップ」へリンク線を繋いで、 「x」→「y」→「Direction」→「ID」→「一つ進む」という順番にリンク 線で繋ぐ。人(赤い点)と区別して見やすいようにするため、 「x」を水色に 設定する。マップに入力する文字の色を指定することで設定が可能になる。 以上で、イヌの設定は完成である。 ヒトのエージェントを自由に変動できるため、初期生成数を「0」に変え る。ヒトとイヌのエージェントを一つのマップで表現できるように、 「共通」 の「Init」でヒトとイヌの受け箱を作って、マップと繋ぐ。 20 (2) コントロールパネルを作る 「共通」の空間の「Init」のなか、三つの「コントロールパネル」とい う箱を作って、 「人数[140]」 「視野の広さ[2]」 「周りの人[3]」の名を入力する。 ということで、以上の図のようになる。これから「コントロールパネル」 の設定を行う。 「コントロールパネル」の箱をクリックすると、右側に「入力」の画面が 出てくる。 21 「人数」の「最小値」を「0」に、 「最大値」を「20」に、 「きざみ」を「10」 に、 「固定値」を「140」に設定する。こういうようなことで、 「視野の広さ」 を「0」 、 「50」 、 「0.1」 、 「2」に設定し、 「周りの人」を「1」 、 「5」 、 「1」 、 「3」 に設定する。以下の画面になる。 (3) ルールを変える コントロールパネルの変更を判断できるようにするため、 「ヒトを集める」 と「3 人以上なら」のルールを変える。 「広場・ヒト」の空間で、 「視野の広さ」と「周りの人」の受け箱を作って、 「視野の広さ」を「ヒトを集める」とリンクし、 「周りの人」を「3 人以上な ら」とリンク線で繋ぐ。 22 「ヒトを集まる」のルール「MakeAllAgtsetAroundOwn(mawari,2,false」 の「2」のところを「視野の広さ」に変更する。 「3 人以上なら」の「If(人 数,GE,3) 」の「3」を「周りの人」に変更し、名を「n 人以上なら」に設定 する。保存すると artisoc 上に以下の画面ができあがる。 (4) Sub を作る まず、 「共通」の「Init」の中に変化箱○を作って、 「人数」と繋ぐ。 「Sub」 というルールを「入力式」の中に入力する。 「サブルーチン名」を「ヒトを作 る」に命名し、 「引数 1」に「人数」を入力する。 「Sub」というルールを入 力すると、水色の操作画面が自動的に出てくる。 今回のモデルは「実数引数」だけ使うから、他の箱は消したほうがよい。 名前を「人数」に設定する。 これから「For 文」を作る。 「For 文」を作るため、 「i」という変数が必要 23 である。 「Sub」の中に○を作り、 「i」に命名し、値を「0」に設定する。も う一つの○を作り、 「For(変数名,初期値,終了値) 」というルールを入力する と、 「For 文」の下に「Loop」という黄色い箱が出てくる。 「人数」と「i」か ら「For 文」とリンク線で繋ぎ、 「変数名」を「i」に、 「初期値」を「0」に、 「終了値」を「人数-1」に設定する。 また「Loop」の中に「CreateAgt」というルールを作り、 「CreateAgt」の 「AgtType」を「GetAgtType(広場・ヒト)」というルールを入力する。以下 の画面になる。 24 保存すれば、コントロールパネルがついたモデルの完成である。 MAS の世界へようこそ! 人数や視野の広さ、周りの人の値を変更して、シミュレーションの結果が どのように変化するか試してみよう。 人数が多いとどうなるか?人口密度の低い地域よりも人口密度が高い都 市の方が・・・となる。逆に心理的距離が近い地方と遠い都市とすると。 視野の広さを大きくするとどうなるか?遠くまで見渡せるとグループは 作りやすくなるか?関心の広さと読み替えると、どのように解釈できるか。 周りの人の値を大きくするとどうなるか?少ない人数なら・・・となるし、 多い人数なら・・・となる。その意味は? 少人数のサークルやボランティ アなどのグループを立ち上げるのは・・・だけど、大人数になると・・・。 シミュレーションの面白さを少し体験できましたか? コントロール・パネルを操作して、次にモデルの中身を変えてみたいと思 ったら、あなたはもうマルチエージェント・シミュレーションによる人工社 会の世界に一歩近づいたことことになります。 (池田) 25 3−3.1種類のエージェントだけに注目する tachibanasi_C.flh tachibanasi_C.model (1) 初期設定 『人工社会構築指南』第 6 章「立ち話 B」のモデルを用いて作業を続ける。 (2) 2種類のエージェントから1種類のエージェントだけを集める式に変更 ヒトとイヌという2種類のエージェントが混在するモデルでヒトという 1 種類だけのエージェントを集めるために、 「MakeAllAgtsetAroundOwn」を 「MakeOneAgtsetAroundOwn」に変更する必要がある。 その式を設定するため、二つの新しい変数が必要である。 「広場・ヒト」の場の「Step」のなかで「ID−広場・ヒト」という受け箱 と「視力」の箱を作る。 「ID−広場・ヒト」から「ヒトを集める」へリンク 線を繋げる。 「視野の広さ[2]−共通」から「ヒトを集める」へのリンク線を きり、 「視力」経由で「ヒトを集める」と繋ぐ。以下のように: これから式を変更する。 「式入力」の前の式を消し、 「MakeOneAgtsetAroundOwn(mawari,視力, ID−広場・ヒト」を入力する。 そして、 「ヒトを集める」を「ヒトを認識する」という名前に変更する。 26 実行すると次の通りである。 以上で第6章の作業が終了である。 27 4.立ち話 山影進著『人工社会構築指南』の第 7 章にある立ち話をモデル化した。 20100914_Hajimete_04_08-1_Tachibanashi.flh 20100914_Hajimete_04_08-1_Tachibanashi.model Space 地域(0,0),Square_2D(50,50,Loop,North,1) 時間軸 コントロールパネル例 グラフ マップ 場の移 場の受 値 [0] 動箱例 け箱例 artisoc 1.0 Begin 集団化し た人数 集団化し た人数 Step Init 観察範囲 [2] 集団の最小 人数[3] 観察範 囲[2] 集団の最 小人数 [3] X X 集団化した人数≧人数 Then Else マップ m.Exit() 人数[100] ヒトID Sub Agtランダム生成 m.Sub(Agtランダム生成, [1],m.GETAGTTYPE([2]),m.GETSPACE([2])) i 子供ID 引数1 Agt種別 m.For([1],0,[2]-1) Loop m.Sub(Agtランダム生成, [2],m.GETAGTTYPE([1]),m.GETSPACE([1])) Agt創造 空間名 全てのAgtの 集合を作成 ヒトや 子供 ランダムに配置 Finish 28 ヒト Step Init 年齢値 グラフ マップ 場の移 場の受 動箱例 け箱例 hitobito 自分の周りを見回す Y 周りの数 ヒトID X 集団の最小 人数[3] ヒトID X 周りの数<集団の最小人数 Then 集団化し た人数 Else Direction 前に進む 集団化した 人数 子供 年齢値 グラフ マッ プ 場の移 場の受 動箱例 け箱例 Step Direction Init X Y 観察範囲 [2] 子供ID 子供ID m.Forward(0.3) X 29 5.分居モデル 山影進著『人工社会構築指南』の第 10 章にあるトマス・シェリングによ る分居モデル、即ち、地域社会の住み分けのモデルを SimTaKN2artisoc で モデル化する。20100906_20100416_Bunkyo-3c.model 20100906_20100416_Bunkyo-3c.flh 30 ユニバース begin Space 地域(0,0),Square_2D(10,10,!Loop,North,1) init 閾値設定 [5] 閾値 満足な ヒト 閾値 満足な ヒト ヒトの半数 [30] 各ヒト の数 m.Sub(エージェン ト生成サブ) 1.1版 満足な人 の割合 不満な人 の割合 artisoc 1.0 Step m.Sub(Agtの配置 と人数のサブ) 人数 m.Sub(満足な人の 割合計算サブ) Sub エージェント生成サブ ..各ヒト の数 ..閾値 i マップ finish 赤人 Sub 満足な人の割合計算サブ 青人 m.For([1],1,[5]) ..満足 なヒト ..人数 Loop m.CreateAgt([1]) m.CreateAgt([2]) ..不満な 人の割合 Sub Agtの配置と人数のサブ ヒトの集合 人々の集合作成 ..閾値 満足なヒトが全員なら Then ..人数 セル上に 配置する ..満足な 人の割合 Else m.Free(ExitSimulation()) 人数を計 算する 赤い人 青い人 Init Init 赤い人 青い人 赤い人 Step Step 赤い人 同じ 人々 近くにいる同じ色のヒトの集合 同じヒト の数 近くにいる同じ色の人のカウント 青い人 青い人 同じ 人々 近くにいる同じ色のヒトの集合 同じヒト の数 近くにいる同じ色の人のカウント 周りの ヒト 周りの ヒト 近くにいる全てのヒトの集合 近くにいる全てのヒトの集合 ヒトの 数 ヒトの 数 近くにいる全てのヒトのカウント 近くにいる全てのヒトのカウント 満足度 満足度 閾値 閾値 満足なら 満足なら Then 満足な ヒト Then 満足な ヒト Else 満足な ヒト セルを3つ移動 31 Else 満足な ヒト セルを3つ移動 6.空気感染モデル 山影進著『人工社会構築指南』の第 13 章にある空間を場として利用する空 気感染モデルを作成する。ただし、下図のウィルスの黄色は出せていない。 IM_01-15-00-01_18-5_Influenza.model 20100915_18-5_Influenza_01.flh 20100915_18-5_Influenza_01.model 32 Begin Space 地域(0,0),Square_2D(50,50,Loop,North,1) m.Sub(感染者数 計算サブ) Init 場の受 マップ 場の移 け箱例 動箱例 時間軸 値 感染率 初期感染 率[0.1] 初期人数 [1100] 感染率 Step m.Sub(ウィルス 行列サブ) 健康状 態色 -Sheet: ヒト ID マップ Finish 感染率 人口 ヒトID 番号 m.Sub(エージェント生成サブ, [3],m.GetAgtType([1])) Sub ウィ ルス行列サブ i ヒトID 番号 人口と 感染者 数 Loop m.Sub(ランダム プットサブ) ウィルス ダミー j m.For(i,0,49) 感染者数 m.For(j,0,49) Loop ..ウィルス(i,j) 感染者数 の割合 感染者 数の割 合 ウィルスがいるなら Then Else ..ウィルス(i,j) Sub エージェ ント 生成サブ 初期人数 Agt種別 Sub 感染者数計算サブ ヒトID i ..感染 者数 繰り返し実行 人々 Loop ..ヒト ID番号 ヒトの集合 Agtの生成 X Y 治癒 one 風邪 人々のループ Sub ランダムプッ ト サブ ヒトの集合 ヒトID Agtの集合作成 Loop 風邪をひいているなら Then Else i i j j ..ウィルス(i,j) 地域に配置 ..ウィルス (i,j) 菌が多いと風邪を引きやすくなる Then 治癒 風邪 Else 風邪なら Then ..感染者数 ..感染者数 ..人口 ..感染者数の割合 33 R Else Init Step 方位 年齢値 グラフ マップ 場の移 場の受 動箱例 け箱例 方向 一歩進む m.Sub(健康サブ) X Y X Direction 一歩進む Sub 健康初期設定サブ Y ヒトID 番号 ヒト ID 治癒 健康 状態 色 ヒトID 番号 ヒト ID 治癒 風邪 健康状 態色 感染率 -Sheet: R 風邪 感染率未満なら Then m.Sub(健康 初期設定サ ブ) Else ..風邪 ..健康 状態色 Sub 健康サブ ..健康 状態色 ..治癒 治癒したら Then ..治癒 ..風邪 Else ..健康状態色 ..風邪 感染率未満なら Then Else ..健康状態色 34 ..風邪 7.プランクトンの補食モデルから食料採集モデル 山影進著『人工社会構築指南』の第 16 章にあるエージェントへの究極の 働きかけとなるプランクトンの捕食モデルをヒトの食料採集モデルに置き換 えた。20101001_16-6-Plankton_F_01_A01.model 20101001_16-6-Plankton_F_01_A01_aca.model 20101001_16-6-Plankton_F_01_A01.flh 20101001_16-6-Plankton_F_01_A01_aca.flh ユニバース Begin Space 地域(0,0),Square_2D(50,50,Loop,North,1) 時間軸 値 コントロールパネル例 [0] グラフ マップ 期間 Sheet 期間 人口 Init X マップ 食料 の数 人口の 計算 食糧 総数 初期値 Then 期間 i Loop Agtの生成 人々 ヒトの 集合 Finish ..食糧総数 食 糧 人々のループ Loop Else 修了 ヒト ID ..食糧総数 35 one グラフ 人口と 食糧の 構成 m.Sub(保有 食糧数サブ) 期間 Sub 保有食糧数サブ Agt種別 繰り返し実行 食料ID どちらかがゼロなら X Agtを生成するサブ Sub Agt生成サブ 食料 /10 食糧の 計算 Agtを生成するサブ 食料初期値 [200] artisoc 1.0 Step 場の移 場の受 動箱例 け箱例 ヒトID 人口初期値 [10] 1.1版 ヒト(オリジナルでは動物プランクトン) Init X Y X Y Direction Direction R ヒト ID 体力 食糧保 有量 体力 食糧保 有量 Sub 動き回るサブ Step ヒト ID 年齢値 グラフ マップ 場の移 場の受 動箱例 け箱例 m.Sub(動き回 るサブ) m.Sub(食料の 捕食) m.Sub(パワー の減少と死滅) m.Sub(子供の 誕生サブ) Sub 食料の捕食 方向転換 体力 視野2以内にいる 食糧の集合 食糧 Sub パワーの減少と 死滅 ..体力 Sub 子供の誕生サブ 食料ID 前進 k 餓死の 危険性 体力が十分なら Then 食糧の 計算 Else ヒト X 餓死なら Then 食糧があれば Else 餓死 子供 体力 Y Then Else k1 食物 子供 誕生 食物を選ぶ 食物の削除 X ..体力 Y X Y ..食糧 保有量 体力 ..体力 食糧(オリジナルでは植物プランクトン) Init Step 年齢値 グラフ マップ 場の移 場の受 動箱例 け箱例 m.Sub(動き回 るサブ) m.Forward(1) //一歩進む m.Sub(子供の 誕生サブ) Sub 子供の誕生サブ k X 食料ID Y 繁殖率以下なら Direction Then 食料 ID X Y 食料 Else X 子供 Y 子供 誕生 Sub 動き回るサブ k 方向転換 X X 前進 36 Y Y 8.ボイド・モデルから問題群回避のモデルへ 山影進著『人工社会構築指南』の第 26 章にあるクレイグ・レイノルズの ボイド・モデル(下)を参考に障害物=問題が多い場合に人々の動きはどう なるのか、考えてみることとする。IM_01-24-00-01_26-4_Boid_D.model SimTaKN2artisoc によるヒトの問題群回避行動のモデルとして、用いて みることとする。問題群が 20 個なら 300 ステップで集団化される人数の指 標は約 400 と高いが、問題群が 100 個と多くなると同じ期間で約 300 と低 くなり、多くの問題が発生すると人々の行動は様々な方向に向かうことが分 かる。20100904_26-4-boid-D-09.model 20100904_26-4-boid-D-09_aca.model (Academic 版) 問題が 20 の場合。 問題が 100 の場合 37 20100904_26-4-boid-D-09.flh 20100904_26-4-boid-D-09_aca.flh (Academic 版) ヒト Agt・・・以下、青色は情報の流れ、緑色は関数の流れ、Sub, For, IF の箱の中では左上から右下 Init Step 年齢値 グラフ マップ 場の移 場の受 動箱例 け箱例 速度 m.Sub(前方の Sheet 問題群を回避 前進 するサブ) m.Sub(集団的 行動サブ) 元の 方向 ..Direction X Y Direction X Direction 速度 周り の人 確認 速度 周り の人 元の 方向 Sub 前方の問題群を回避するサブ Direction ..元の 方向 Then Else R0 R m.Sub(前方 確認サブ) 方向転換 Sub 集団的行動サブ ..確認 問題があれば1 X Then 視野2で集団を形成 Else R1 ..周りの人 m.Sub(前方 確認サブ) 方向転換 問題があれば2 ..確認 Then 周りの人がいれば Then k ..確認 問題があれば 元の 方向 人々 m.Sub(前方 確認サブ) R2 Else 方向転換 Else k1 Direction one 速度 まねする相手を選ぶ m.Turn([1]) Sub 前方確認サブ 速度 速度 速度 Direction 二倍 諸問題 Direction 前進 問題ID 前方の確認 速度 速度 速度 ..確認 38 二倍2 戻る ユニバース (注:問題の所に画像を貼り付けている。 ) Begin Space 地域(0,0),Square_2D(50,50,Loop,North,1) 時間軸 コントロールパネル例 グラフ マップ 場の移 場の受 値 [0] 動箱例 け箱例 Init 問 題 X 人口初期値 [20] Step m.Sub(周りの人々の集計サブ) Finish Sub 障害物設定サブ i 出生 者数 m.Sub(ヒトAgt生成サブ, [1],m.GetAgtType([2])) 問題ID 番号 繰り返し実行 周りの人々 の総計 Loop h v m.Sub(障害物設定 サブ2,[2],[3]) n m.Sub(障害 物設定サブ) h1 v1 m.Sub(障害物設定 サブ2,[1],[2]) 問題ID 番号 h2 v2 m.Sub(障害物設定 サブ2,[1],[2]) Sub ヒ ト Agt生成サブ i 初期値 繰り返し 実行 Loop Sub 周り の人々の集計サブ Agt種別 ..周りの 人々の総計 ..出生者数 周り one の人 Agtの生成 人々 V 問題ID Agtの 生成 ヒトの 集合 諸問題 人々のループ Loop Sub 障害物設定サブ2 H X ..問題 ID番号 問題の集合 X ..周りの人々の総計 Y one 問題 ID 問題 ID ループ2 Loop 生成したての問題なら Then Else X 問題群 Agt Init 年齢値 グラフ マップ 場の移 場の受 動箱例 け箱例 m.Forward(1) //一歩進む Direction 問題ID 問題 ID X Y X Y Step 39 Y 8−2.問題解決と性格(行動特性)モデル このようなモデル化で縦軸を楽観と悲観(リスクへの敏感さ)や横軸を外 向的と内向的(客観的・主観的)などの性格(行動特性)とすると、どちら に向かっているヒトの数が多いかで、楽観的かつ客観的など、進行方向で複 数の傾向の組み合わせを表わすこともできる。しかし、このようなモデル化 を行う際に、人々の問題解決行動が単純に周囲の人の多さによって決まると 言えるかどうかが問題である。例えば、新しいものが好きで試行錯誤など人 とは異なる行動を好む人(遊戯性の高い人で、反対は経験や権威を重視する 人)や、協調的で集団的な行動を好む人ばかりではなく自立的で競争的な人 は、周囲の人の数が増えてくると別の解決策を探ろうとする可能性もある。 従って、人々が問題解決に集団的に対応するという仮定そのものを再検討す る必要がある。 20101001_26-4-boid-D-13.model 20101001_26-4-boid-D-13_aca.model(Academic 版) 20101001_26-4-boid-D-13.flh 20101001_26-4-boid-D-13_aca.flh(Academic 版) なお、人と問題のシートはそのままなので省略する。 40 Begin Space 地域(0,0),Square_2D(50,50,Loop,North,1) Init 時間軸 コントロールパネル例 グラフ マップ 場の移 場の受 値 [0] 動箱例 け箱例 人口初期値 [20] 出生 者数 マップ X 問題群の数 [20] Step m.Sub(周りの 人々の集計サブ) m.Sub(方向 の集計サブ) m.Sub(Big5サブ) グラフ m.Sub(ヒトAgt生成サブ, [1],m.GetAgtType([2])) a_ rtisoc 1.0 1.1版 周りの人々 の総計 m.Sub(問題群 設定サブ,[1]) Finish 右方向 上方向 左方向 下方向 Sub 問題群設定サブ グラフ Loop 楽観性 悲観性 客観性 主観性 新規性 経験的 協調性 非協調性 合理性 非合理性 合理的 非合理的 h 初期値 i 繰り返し実行 グラフ v m.Sub(問題群設定 サブ2,[2],[3]) n h1 v1 m.Sub(問題群設定 サブ2,[1],[2]) h2 v2 m.Sub(問題群設定 サブ2,[1],[2]) Sub 方向の集計サブ ..右方向 ..上方向 ..左方向 ..下方向 X Sub ヒ ト Agt生成サブ 初期値 i 周り one の人 Agtの生成 人々 X Loop 右上なら ヒトの 集合 Then ..右 方向 人々のループ Loop Direction one 人々のループ ..周りの 人々の総計 ..出生者数 繰り返し 実行 Loop Agt種別 ヒトの 集合 人々 Sub 周り の人々の集計サブ Else 上なら Then ..上 方向 ..周りの人々の総計 Else 左なら Then Sub Big5サブ ..右方向 ..上方向 ..左方向 ..下方向 ..非協調 性 ..合理性 ..協調 性 ..非合理 性 非協調協調と 合理非合理 ..悲観性 ..客観性 楽観悲観と 客観主観 ..経験的 Else 下なら ..左 方向 ..合理的 経験新規と 合理非合理 ..下 方向 Sub 問題群設定サブ2 非協調協調と 合理非合理 ..楽観 性 H V X Y 問題ID X one Y ..主観性 Agtの 生成 楽観悲観と 客観主観 ..新規 性 Then ..非合理 的 経験新規と 合理非合理 41 Else ..右 方向 9.六角モデルで帝国モデル 山影進著『人工社会構築指南』の第 28 章にある帝国モデルである。 20100915_28-2_Empire_B_01.model 20100915_28-2_Empire_B_01.flh Space 地域(0,0),Hexagon_2D(10,10,Loop,North,1) Begin 攻撃性 攻撃性 Init 時間軸 コントロールパネル例 グラフ マップ 場の移 場の受 値 [0] 動箱例 け箱例 Step Finish 地域ID 番号 地域ID 番号 初期人数 [100] 国家 色 地域 ID Sub エージェ ント 生成サブ マップ m.Sub(エージェント 生成サブ, 3],m.GetAgtType([1])) 白色 初期人数 Agt種別 i m.Sub(ランダム プットサブ) 初期国家色 Sub ランダムプッ ト サブ 繰り返し実行 Loop ..地域 ID番号 地域 国家 国領 色 土 Agtの 生成 地域ID 集合 Agtの集合作成 セル上に配置する 42 ..白 色 ..初期 国家色 国家色 領土 Init Step m.Sub(帝国地域サブ) 年齢値 グラフ マップ 場の移 場の受 動箱例 け箱例 Sub 帝国地域サブ X 地域ID 番号 Y Direction 一歩進む 攻撃性 国家 色 地域ID 地域 ID ..地域ID 領土 国家 色 攻撃国なら Then Else 領土 地域ID 地域集団 の集合 国々 領土 国 国家 国々のループ Loop ..領土 自国の領土なら Else Then 隣国 隣国を集める 領土 one 国家 隣国のループ Loop ..領土 自国の領土なら2 Then Else 領土 国家色 合併完了なら Then 43 Else 10.アクセルロッドのゲーム戦略選手権モデル 山影進著『人工社会構築指南』の第 29 章にある繰り返し「囚人のジレン マ・ゲーム」を用いたアクセルロッドのゲーム戦略選手権モデルを置き換え た。 20101127_29-2_IPD_B_J5.model 20101127_29-2_IPD_B_J5.flh 44 ユニバース artisoc 1.0 Begin Space 地域(0,0),Square_2D(25,2,Loop,North,1) ステップ Init 時間軸 値 コントロールパネル例 グラフ マップ 場の移 場の受 [0] 動箱例 け箱例 ステップ 初期 人数 ステップ Step m.Sub(エージェン ト生成サブ) 最大利得 行列 ステップ m.Sub(Agtの配置 と人数のサブ) m.Sub(利得 集計サブ) m.Sub(戦略別 得点集計サブ) m.Sub(終了サ ブ) m.Sub(最大利得 行列サブ) ランダム戦略 平均利得 Sub 棒サブ ダミー 全協調ALLC戦略 合計 ダミー1 人数 ダミー2 全非協力ALLD戦略 模倣TFT戦略 非寛容Friedman戦略 協調確率Tullock戦略 Finish Sub エージェント生成サブ ..初期 ヒト 人数 i ..平均利得(0) ..ランダム戦略 ..平均利得(1) ..全協調ALLC戦略 ..平均利得(2) ..全非協力ALLD戦略 ..平均利得(3) ..模倣TFT戦略 ..平均利得(4) ..非寛容Friedman戦略 ..平均利得(5) ..協調確率Tullock戦略 Sub 戦略別得点集計サブ Sub 利得集計サブ k i m.For(i,0,5) m.For([1],0,24) m.For([1],1,[2]) Loop Loop 下 段 m.CreateAgt([1]) 下段の集合 を作成 選択 得 肢 ヒト1 点 下段から 一人選択 Sub Agtの配置と人数のサブ ヒトの集合 上 段 人々の集合作成 セル上に配置する 上段の集合 を作成 選択 得 肢 ヒト2 点 Loop ..合計(i) ヒトの集合 m.For(i,0,1) Loop Loop 上段から 一人選択 j ..最大利得 行列(i,j) ○ ..最大利得 行列(0,0) ○ ..最大利得 行列(0,1) ○ ..最大利得 行列(1,0) ○ ..最大利得 行列(1,1) ..合計(j) j k ..最大利得 行列(i,j) 得点 m.For(k,0,5) m.For(j,0,1) Loop 戦略 one 得点 人々のループ ..人数(j) i j ..人数(i) ヒト 人々 Sub 最大利得行列サブ i m.Sub(棒サブ) ..最大利得 行列(j,i) Loop ..合計(k) 得点 ..ステ ップ Sub 終了サブ ステップが10000なら Then Else m.Exit() 45 ..人数(k) ..平均利得 (k) Agt Init Step m.Sub(対戦 のサブ) 年齢値 グラフ マップ 場の移 場の受 動箱例 け箱例 Direction m.Sub(変色 のサブ) Sub 変色のサブ 一歩進む 選択 肢 手に応じて変色 X ヒト ID Y 選択 肢 戦略 色 Then Else ..色 X 得点 ヒト ID Y 選択 肢 戦略 ..色 ダミ ー 次の 戦略 次の 戦略 得点 Sub 対戦のサブ ..X ..Y 組 A組の集合を作成 one 選択肢 組から一人選択 戦略 ランダム戦略0 Then Else 全て協調戦略1 .. Then Else 選 全て非協力戦略2 択 .. 肢 Then Else 選 ものまねTFT戦略3 択 .. Then 肢 選 ステップ Else フリードマン戦略4 択 肢 Then 最初なら ステップ Then Else ..選 .. 択肢 選 択 肢 相手の 前回の 手 Else 最初なら Then Else .. 選 択 肢 ステ ップ タロック戦略 Then Else i 繰り返し1 Loop k 相手の 前回の 手 非協力が あれば Then Else .. .. 選 選 択 択 肢 肢 中 止 // 過去一度でも裏切っ た裏切り 続けるFriedman 戦略 // 開始10ステッ プの相手の対応で手の出し 方を変えるTullock 戦略 46 .. 選 択 肢 i1 回数 繰り返し Loop k1 相手の 前回の 手 非協力が あれば1 Then Else 回数 協力確率 負な R らゼ ロ 大なら Then Else ..選 ..選 択肢 択肢 11.ゲーム戦略選手権モデルの模倣による学習のルール化 山影進著『人工社会構築指南』の第 30 章にある繰り返し「囚人のジレン マ・ゲーム」を用いたアクセルロッドのゲーム戦略選手権モデルに学習機能 を加えた。 20100911_29-3_IPD_C_J6_02.flh 20100911_29-3_IPD_C_J6_02.model 20100911_29-3_IPD_C_J6_02_aca.flh 20100911_29-3_IPD_C_J6_02_aca.model 47 Begin Space 地域(0,0),Square_2D(25,2,Loop,North,1) artisoc 1.0 ステップ Init 時間軸 値 コントロールパネル例 グラフ マップ 場の移 場の受 [0] 動箱例 け箱例 ステップ 初期 人数 ステップ ステップ m.Sub(エージェン ト生成サブ) 最大利得 行列 ダミー3 m.Sub(終了 サブ) 全協調ALLC戦略 ダミー1 人数 対戦 数 全非協力ALLD戦略 ダミー2 模倣TFT戦略 試合 数 セッ ト数 m.Free(Universe.対戦数=(GetCountStep()-1) MOD 100+1) m.Sub(戦略別の平 均得点集計サブ) m.Free(Universe.試合数 =((GetCountStep()-1)\100) Mod 4+1) m.Sub(棒 サブ) m.Free(Universe.セット数 =(GetCountStep()-1)\400+1) Sub 模倣による学習サブ ..平均利得(0) ..ランダム戦略 ..平均利得(1) ..全協調ALLC戦略 ..平均利得(2) ..全非協力ALLD戦略 ..平均利得(3) ..模倣TFT戦略 ..試合数 ..対戦数 協調確率Tullock戦略 Finish 100か 4か 全てYESなら Then 非寛容Friedman戦略 次の 戦略 m.Sub(模倣に よる学習サブ) Sub 試合時間の管理サブ Sub 棒サブ ダミー 合計 m.Sub(戦略別 得点集計サブ) m.Sub(利得 集計サブ) 戦略区分 ランダム戦略 平均利得 m.Sub(Agtの席替 えサブ) Step グラフ m.Sub(最大利得 行列サブ) m.Sub(試合時間 の管理サブ) ヒトの 集合 集 団 ..平均利得(4) ..非寛容Friedman戦略 ..平均利得(5) ..協調確率Tullock戦略 Else ヒト 得点 次の 人1 戦略 人々のループ Loop 候補 同じ集団を複写 その集団から自分を除く Sub エージェント生成サブ ..初期 ヒト 人数 i m.For([1],1,[2]) Sub 利得集計サブ Sub 戦略別の平均得点集計サブ k マップ i 下 段 m.CreateAgt([1]) 下段の集合 を作成 選択 得 肢 ヒト1 点 ヒトの 集合 人々の集合 作成 セル上に配置する 下段から 一人選択 上 段 上段の集合 を作成 選択 得 肢 ヒト2 点 Loop i i j m.For(i,0,1) Loop m.For(j,0,1) ..戦略区分(i) Then ○ ..最大利得 行列(0,1) ○ ..最大利得 行列(1,0) ○ ..最大利得 行列(1,1) Else 次の戦略 ヒ 人々のループ ヒトの 集合 集団1 Loop j 上段から 一人選択 次の戦略 戦略 one 得点 ..合計(j) 人々のループ1 Loop j 次の ヒト 得点 戦略 戦略 得点 k ..最大利得 行列(i,j) 得点 i Sub 戦略別得点集計サブ m.For(k,0,5) j ..最大利得 行列(i,j) Loop ..合計(k) ..戦略区分(k) i ..試合数 人々 100か 4か 5か Then m.Free(ExitSimulation()) Else ヒトの集合 ヒト 戦略 one 得点 人々のループ ..セット 数 全てYESなら ..人数(i) ..対戦数 ..平均利得(k) ..試合数 m.For(i,0,5) Loop ..合計(i) 得点 Sub 終了サブ ..対戦数 ○ ..最大利得 行列(0,0) 人1の得点が大なら ヒト ヒトの集合 人々 Loop ..最大利得 行列(i,j) 得点 人2 戦略 その順番のヒトを2とする ..合計(i) ..戦略区分(j) Sub 最大利得行列サブ CountAgtSet([1], 順番をランダ ムに決める m.For(i,0,5) m.For([1],0,24) Loop Loop i Loop Sub Agtの席替えサブ 1なら Then ヒトの 集合 セル上に配置する 48 ..合計(j) ..人数(j) ..対戦数 人々の集合 作成 j Else k m.For(k,0,5) Loop ..合計(k) ..対戦数 ..人数(k) ..平均利得(k) 12.適者生存のルール化 山影進著『人工社会構築指南』の第 30 章にある繰り返し「囚人のジレン マ・ゲーム」を用いたアクセルロッドのゲーム戦略選手権モデルに適者生存 のルールを加えた。 20100913_29-4_IPD_D_J_05_最初は 1a_改 2.flh 20100913_29-4_IPD_D_J_05_最初は 1a_改 2.model 20100913_29-4_IPD_D_J_05_最初は 1a_改 2_aca.flh 20100913_29-4_IPD_D_J_05_最初は 1a_改 2_aca.moodel このモデルで 1800 ステップのシミュレーション、即ち 400 ステップごとの 世代交代を4回行った結果を表示すると次の通りである。 49 開始直後の図 1800 ステップ後の図 50 20100913_29-4_IPD_D_J_05_最初は 1a_改 2.flh Begin Space 地域(0,0),Square_2D(25,2,Loop,North,1) Init 初期 人数 世代交代 で生き残 る人数 m.Sub(エージェン ト生成サブ) 初期 人数 最大利得 m.Sub(最大利得 行列 行列サブ) m.Sub(利得 集計サブ) 協調の 割合% 人数 非協調の 割合% 対戦 数 Finish 対戦 数 全非協力ALLD戦略 模倣TFT戦略 試合 数 協調確率Tullock戦略 最後の手0 次の 戦略 最後の手1 Sub エージェント生成サブ ..初期 ヒト 人数 i 手0の総利得 ..平均利得(2) ..全非協力ALLD戦略 ..平均利得(3) ..模倣TFT戦略 ○ ..最大利得 行列(0,1) ○ ..最大利得 行列(1,0) ○ ..最大利得 行列(1,1) ○ ..残存戦略 (0) ○ ..残存戦略 (3) ○ ..残存戦略 (1) ○ ..残存戦略 (4) ○ ..残存戦略 (2) ○ ..残存戦略 (5) Sub 終了サブ ..試合数 ..協調確率Tullock戦略 m 世代交 代で生 下段の集合 を作成 選択 得 肢 ヒト1 点 下段から 一人選択 上 段 上段から 一人選択 5か ..総利得 協調0なら Then Else ..最後 ..最後 の手0 の手1 ..手0 ..手1 の総利 の総利 得 得 ..最後 の手0 Else m.Exit() 初期人数 ..協調の 割合% m.Free(ExitSimulation())ではなく, m.Exit()ではだめなのでしょうか? ..最後 の手1 ..非協調 の割合% ..協調の 割合% ..非協調 の割合% i m.For([1],0,5) Loop Sub 最後の出力 正なら Then ..残存戦略 (i) ..平均利得(i) Else ..残存戦略 (i) If Universe.年 == 1999 Then PrintLn( Universe.年 ",Ran," Universe.残存戦略(0) ",ALLC," Universe.残存戦略(1) ",ALLD," Universe.残存戦略(2) ",TFT," Universe.残存戦略(3) ",Frie," Universe.残存戦略(4) ",Tull," Universe.残存戦略(5) ",協調%," Universe.協調の割合% ",非協 調%," Universe.非協調の割合% ",総利得," Universe.総利得 ", 手0の総利得," Universe.手0の総利得 ",手1の総利得," Universe.手 1の総利得 ",手0," Universe.最後の手0 ",手1," Universe.最後の 手1 ) // 適者生存型(100対戦×4試合×5世代)のゲーム戦略選手権 OpenFileCSV("20100913_29-4_IPD_D_J_02-1c.txt", 2,3) WriteFileCSV(2, Universe.平均利得(0) , False) WriteFileCSV(2, Universe.平均利得(1) , False) WriteFileCSV(2, Universe.平均利得(2) , False) WriteFileCSV(2, Universe.平均利得(3) , False) WriteFileCSV(2, Universe.平均利得(4) , False) WriteFileCSV(2, Universe.平均利得(5) , False) WriteFileCSV(2, Universe.最後の手0 , False) WriteFileCSV(2, Universe.最後の手1 , False) WriteFileCSV(2, Universe.手0の総利得 , False) WriteFileCSV(2, Universe.手1の総利得 , False) WriteFileCSV(2, Universe.協調の割合% , False) WriteFileCSV(2, Universe.非協調の割合% , False) WriteFileCSV(2, Universe.総利得 , True) CloseFileCSV(2) End If 次の 人1 得点 戦略 人々のループ Loop i Sub 戦略別の平均得点集計サブ i 同じ集団を複写 ..戦略区分(i) 人々 戦略 人1 人々のループ1 Loop その人数までなら Then j m.For([1],0,3) 戦略 次の ヒト 得点 戦略 戦略 得点 集団1 ..戦略区分(k) ..試合数 i Loop m.For(i,0,5) Loop ..合計(i) ..人数(i) ..対戦数 人々 ..平均利得(k) ヒトの集合 ヒト 戦略 one 得点 人々のループ Loop Sub Agtの席替えサブ 1なら Then ヒトの 集合 人々の集合 作成 j ..合計(j) ..人数(j) ..対戦数 Else セル上に配置する k m.For(k,0,5) Loop ..合計(k) ..人数(k) ..対戦数 ..平均利得(k) Sub コンソール出力サブ Dim i As Integer If Universe.対戦数 == 99 Then /* Universe.手0の総利得 = GetHistory( Universe.手0の総利得, 1 ) Universe.手1の総利得 = GetHistory( Universe.手1の総利得, 1 ) Universe.総利得 = GetHistory( Universe.総利得, 1 ) Universe.最後の手0 = GetHistory( Universe.最後の手0, 1 ) Universe.最後の手1 = GetHistory( Universe.最後の手1, 1 ) Universe.協調の割合% = GetHistory( Universe.協調の割合%, 1 ) Universe.非協調の割合% = GetHistory( Universe.非協調の割合%, 1 ) For i = 0 to 5 Universe.残存戦略(i) = GetHistory( Universe.残存戦略(i) , 1 ) Next i */ // PrintLn( "適者生存型(100対戦×4試合×5世代)のゲーム戦略選手権:ラ ンダム戦略、全協調 ALLC 戦略、全非協力ALLD戦略、模倣 TFT 戦略、非寛容 Friedman戦略、協調確率Tullock 戦略 " ) // PrintLn( ",ランダム戦略," Universe.平均利得(0) ",全協調 ALLC 戦 略," Universe.平均利得(1) ",全非協力ALLD戦略," Universe.平均利得 (2) ",模倣 TFT 戦略," Universe.平均利得(3) ",非寛容Friedman戦略," Universe.平均利得(4) ",協調確率Tullock 戦略," Universe.平均利得 (5)) /* PrintLn( ",1Ran," Universe.平均利得(0) ",2C," Universe.平均利得(1) ",3D," Universe.平均利得(2) ",4TFT," Universe.平均利得(3) ",5F," Universe.平均利得(4) ",6Tul," Universe.平均利得(5) ",協調," Universe.協調の割合% ",非協調," Universe.非協調の割合% ",総利得, " Universe.総利得 ",手0の総利得," Universe.手0の総利得 ",手1の総 利得," Universe.手1の総利得 ",手0," Universe.最後の手0 ",手1," Universe.最後の手1 ) */ PrintLn( Universe.年 ",Ran," Universe.残存戦略(0) ",ALLC," Universe.残存戦略(1) ",ALLD," Universe.残存戦略(2) ",TFT," Universe.残存戦略(3) ",Frie," Universe.残存戦略(4) ",Tull," Universe.残存戦略(5) ",協調%," Universe.協調の割合% ",非協調%," Universe.非協調の割合% ",総利得," Universe.総利得 ",手0の総利得, " Universe.手0の総利得 ",手1の総利得," Universe.手1の総利得 ",手 0," Universe.最後の手0 ",手1," Universe.最後の手1 ) /* PrintLn( "適者生存型(100対戦×4試合×5世代)のゲーム戦略選手権:" "ラ ンダム戦略 ・・・ " Universe.平均利得(0) "全協調 ALLC 戦略 ・ " Universe.平均利得(1) "全非協力ALLD戦略・ " Universe.平均利得(2) " 模倣 TFT 戦略 ・・・ " Universe.平均利得(3) "非寛容Friedman戦略 " Universe.平均利得(4) "協調確率Tullock 戦略 " Universe.平均利得(5) ) PrintLn( PrintLn( PrintLn( PrintLn( PrintLn( PrintLn( PrintLn( PrintLn( */ End If "適者生存型(100対戦×4試合×5世代)のゲーム戦略選手権" ) "ランダム戦略 ・・・ " Universe.平均利得(0) ) "全協調 ALLC 戦略 ・ " Universe.平均利得(1) ) "全非協力ALLD戦略・ " Universe.平均利得(2) ) "模倣 TFT 戦略 ・・・ " Universe.平均利得(3) ) "非寛容Friedman戦略 " Universe.平均利得(4) ) "協調確率Tullock 戦略 " Universe.平均利得(5) ) "協調の割合% " Universe.協調の割合% ) 51 ヒト1 の集合 人々のループ1 Sub 戦略別得点集計サブ Loop ..合計(k) 削除 ヒト k m.For(k,0,5) 世代交代 で生き残 る人数 -Sheet: Else CreateAgt([2],[1 ヒ ヒトの 集合 集団1 ..戦略区分(j) m.SortAgtSet([2],"得点",False) m.For(i,0,[3]-1) Loop 次の戦略 戦略 one 得点 初期人数 戦略 人2 Else 次の戦略 ..合計(j) Else ヒト Loop 人1の得点が大なら 人々のループ Loop j 100か ヒトの抽出 得点 人2 戦略 Then ヒトの集合 ..対戦数 4か CountAgtSet([1], その順番のヒトを2とする ..合計(i) ヒト ..試合数 全てYESなら Then ヒトの 集 集合 団 i 候補 順番をランダ ムに決める Loop 上段の集合 を作成 全てYESなら Then Else ヒト m.For(i,0,5) 下 段 Loop 4か ヒトの 集合 集 団 ..非寛容Friedman戦略 マップで 動的に色を i j 変えたいと きを除い て,テキス ..最大利得 得点 i ト色が黒色 行列(i,j) j 以外の場合 は,その色 をグラフ色 ..最大利得 得点 行列(i,j) にするよう にしまし た。 黒色であ れば,今ま Sub 戦略の比較サブ ..最 ..手1 ..手0 で通り,リ ..総 ..最 後の の総 の総 ンク順に自 利得 後の 手0 手1 利得 利得 動で色付け ヒト します。 ヒトの集合 人々 選択 one 得点 人々のループ ..セット 数 全てYESなら ..平均利得(4) 選択 得 肢 ヒト2 点 Sub 最大利得行列サブ ..対戦数 100か 4か その集団から自分を除く Loop 空腹色 -Sheet:地 域.ヒト 人々の集合 作成 Sub 適者生存による世代交代サブ ..試合数 ..平均利得(5) k セル上に配置する 100か ..全協調ALLC戦略 m.For([1],0,24) 空腹状 態の図 m.CreateAgt([1]) ..対戦数 ..平均利得(1) 手1の総利得 m.For([1],1,[2]) ○ ..最大利得 行列(0,0) ..ランダム戦略 Sub 利得集計サブ 地域の 図 Loop ヒトの 集合 m.Sub(模倣による学習サブ) Sub 模倣による学習サブ ..平均利得(0) Then 非寛容Friedman戦略 セッ ト数 m.Free()を正常動作するようにしました。 ただし,今回のGetCountStep()の指定は,XVAL指定 ではだめなのでしょうか?XVALとMODを組み合わせ指 定すればm.Free()を使わないでできそうですが? m.Sub(終 了サブ) Sub 棒サブ 全協調ALLC戦略 a_ rtisoc 1.0 m.Free(Universe.セット数 =(GetCountStep()-1)\400+1) m.Sub(コンソ ール出力サブ) m.sub(最後 の出力) 戦略区分 総利得 合計 m.Free(Universe.対戦数=(GetCountStep()-1) MOD 100+1) m.Free(Universe.試合数=((GetCountStep()-1)\100) Mod 4+1) m.Sub(適者生存に よる世代交代サブ) m.Sub(戦略 の比較サブ) m.Sub( 棒サブ) 残存戦略 Sub 試合時間の管理サブ m.Sub(Agtの席替 えサブ) m.Sub(戦略別 得点集計サブ) m.Sub(戦略別 の平均得点集 計サブ) 世代交代 で生き残 る人数 ランダム戦略 平均利得 m.Sub(試合時間 の管理サブ) Step 時間軸 値 コントロールパネル例 グラフ マップ 場の移 場の受 [0] 動箱例 け箱例 得点 ヒト ヒト 得点