<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0>
 
 

top page, english, japanese


社会に於ける善意と悪意――

囚人のジレンマの合理的戦略は単純明快なもので、多くの研究者を憂鬱にさせるものでした。
フォーク定理により「協力」がより豊かな世界を創出するキーであることは知られていましたが、それは、実社会では、合目的な条件の下でしか実施される事が無い様に見えます。例えば、大きなシェアや流通を手中に収める為にライバル企業同士が提携する様な場合です

“腐ったリンゴは周りのリンゴも腐らせる”と言われます。これは人間社会の比喩ですが、いつも真実なのでしょうか。そうでは無いのなら、どの様な因子がその結果を左右出来るのでしょうか

アクセル・ロッドの有名なトーナメントにも賛否両論があります。
初期値次第だという批判は決定的なものに思えます。しかしアクセルロッドは先駆者でした。Binmoreはフォーク定理が証明する無数の均衡(equilibrium)の中から特定の均衡を選ぶ事が重要である事を気付かせてくれたと評価しています



ここで紹介するのは、累次的囚人のジレンマのシミュレータです

4 bitsで表現出来る16種類の戦略パターンが軍拡競争をします。これは恣意的に16種類を選んだのではなく、系統抽出された結果としての16種類の戦略パターンです

戦略を決定する為の参照データとして幾つかの観察ルールがあります。
詳しくは後述しますが、相手の選択した過去のカードまたは自身が過去に相手から受けたカード、相手の戦略コードの評価,相手の全ての過去のカードのスタッツ,相手の全ての過去の倫理的振舞いとしての評価スタッツ等を参照(観察)する事が出来ます。これらは観察ルール(observation rule)として選択します。そして、自身の戦略パターンに照応して、協力か裏切かのカードを決定します。
観察ルールは個々の個体のアビリティとしての観察能力と言えるものです

ランダムに相手を選んで(出会って)ゲームをする様に「地理的ルール」を導入しています。ランダムに隣接する相手を探してゲームをします。相手が見つからなかった場合は、ランダムな方向へ移動します。また、双方共に一定以上の生命力を獲得している優勢な個体同士は、交差生殖により子孫を生み出します。
初期段階は、世界リソースが余っているので、ゲームをするだけでボーナスポイントが追加されます。そして子孫を次々に生み出していきます。この初期段階では、偶然が大きな影響を齎します

観察ルールにも依りますが、大抵の場合、どのような均衡が選ばれるか予想は困難です。このようなシステマティックで表層的なシミュレータではちょっとした偶然に大きく翻弄されてしまう様子です。それでも、各個体にどのような能力(観察ルール)を与えれば、どのような均衡が選ばれるのかの傾向は顕れて来ます

ver.0.86より、幾つかの補足的ルールを追加しました。実社会の暗喩となる様な、親和性を基礎にしたルールと社会階層的なルールを想定しています。いずれも選択/解除が可能です。
ひとつは、似た個体同士だけが関る事です。遺伝子の共通ビットのパーセンテージを設定する事で、それ以上の共通性を持つ個体同士のみがゲームまたは生殖を行なう事が出来ます。
もうひとつは、富む個体は貧しい個体を相手にしない事です。生命力の比を設定する事で、それ以上の格差のある個体同士は関りを持てません。但し、設定した比率の範囲で、生命力を多く獲得している個体の戦略(遺伝子)をコピーする事が出来ます。成功した個体を模倣するという事です。特定の比率の範囲に絞るのは、格差が大き過ぎると影響力は却って小さく、模倣する事もあまり無いだろうからです

ver.0.87より、観察ルールをひとつ加えました。相手の戦略コードを評価する事が可能なルールで「Rule-X」としてプリセットしています。いわば相手の本性を見抜く観察能力を附与した訳です。
幾つかの過去のカードを観察するだけでは、その際の相手まで情報として含んでいる訳では無いので、相手の本性を知る事は不可能です。
具体的にはサイン表現ともなっている戦略コードを評価するだけなのですが、ソーシャルシミュレーションとして考えると一種のインスピレーション(霊感)を与えた事になるでしょう

ver.0.88より、観察ルールを更に2つ追加しました。ひとつ(Rule-Y)は、相手が過去に出した全てのカードのスタッツを参照します。もうひとつ(Rule-Z)は、相手が過去に出した全てのカードの倫理的振舞いとしての評価スタッツを参照します。
Rule-Yは、単純にCカードを出した回数とDカードを出した回数を記録しその比率によって評価します。お役所的な記録評価とでも言えるでしょうか。
Rule-Zは、C乃至Dカードを出した際の相手によって倫理的な対応であったか非倫理的な対応であったかの記録から、その回数の比率によって評価します。これを見抜けるというのは、どのような能力の暗喩となるのか悩ましいところですが、さしあたりイントュイション(直観)とします

個体の振舞いとしてどのような能力を与えればどのような均衡を生み出す事が出来るか?――これがシミュレータの主眼であり、豊かな世界を創発する為の各エージェントの能力を知る事です

先ずは動かしてみて下さい
 


 
iPDilemma, 累次的囚人のジレンマ・シミュレータ
last updated on 7th January 2024 since 11th November 2003
Download ver.0.92.03 for Windows x86 -- it may be worked on Windows XP, 7, 8.x, 10 (32 bits)
Download ver.0.92.03 for Windows x64 -- it may be worked on Windows XP, 7, 8.x, 10 (64 bits)
 
はじめに
 
1. プロセス概要
2. ルールと戦略
3. 使い方の概要
 
chapter1: シミュレーション
 
1-1. ニューゲーム
1-2. カウンターウィンドウ
1-3. スタート,ポーズ
1-4. レストア,セーブ
 
chapter2: プリファレンス
 
2-1. CPU占有率
2-2. 利得
2-3. ミューテーション
2-4. ワールドリソース
 
chapter3: 補助的ルール
 
3-1. 親和性
3-2. 貧富格差
3-3. 模 倣
3-4. 観察ルールの変更
 
chapter4: 過去の2カード
 
4-1. Rule-0, Rule-1の観察データ
4-2. 均衡と構造
4-3. サンプル
 
chapter5: 霊 感
 
5-1. Rule-Xの評価手法
5-2. 均衡と構造
5-3. サンプル
 
chapter6: 役所的記録
 
6-1. Rule-Yの観察データ
6-2. 均衡と構造
6-3. サンプル
 
chapter7: 直 観
 
7-1. Rule-Zの評価手法
7-2. 均衡と構造
7-3. サンプル
 
chapter8: 詳細設定
 
8-1. initial individuals percentage to niche
8-2. always deal with untill percentage to niche
8-3. one behavior max vital
8-4. required for crossing
8-5. newborn vital
8-6. newborn experience
8-7. dead line vital
8-8. opponent search count
8-9. void niche search count
8-a. max bonus in an initial
8-b. max bonus in a middle
 
chapter9: 捕食関係(オマケ)
 
9-1. Rule-XAの評価手法
9-2. 均衡と構造
9-3. サンプル
 


はじめに


冒頭で、4 bitsで表現出来る16種類の戦略パターンが軍拡競争をしますと記しました。
各個体は一定の生命力を持って誕生し、ランダムに相手を選んで(出会って)ゲームをし、その結果として得られる得点が生命力に加算されます。生命力が枯渇するとその個体は死にます。比較的大きな一定以上の生命力を持つ個体同士が出会うと、ゲームでは無く交差生殖により子孫を生み出します。交差生殖のポイントはランダムです。
その場合の遺伝子に該当するのが戦略コードである4 bitsのコードで、サインもまたこのコードにより表現されています。子は当然両親に似た戦略コードを持ちます。低い確率で(そう設定して下さい)、子の遺伝子は生まれ出る際に突然変異を起こし両親と少し違った個体にもなり得ます。
また、隣接するニッチをサーチして相手を発見出来ない場合には、移動します。この移動にも若干の生命力を使うので、長く相手を見つけられない場合には生命力を使い果たしてしまいます。新しい地域を開発するにはより多くのエネルギーが必要になる訳です

つまり、累次的に囚人のジレンマゲームを重ねながら、遺伝的アルゴリズムによって、軍拡競争を行ないます

ワールドリソースはワールドニッチの数に比例し、ひとつのシミュレーションの間は一定量になります。個体が有する生命力の総量とワールドリソースの残余の合計は常に一定です。
ゲームの得点は、ワールドリソースの奪い合いです。新しいシミュレーションの初期段階では、ワールドリソースの残余が大きく、ゲームをするだけでボーナスポイントを得られます。この事で、初期段階には、各個体は子孫を多く生み出します。
もちろんそれは初期段階のみで、ワールドリソースの残余がほとんど無くなると、各個体の生命力の増減はゲームの結果のみに依存する様になります

得点は、囚人のジレンマに準じたものです。出せるカードは「協力」と「裏切」の2種類のみで、相手ももちろん同様で、その組み合わせは4つのパターンになります。プリファレンスで各パターンの得点を設定してしまう事は可能ですが…。
各個体が出すカードをどのように決定するかは、参照するデータを決定する5つのルールと各々の戦略コードに従います
 



ルールは5つあります。これは観察ルールと言っていいでしょう。
Rule-0は相手が過去に出した直近の2枚のカードを観察し、Rule-1は自分が過去に受けた直近の2枚のカードを観察します。Rule-Xは相手の戦略コードを評価します。Rule-Yは相手が過去に出した全てのカードのスタッツを評価します。Rule-Zは相手の過去の全ての倫理的な振舞いのスタッツを評価します

この観察データによってゲームへの対応が変化します。人間も同じ事をします。相手によって対応を変える事と自分が受けて来た過去によって社会に対する対応を変える事です。後者は些か子供じみていると言えるでしょう。
もちろん、人間同様に、相手がどうであろうと、また自分が受けて来た過去がどうであろうと、対応を変えない個体もあります。例えば、「協力(C)」カードしか出さない個体や「裏切(D)」カードしか出さない個体、前者は「All-C」,後者は「All-D」と呼ばれます。また、観察データから考えて不合理な対応をする個体もあります。観察データが「DD」の場合に「C」を選択し「CC」の場合に「D」を選択する様な個体です。つむじ曲がり(Perversity)と呼んでいいでしょう。
こうした一種の性格的な対応は戦略コードによって決定します

戦略コードの種類は、恣意的に抜粋されたものではなく、観察データから考えられる対応全てを網羅しています。その結果が16種類の戦略コードです

具体的に表にまとめると以下の様になります。右画像はカウンターウィンドウで各々のサインも表示されています(TFT系とD系が優勢です)。観察データは、「CC」,「CD」,「DC」,「DD」の4パターンになります。例えば、Rule-0, Rule-1では、1つ目のキャラクタが前々回の,2つ目のキャラクタが前回のカードに相当します

観察データと各個体の戦略カード(C: Cooperate, D: Denial)

CC CD DC DD name
codes 0000 C C C C All-C
codes 0001 C C C D Soft TFT
codes 0010 C C D C Major C
codes 0011 C C D D Slow TFT
codes 0100 C D C C Major C
codes 0101 C D C D TFT
codes 0110 C D D C Extream Favor
codes 0111 C D D D Hard TFT
codes 1000 D C C C Soft Perversity
codes 1001 D C C D Moderation Favor
codes 1010 D C D C Perversity
codes 1011 D C D D Major D
codes 1100 D D C C Slow Perversity
codes 1101 D D C D Major D
codes 1110 D D D C Hard Perversity
codes 1111 D D D D All-D
 



シミュレーションのプルダウンメニューにあるニューゲームによってルールとワールドニッチを設定し、スタートメニューによりシミュレーションを開始させます。レストアメニューによりセーブしたシミュレーションを続行させる事も出来ます。
カウンターウィンドウを開く事で各個体の生存数を確認出来ます

ニューゲームでは、ルールとワールドニッチの大きさを設定します。
ルールは5つあります。これは観察ルールです。Rule-0は相手の履歴を観察し、Rule-1は自分が受けた履歴を観察します。Rule-Xでは相手の戦略コードを評価します。Rule-Yで相手の過去のカードのスタッツを評価します。Rule-Zで相手の過去の倫理的振舞いのスタッツを評価します。これらは後に詳述します。
ワールドニッチの個数について、開いているウィンドウサイズが小さ過ぎるとエラーメッセージが出ます。その場合はウィンドウを大きくするかワールドニッチを小さくして下さい。サインを正常に表示する為に、X軸とY軸各々個別に判定しています。ニッチのサイズ及びプロポーションは自動的に決定されます。
ニューゲームを設定すると、ニッチ総数の約10%余りの個体がプロッティングされます。それらの位置はランダムに選定されます。16種類の個体は種類別に同数に設定されています

スタートでシミュレーションが開始されます。ポーズで停止します。
セーブでシミュレーションを保存する事が出来、レストアで途中段階のシミュレーションを続行する事が出来ます。但し、いずれの場合もシミュレーションがランニングしていない状態に限ります

プレファレンスで、CPU占有率,ゲームポイント,ミューテーション確率,ワールドリソースのレベルを設定する事が出来ます。
CPU占有率は、「high」と「low」から選択します。バックグラウンドで走らせる場合は「low」でいいでしょう。「high」の場合に、CPUとGPUの処理能力のバランスが悪いと表示が飛び飛びになる事があります。また、カウンターウィンドウを閉じている場合の方が処理速度は速くなります。
ゲームポイントは、囚人のジレンマでの懲役年数に相当するものですが、ここではゲームの利得として、正負の数値を設定します。
ミューテーション確率は、1〜3%程度の小さな確率が良いでしょう。戦略コードを遺伝子として交差生殖による子孫を生み出す場合の、子孫の遺伝子を突然変異させる確率です。遺伝的アルゴリズムのミューテーションと全く同じ働きをします。
ワールドリソースのレベルは、デフォルトでは24です。これは恣意的な数値ですが、バランスの良い“辺り”と思われるレベルです。より大きな数値を設定すると、豊穣な世界となり生存可能な個体数はより多くなります。より小さな数値を設定すると、不毛な世界となり生存可能な個体数はより少なくなります
 




chapter1: シミュレーション


ルールとワールドニッチの大きさを設定します。ワールドニッチはX軸とY軸それぞれの個数を設定します

ルールを選択します。観察ルールと言えるもので5つあります。 Rule-0は、これからゲームを行なう相手が過去の2つのゲームで出した2つのカードを観察します。Rule-1は、自分が過去に行なった2つのゲームでその際の相手から受けた2つのカードを観察します。いずれの場合も、直近の2つのゲームのそれを観察します。Rule-Xは相手の戦略コードを評価します。Rule-Yは相手の全ての過去のカードのスタッツを評価します。Rule-Zは相手の全ての過去の倫理的振舞いを評価します。
既に「ルールと戦略」で記しましたが、観察データは戦略(カード)を決定する為のベースとなるものです

ワールドニッチの大きさは、X軸とY軸各々の個数によって設定します。
ワールドニッチの個数について、開いているウィンドウサイズが小さ過ぎるとエラーメッセージが出ます。サインを正常に表示する為に、X軸とY軸各々個別に判定しています。ニッチのサイズ及びプロポーションは自動的に決定されます

ニューゲームを設定すると、ニッチ総数の約10%余りの個体がプロッティングされます。それらの位置はランダムに選定されます。16種類の個体は種類別に同数に設定されています。シミュレーションの初期設定となります
 



カウンターウィンドウをオープンする事で、その時々の各個体の生存数を確認出来ます。ワールドリソースの残余とシミュレーションの経過時間も表示します

右画像は、ニューゲームを設定した直後のものです。初期設定として、各個体は同数で始まり、それぞれの位置はランダムに配置されます

カウンターウィンドウは閉じている方がシミュレーションが速く進みます

ver.0.89.00より、右の画像は旧いモノなのでありませんが、“cycle count”の表示を加えました。全ての個体が1回の振舞いを行なう巡(cycle, round, circuit)の回数です。もちろん、死と誕生があるので、全ての個体が表示されている回数だけ何等かの振舞いを行なった訳ではありません。あくまで時々の全体のサイクルを意味します
 



スタートでシミュレーションを開始させます
 


ポーズでシミュレーションを停止させます




 



セーブでシミュレーションを途中段階のままファイルに保存し、レストアで保存した途中段階のシミュレーションを戻す事が出来ます
 


右画像は、レストア直後のもので、このシミュレーションデータはインストールフォルダ直下のサブフォルダ“data”にサンプルファイルとして収めてあるものです
 




chapter 2: プリファレンス


CPU占有率は「high」と「low」から選択します

「high」に設定した場合に、CPUとGPUの性能バランスにより各個体の振舞いが飛び飛びに表示されたりします。一般的な業務用PCの場合にそうなりがちで、その場合は「low」に設定して下さい。所謂ゲームPCなどではその心配はないでしょう。
マルチスレッドなのでそうなるのですが、内部的に同期していますので、表示の状況にかかわらずシミュレーション自体は正常に進行します

また、バックグラウンドでシミュレーションを進める場合など、リソースを割きたくない場合にも「low」に設定するといいでしょう
 



囚人のジレンマに於いて懲役年数に相当するものとして利得を設定します。2つの個体が「協力(C)」と「裏切(D)」いずれかのカードを出し合うので、全部で4つのパターンになります

本来の囚人のジレンマでは以下の様な懲役年数であり、デフォルト値としている利得への置き換えは恣意的なものです。いずれの場合も「裏切(D)」が有利であることは同じです

懲役年数 利得
C against C 1 4
C against D 3 -7
D against C 0 7
D against D 2 -4
 



ミューテーションの確率を設定します

比較的大きな生命力を持つ個体同士が出会うと、ゲームでは無く交差生殖により子孫を生み出します。戦略コードが遺伝子に相当し、交差ポイントはランダムです。この事で、子孫は両親から戦略コードを受け継ぐのですが、ミューテーションの確率に従い、その戦略コードは突然変異を起こします。
子孫は両親に似たものになりますが、ミューテーションによって、少し違ったものにもなり得ます

これは、遺伝的アルゴリズムそのものです。
最適な、もしくは、優性な、遺伝子(戦略コード)が軍拡競争を制するアルゴリズムです。0.01〜0.03(1〜3%)程度の小さな数値が良いでしょう
 



ワールドリソースのレベルを設定します

デフォルトは24です。これは恣意的な数値ですが、バランスの良い“辺り”と思われるレベルです。より大きな数値を設定すると、豊穣な世界となり生存可能な個体数はより多くなります。より小さな数値を設定すると、不毛な世界となり生存可能な個体数はより少なくなります

あまりに大き過ぎる値や小さ過ぎる値を設定すると、ワールドニッチが個体で埋め尽くされたり、全ての個体が死滅する可能性があり、シミュレーションは続行出来なくなります
 




chapter 3: 補助的ルール


似た個体同士だけが関ります。遺伝子の共通ビットのパーセンテージを設定する事で、それ以上の共通性を持つ個体同士のみがゲームまたは生殖を行なう事が出来ます。
と言っても、キャラクタとしての親和性、例えばTFT系やC,D系といった性格づけを基礎に判定している訳ではありません。あくまで単純にビット(遺伝子座)の共通パーセンテージです
 



富む個体は貧しい個体を相手にしない。生命力の比を設定する事で、それ以上の格差のある個体同士は関りを持てません
 



設定した比率の範囲で、生命力を多く獲得している個体の戦略(遺伝子)をコピーする事が出来ます。成功した個体を模倣するという事です。特定の比率の範囲に絞るのは、格差が大き過ぎると影響力は却って小さく、模倣する事もあまり無いだろうからです。
また、その場合の模倣確率を設定出来ます。その条件下で必ず模倣するというのは現実的では無いだろうからです
 



シミュレーションの途中で観察ルールを変更する事が出来ます。各ルールに必要となる観察データはいずれのルールに於いても記録されているので、ルール変更に伴うデータ上の齟齬はありません
 




chapter 4: 過去の2カード


観察データは直近の過去の2枚のカードになります。Rule-0に於いては対戦相手の記録からその相手が過去に出したカードを観察し、Rule-1に於いては自身の記録から過去の対戦相手から受けたカードを観察します。
参照:ルールと戦略
観察データは4種類になります。CC, CD, DC, DDの4つで、Cは「協力(Cooperation)」,Dは「裏切(Denial)」です。最初のカードが前々回の記録で、2つ目のカードが前回の記録です
 



Rule-0及びRule-1に於いては、大抵の場合にTFT系とD系の間でリソースの綱引きとなりますが、どちらが優勢になるかはわかりません

ここでC系が繁栄する事が稀であるのは、D系と出逢うと搾取されるだけの存在になるからです。初期段階でC系は死滅していきます。C系同士で得られる生命力ポイントよりも、D系がC系を裏切って得られる生命力ポイントの方が大きいからです。
特に、D系優勢の中では、世界に刻印された行動の記録はDカードだらけになります。D系に耐性があるのはTFT系ですが、こうした状況の中では、TFT系もDカードを選択する事がほとんどになり、TFT系同士でもDカードを出し合う事で生き残りを図ります。裏切りが世界に蔓延します

TFT系優勢の均衡が顕れる場合には、TFT系同士がCカードを出せるなら、D系との間でのリソースの綱引きで優勢となる事が出来ます。そうして、世界に刻印された行動の記録にCカードが多く含まれるようになると、C系も生存の余地が生まれていきます。TFT系とC系が優勢である限り、協力が世界に蔓延します。そうなると、協力に依る均衡は安定したモノになり得ます

傾向として、Rule-0ではTFT系主体でCカードが蔓延する均衡が、Rule-1ではD系主体でDカードが蔓延する均衡が、選ばれ易くなります
 



Rule-0でCカードが蔓延する均衡が選択されているサンプルです。
最初の画像は、3分後の状態で、特に優勢な個体群はありません。特徴としては、各個体群がクラスター状に比較的よく分離している事でしょうか。その綱引きの結果としてか如何かはわかりませんが、長いサイクルの末に、TFT系が優勢となりCカードが蔓延する均衡が創発しています
 
 


Rule-1でDカードが蔓延する均衡が選択されているサンプルです。
最初の画像は、3分後の状態で、特に優勢な個体群はありません。しいて言えば、D系がやや優勢でしょうか。長いサイクルの末にD系とTFT系がニッチを分け合っていますが、この状態は、Dカードが蔓延している状態です
 
 


 




chapter 5: 霊 感


観察データは、相手の戦略コードの評価結果になります。戦略コードは各個体のサイン表現にもなっているものです。
通常、戦略の類は秘められたモノですので、霊感(Inspiration)としました。このシミュレータの様に、本性が外見に顕れる場合もあるかも知れません。全ての過去のカードとその相手の記録をスタッツとして記憶させ、相手のスタッツを観察データとすれば、本性の観察に相応したシミュレーションになるかも知れません(後々のアップデート案として)

先に、各サイン(戦略コード)に対する評価結果を表に示します。この評価結果が観察結果として扱われます
参照:ルールと戦略

サインと評価

estimation name
codes 0000 CC All-C
codes 0001 CC Soft TFT
codes 0010 CC(87%), CD(6%), DC(6%) Major C
codes 0011 CC(87%), CD(6%), DC(6%) Slow TFT
codes 0100 CC(93%), CD(3%), DC(3%) Major C
codes 0101 CC(93%), CD(3%), DC(3%) TFT
codes 0110 CC(87%), CD(6%), DC(6%) Extream Favor
codes 0111 CC(87%), CD(6%), DC(6%) Hard TFT
codes 1000 DD(87%), CD(6%), DC(6%) Soft Perversity
codes 1001 DD(87%), CD(6%), DC(6%) Moderation Favor
codes 1010 DD(93%), CD(3%), DC(3%) Perversity
codes 1011 DD(93%), CD(3%), DC(3%) Major D
codes 1100 DD(87%), CD(6%), DC(6%) Slow Perversity
codes 1101 DD(87%), CD(6%), DC(6%) Major D
codes 1110 DD Hard Perversity
codes 1111 DD All-D


基本的には、コードが1で始まる(第1ビットが1の)個体はDD、それ以外の個体をCCと評価します。
前者は、観察コードCCに対してDカードを選択する戦略であり、いわばお人好しを食いモノにする個体群と言えます。Soft Perversityの様に、たとえ他の観察コード全てにCカードを出す個体であってもです
後者は、観察コードCCに対してはCカードで返礼出来る倫理的性質を持つ個体群です

以上の2つの大別されたグループに対して、更に、第2ビットと第3ビットを評価します。第1ビットが1のグループでそれらに0を含む個体は、DD以外に、CD, DCと評価される確率を与え、第1ビットが0のグループでそれらに1を含む個体は、CC以外に、CD, DCと評価される確率を与えます。
第2ビットと第3ビットについては、第3ビットの方が評価結果に少し大きく影響する様にしてありますが、それが無くてもビットを逆にしてもシミュレーション自体には大きな影響は無い様です。この追加的な評価条件にあてはまらない個体には、All-C, SoftTFT, HardPerversity, All-Dがあり、基本的な評価結果であるCC, DDに固定されます

第4ビットは敢えて評価しません。これはDDに対しての戦略を決定するビットで、Cカードを返して食いモノにされるか、Dカードを返すタフさを持つかを分かつ重要なビットです。しかし、これは一概に善し悪しを評価することは出来ません。この淘汰に強く関与するビットは、評価せずに淘汰に任せる事にしました

C言語では以下の通りです
int signToEvaluationForRuleX(int sign)
{
	if(sign & 8) {
		if(!(sign & 6)) {
			if(!(sign & 2)) {
				if(mersenneTwister() < 0.1)
					return (3 - int(3.0 * mersenneTwister()));
			}
			if(mersenneTwister() < 0.1)
				return (3 - int(3.0 * mersenneTwister()));
		}
		return 3;
	} else {
		if(sign & 6) {
			if(sign & 2) {
				if(mersenneTwister() < 0.1)
					return int(3.0 * mersenneTwister());
			}
			if(mersenneTwister() < 0.1)
				return int(3.0 * mersenneTwister());
		}
		return 0;
	}

	return 0;
}
 



Rule-0及びRule-1に於いては、過去の2つのカードに関する記憶を参照しました。各個体が世界に刻印した行動の記録です。これを参照して戦略に準じて対応することは、善くも悪くも、ある意味での返礼と言えます

Rule-Xに於いては、過去の刻印は無視して、相手の本性(戦略)を評価します

Rule-Xに於いても、初期段階では、TFT系とD系の綱引きになります。但し、C系が死滅してしまうなどという事はまずありません。TFT系が非常に強力となるからです。それは、C系に生存余地を与え、D系の繁栄を許しません。
D系を相手にゲームをしたTFT系は、世界に刻印した行動の記録としてDカードを選択しています。しかし、そうしたTFT系同士が出逢ってゲームをすると、Cカードを出し合って、多くの生命力ポイントを獲得します。参照するのは、記録では無く、相手の本性だからです
 



Rule-Xでのシミュレーション画像です。最初の画像は設定直後。その右画像は3分後の初期段階ですが、D系がやや優勢にあります。それ以降の画像では、時間経過と共にTFT系が優勢になっていて、協力カードが蔓延している均衡だと言えます。各個体の数と経過時間はカウンターウィンドウの最下行に表示されています
 
 
 


次の左画像は、Rule-1によりシミュレーションを進め、TFT系とD系がニッチをシェアしている均衡で、D系がやや優勢となっているものです。右画像は、この状態でObservation RuleをRule-Xに変更し、十分な時間をかけてシミュレーションした後の均衡で、TFT系が逆転して優勢になっています。
Rule-1ではDカードが蔓延していますが、Rule-Xに変更した後にはCカードが蔓延しています。
 
 


Rule-Xによりシミュレーションを進め、途中でRule-0に切替えても、Dカードが蔓延することは非常に困難なようです。Cカードが蔓延している世界では、TFT系がそれを許しません。Dカードによる搾取を許さず、Cカード同士に依る獲得ポイントがリソースの綱引きで有利に働くからです。
一度ロックインした均衡が安定する仕組みの一つでしょう
 
 




chapter 6: 役所的記録


観察データは、相手が過去に出した全てのカードのスタッツです。CカードとDカードの比率によって、CC, CD, DC, DDの4種類の観察データとして区分します。
参照:ルールと戦略

観察データの区分とスタッツとしてのカード比率は以下の通りです
observation data .... ratio of C-cards
CC 75% above
DC 67% ~ 74%
CD 50% ~ 66%
DD under 49%

シミュレーションの開始時と新たに生み出された個体のスタッツは、サイン(戦略コード)によって相応と考えられる10回分の記録を与えられます。そうで無ければ、計算上で初回は全ての個体がDDと観察されてしまうからです。これはアドホックな方法です

All-CとAll-Dに関しては単純に観察データは固定されます。All-CはCカード100%なのでCC、All-DはDカード100%なのでDDと観察されます。
その他の個体に関しては事情は複雑です。周辺に存在する個体の観察データ次第によってスタッツは全く異なったモノになり得ます。つまり、環境次第となります
 



初期状態の偶然に大きく左右されます。支配的なカードは、C, Dどちらにもなり得ます。
優勢な戦略コードが明確になるまでは、特に初期状態に於いては、支配的なカードがどちらであるかなども判別するのは困難です
 
 
 



Cカードが蔓延し、TFT系が優勢となる均衡です。左画像は初期段階(10分後)のもので、TFT系がD系に比してやや優勢になっています
 
 


Dカードが蔓延し、D系が優勢となる均衡です。左画像は初期段階(10分後)のもので、D系がTFT系に比してやや優勢になっています
 
 


 




chapter 7: 直 観


観察データは、相手が過去に出した全てのカードの振舞いとしての倫理的評価のスタッツです。倫理的振舞いと非倫理的振舞いの比率によって、CC, CD, DC, DDの4種類の観察データとして区分します。
参照:ルールと戦略

先ず、倫理的評価の方法を記します

評価の基準は意図と影響を想定します。
Cカードを出す場合に、シンプルに善意としての協力と看做せる場合と、悪意を助長させる結果(影響)を齎す場合や、同族ないし特定の個体との共生関係(意図)を創り出す場合などが考えられます。
Dカードを出す場合にも、シンプルに悪意としての裏切と看做せる場合と、悪意への対抗乃至返礼(意図)である場合が考えられます
例えば、All-Dに対してCカードを出す事は、悪意を助長させる影響があり、非倫理的振舞いとしてカウントします。逆に、All-Dに対してDカードを出す事は、悪意への対抗乃至返礼の意図と看做し、倫理的振舞いとしてカウントします。
但し、All-Dがいつも出すDカードは全て悪意に基づくものと看做し、相手に依らず全て非倫理的振舞いとカウントします。同様に、All-Cがいつも出すCカードは全て善意に基づくものと看做し、相手に依らず全て倫理的振舞いとしてカウントします。
その他の個体については、オルタナティブな戦略を意図として評価し、選択したカードとその影響に従って倫理的であるか非倫理的であるかを評価します


C言語風に記すと以下の通りです

	// four bits intenger, 0x0 ~ 0xf
	ownSign = 自らのサイン(戦略コード);
	oppSign = 相手のサイン(戦略コード);
	
	// 0 : C-card, 1 : D-card
	ownCard = 自らのカード;
	oppCard = 相手のカード;
	
	if(ownSign & 8) {
		// ownSign : D-Sys, Perversity-Sys, ModerationFavor
		if(ownCard)
			++(自らの非倫理的カウント);
		else
			++(自らの倫理的カウント);
		if((oppSign & 1) && !(oppSign & 2)) {
			// oppSign : SoftTFT, HardTFT
			if(oppCard)
				++(相手の倫理的カウント);
			else
				++(相手の非倫理的カウント);
		} else {
			if(oppCard)
				++(相手の非倫理的カウント);
			else
				++(相手の倫理的カウント);
		}
	} else if((oppSign & 1) && !(oppSign & 2)) {
		// ownSign : SoftTFT, TFT
		if(oppSign & 8) {
			if(ownCard)
				++(自らの倫理的カウント);
			else
				++(自らの非倫理的カウント);
		} else {
			if(ownCard)
				++(自らの非倫理的カウント);
			else
				++(自らの倫理的カウント);
		}
		if(oppCard)
			++(相手の非倫理的カウント);
		else
			++(相手の倫理的カウント);
	} else {
		// ownSign : AllC, MajorC, ExtreameFavor
		if(ownCard)
			++(自らの非倫理的カウント);
		else
			++(自らの倫理的カウント);
		if(oppCard)
			++(相手の非倫理的カウント);
		else
			++(相手の倫理的カウント);
	}
		

以下は、Rule-Yと仕組みと幾分似たものになります。
観察データの区分とスタッツとしての倫理的振舞いと非倫理的振舞いの比率は以下の通りです
observation data .... ratio of ethical behaviors
CC 75% above
DC 67% ~ 74%
CD 50% ~ 66%
DD under 49%

ゲームの開始時と新たに生み出された個体のスタッツは、サイン(戦略コード)によって相応と考えられる10回分の記録を与えられます。そうで無ければ、計算上で初回は全ての個体がDDと観察されてしまうからです。これはアドホックな方法です

All-CとAll-Dに関しては単純に観察データは固定されます。All-Cは倫理的振舞いが100%なのでCC、All-Dは非倫理的振舞いが100%なのでDDと観察されます。
その他の個体に関しては事情は複雑です。周辺に存在する個体の観察データ次第によってカードは異なったモノになり得ますが、双方の戦略コード(サイン)によってその評価は異なります。傾向として、本性としての善意と悪意のポテンシャルに見合った倫理的なスタッツを記録する契機(momentum)が強くなります。これは、Rule-Yと大きく異なる点です
 



初期状態の偶然に左右されます。支配的なカードは、C, Dどちらにもなり得ます。
確度としては、倫理的な振舞いの契機が強い個体群(TFT, SoftTFT)が優勢になり、Cカードが支配的になる事が多くなります。
優勢な戦略コードが明確になるまでは、特に初期状態に於いては、支配的な振舞いを判別するのは困難です
 



倫理的振舞いが蔓延し、TFT系が優勢となる均衡です。左画像は初期段階(3分後)のもので、TFT系がD系に比してやや優勢になっています
 
 
 


 




chapter 8: 詳細設定

メニューの"Adavanced Settings"で、以下に示す諸設定を変更出来ます。これらは、シミュレーションの整合性に影響するモノですので、無闇にいい加減な数値を設定すると意味の無いシミュレーションになるばかりかソフトウエア自体のハングアップを招く事もあります

例えば、プリファレンスで設定する"world resource"のLevelはデフォルト値24で、これはニッチ1つ当りのリソースです。
もしも"dead line vital"を異常に小さい数値に設定すると、ニッチに収まり切れない量の個体が生み出される可能性があります。
また逆に、異常に大きな数値をデッドラインとして設定すると、全ての個体が死滅してしまう可能性があります

他にも、個々のゲームの利得をほとんど無効化してしまい兼ねない影響を齎すパラメータなど、パラメータの多くがドラスティックな影響を持っています。変更する場合は、仕組みを理解した上で、ひとつづつ試してみるのが良いでしょう

"reset to initial"ボタンで全てのパラメータを初期設定に戻す事が出来ます。デフォルト値として保存する場合は、更に、"save as default"にチェックを入れて"Okay"ボタンを押します
 




percentage of initial individuals to niche number.
ニッチの数に対する初期個体数の比率です。
デフォルトでは10%になっています。これは比較的に初期段階での偶然に左右され易い比率なので、もう少し大きくした方が良いかも知れません。初期段階での個体数が多いほど、特定の個体が他に比べて、偶然によって、増加する確率が低くなります
 



always deal with opponents untill individuals number increase the percentage to niche.
ニッチに対する個体数がこの比率に達するまでは、補助的ルールの如何にかかわらず、全ての個体がどのような相手ともゲーム乃至交差生殖をします。
デフォルトでは15%です。補助的ルールによって関る組み合わせを制限しながら、この比率が低過ぎると、特に初期個体数の比率が低いと、初期段階で全ての個体が死滅してしまう可能性があります。逆に、この比率が高過ぎると、少なくとも初期段階では、補助的ルールの設定は無意味なものになります
 



一回の振舞いで消費する生命力の最大値です。実際に消費する平均値はこの値の半分になります。
ゲームや交差生殖,移動だけでなく、結果として何も出来なくても消費します。この数値を小さくすると、周りに相手が見つけられずに移動を繰り返している個体や何も出来ないでいる個体が短命ではなくなります。少数の個体群に空いたニッチを開発させる可能性を与えるには良い方法でしょう。逆に、この数値を大きくすると、何も出来ないでいる個体はより短命になりますし、ゲームポイントを多く獲得出来ない個体も早々に死滅するばかりか、全ての個体が死滅する可能性もあります
 



交差生殖に必要な生命力です。双方が共に条件を満たした場合にのみ子孫を作る事が出来ます。両親となる個体は、新しく誕生する個体に与える生命力の半分を、自らの生命力から附与します。当然、その半分の値を越えていなければなりません。
この数値を小さくすると、ゲームよりも交差生殖をするケースが増え、各個体の生命力が低水準になります。子孫を作るケースは増えますが死滅する個体も増えます。逆に、この数値を大きくすると、ゲームで多くの生命力を得る事が出来る個体群が子孫を残せるという傾向が強くなります
 



新しく誕生する個体が持つ生命力です。両親から附与されます。交差生殖に必要な生命力の倍未満の値でなければなりません
 



新しく誕生する個体が持つ経験値です。両親の影響とでも考えて下さい。デフォルトの5回というのはRule-YとRule-Zに限っての事ですが、この経験値が無いと観察されるデータが無くなります。
デフォルトより小さい値でも良いのかも知れません。その方が実際の経験を観察データに反映し出すのが早くなります。逆に、大きな値を設定すると、その生まれ持ったデータ(観察されるデータ)から脱却するのが困難になります
 



死に至る生命力です。
デフォルトは24です。これはプリファレンスで設定可能なワールドリソースのレベルのデフォルト値と等しくしてあります。小さ過ぎる値はニッチに対して過剰な個体数を残存させる可能性があり、大き過ぎる数値は全ての固体を死滅させる可能性があります
 



隣にいるかも知れない相手を探す回数です。指定された回数だけ隣接したニッチをランダムに探します。
ゲームや交差生殖の相手を探す場合の振舞いです
 



隣に空いているかも知れないニッチを探す回数です。指定された回数だけ隣接したニッチをランダムに探します。
相手が見つからず、移動しようとする場合の振舞いです
 



初期段階に於いて、ゲームをするだけで追加して与えられるボーナスポイントの最大値です。
この場合の初期段階とは、未だ個体数が十分に増えていなくて、世界リソースが多く有り余っている状態です。実際に与えられるボーナスポイントの平均は、この最大値の半分になります。
小さ過ぎる値は、初期段階で個体数を増やすのが遅延します。ゲームポイントで有利な個体が勢力を拡大し易くなるかも知れませんが、初期段階のうちに全ての個体が死滅する可能性もあります。逆に、大き過ぎる値は、初期段階で個体数を爆発的に増やします。しかし、ゲームポイントでの有利不利はあまり意味の無いものになり、少しの偶然から優勢な個体が決まってしまう可能性が高くなります
 



初期段階を過ぎて(in a middle)、ゲームをするだけで追加して与えられる(ボーナス)ポイントの最大値です。実際は、世界リソースとのバランスを調整する為の追加ポイントです。
世界リソースがもはや多くは余っていない状態です。世界リソースはマイナスにならないように調整されています。ある水準を下回ると、この(ボーナス)ポイントはマイナスにもなり得ます。その絶対値の最大値がこの値になり、絶対値の平均はこの最大値の半分になります。
大きな値を設定すると、ゲームポイントは無意味なものになり、偶然が支配し易くなります。もちろん、(ボーナス)ポイントはランダムなゆらぎがあるだけなので、長いサイクルを経て、ゲームポイントで有利な個体群が優勢になる傾向はあります
 




chapter 9: 捕食関係(オマケ)


観察データは、相手の戦略コードの評価結果になります。この点ではRule-Xと同じですが、その評価方法は異なります。
これは意図的に作ったモノで、社会的意味はあまり無いでしょう。個体間に強弱を創り出しそれが捕食と被捕食の関係になり、更に、ジャンケンの様に強弱を相対化させる事で、優勢な個体がローテーションします。
その様な社会的関係はあるでしょうか?

先に、各サイン(戦略コード)に対する評価結果を表に示します。この評価結果が観察結果として扱われます
参照:ルールと戦略

サインと評価

estimation name
codes 0000 CC All-C
codes 0001 CC Soft TFT
codes 0010 CD(50%), DC(50%) Major C
codes 0011 CD(50%), DC(50%) Slow TFT
codes 0100 CD(50%), DC(50%) Major C
codes 0101 CD(50%), DC(50%) TFT
codes 0110 CD(50%), DC(50%) Extream Favor
codes 0111 CD(50%), DC(50%) Hard TFT
codes 1000 DD(30%), CD(35%), DC(35%) Soft Perversity
codes 1001 DD(30%), CD(35%), DC(35%) Moderation Favor
codes 1010 DD(30%), CD(35%), DC(35%) Perversity
codes 1011 DD(30%), CD(35%), DC(35%) Major D
codes 1100 DD(30%), CD(35%), DC(35%) Slow Perversity
codes 1101 DD(30%), CD(35%), DC(35%) Major D
codes 1110 DD Hard Perversity
codes 1111 DD All-D


コードが1で始まる個体(第1ビットが1,1xxx)とそれ以外の個体(0xxx)を区分して評価します。
以上の2つの大別されたグループに対して、第2ビットと第3ビットを評価します。第1ビットが1のグループでそれらに0を含む個体は(100x, 101x, 110x)、DD以外に、CD, DCと評価される確率を与え、第1ビットが0のグループでそれらに1を含む個体は(001x, 010x, 011x)、CD, DCのいずれかに評価します
Rule-Xと区分の方法は少し似ていますが、評価結果として最終的に区分する確率は全く異なります

C言語では以下の通りです
int signToEvaluationForPredation(int sign)	// for Rule-XA
{
	if(sign & 8) {
		if(!(sign & 6)) {	// SoftPerversity, SlowPerversity, Perversity, MajorD, ModerationFavor
			if(mersenneTwister() < 0.7)
				return (2 - int(2.0 * mersenneTwister()));
		}
		return 3;		// HardPerversity, All-D
	} else {
		if(sign & 6)	// MajorC, SlowTFT, TFT, ExtreameFavor, HardTFT
			return (2 - int(2.0 * mersenneTwister()));
		return 0;		// All-C, SoftTFT
	}

	return 0;
}
 



初期段階は偶然に左右されますが、やがてTFT系(SoftTFT, TFT, SlowTFT, HardTFT)が優勢になっていきます。
TFT系が優勢な状態からは、SoftTFTが特に優勢になっていきます。SoftTFTが突出して優勢になると、ModerationFavorが突如猛威を揮いSoftTFTに代わって優勢になります。そして、またTFT系がModerationFavorを駆逐し、TFT, SlowTFT, HardTFTが優勢に転じます。
以上のサイクルが繰り返されます

このサイクルに一役かっているのがミューテーションです。この確率はゼロにしないでください。ゼロにすると、何回かのローテーションを経て、やがてはSoftTFTが100%になりロックインされてしまうでしょう。
特定の個体が優勢になるのは、その捕食者となる個体がほとんどいないか全くいない状態が前提になっています。
例えば、SoftTFTが蔓延するのは、ModerationFavorがほとんどいない状態です。SoftTFTが蔓延している状態からは、僅かに残存していたかミューテーションにより誕生したModerationFavorが、SoftTFTを捕食し瞬く間に優勢となります

稀に、ニッチの総数が少ない場合などに、ModerationFavorが100%になり、ロックインされてしまう事があります。これは、ModerationFavorの捕食者であるTFT系がModerationFavorからのミューテーションでは誕生し難いからです。
ニッチの総数がある程度あれば、例えば64 x 24、ロックインされてしまう事はほぼ無いでしょう

ニッチの総数が余りにも多いと、例えば128 x 48、幾つかのエリアで個別に優勢な個体がローテーションし、全体としては何が優性なのかわからないかも知れません。捕食被捕食に依る乱戦状態が延々と続きます
 



初期段階は偶然次第で、このサンプルでは、HardTFTが少しばかり抜け出ています。TFT系優勢な状態を経て、SoftTFTが優勢になります
 
 


ModerationFavorが現われると、SoftTFTを捕食します。このサンプルでは、他のTFT系がそこそこ残っていたので、ModerationFavorはTFTに捕食され始めてもいます。そして、TFT系が優勢な状態では、先ず最初に、HardTFTが優勢になっていきます
 
 


次いで、SoftTFTが突出して優勢になります。そして、ModerationFavorがSoftTFTを捕食します
 
 


そして、HardTFT。そして、SoftTFT
 
 


ModerationFavor。このサンプルでは、次いで、SlowTFT
 
 


HardTFT。SoftTFT
 
 


ModerationFavor。そしてまた、SlowTFT
 
 


HardTFTとSoftTFT。そして、SoftTFT
 
 


ModerationFavor。今回は、次いで、TFT。でも、既に、HardTFTが増え始めている
 
 




御感想でもありましたら
 


e_mail to webmaster