昨日から、時間をみつけて、id:aidiaryさんの素晴らしいライフゲームのPython版に囚人のジレンマゲームを入れ込む作業をした。Pythonのクラスとメソッドがよく分からず苦労したが、試行錯誤を繰り返してなんとかものになった。オリジナルの作者のaidiaryさんの許可が得られていないので、ソースはまだ公開できない。QuickTimeで画面の動作状況は記録できた。
青いのがお人好しで常に相手を信頼する「囚人」、緑が勝ち続けると相手を信頼し、一定以上負けると相手を裏切る「囚人」、赤が常に相手を裏切り続ける「囚人」だ。それぞれの「信頼」か、「裏切り」の結果の報酬は以下の通り。「/」の上が自分側、下が相手方。「資産」を最初に10点もっていて、この報酬表に従って自分の資産が増減していく。隣接するグリッドに「相手」が存在すれば「取引」をする。いなければ、ランダムに移動する。
相手
同意 裏切
自分 同意 1/1 -6 / 0
裏切 0/ -6 -3/-3
当初からぐっと数が減っていくが、信頼しあえる「囚人」同士はコロニーを作って、「資産」を増やしていく。*1一定以上の資産が貯まると、セルは白くなる。
裏切りものの赤い「囚人」が一匹狼となり、うろうろしたあげくに、コロニーを次つぎに絶滅させていく様子がわかる。フリーライダーというものがどのようなものか、よくわかる。昨日、増田で「未婚男性」という話しがでていたが、ま、そのシミュレーションといえるかもしれない。あ、ただし、私は「未婚男性」がすべてフリーライダーだという論には立たない。念のため。
■30分たたないうちに・・・・
お返事いただいた。ありがたい!
ライフゲームを囚人のジレンマに応用したんですね。もちろん公開しても問題ありません。このサイトのプログラムは完全にフリーなので。
http://aidiary.hatenablog.com/entry/20080914/1281748797#comment-12921228815715709240
移動する囚人のジレンマって実はついこの間、始めて知ったのですが発想が面白いですよね。私の場合、NetLogoというプログラムのモデルを見て知りました。PythonはGUIのプログラムを書くのがけっこう面倒なのでNetLogoでもよいかもしれませんね。
http://ccl.northwestern.edu/netlogo/models/PDN-PersonIterated
このリンク先のプログラムが面白そう。まだ動かせてないので、確信はないが意思決定の戦略別に色分けしているらしい。移動もするらしい。いやぁ、ちゃんとした研究者がこうしてやっているのだと。
ま、私のレベルの低いモデルでのPythonのソースはこちら。ちなみに、Python以外にPyGameというパッケージ(?)をインストールする必要があるので要注意。