...

PDF版 - 東洋大学国際地域学部教授 池田誠の未来実感ラボ

by user

on
Category: Documents
24

views

Report

Comments

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]
動箱例 け箱例
得点
ヒト
ヒト 得点
Fly UP