DCS Laboratory 2
繰り返し囚人のジレンマゲーム


リーグ戦の手順

ラボ2を開始するにあたっての注意

ラボ2を開始する前に,講義ノートにある 進化ゲーム(pdf形式)に目を通すこと.

ゲームの概要

囚人のジレンマゲームは以下の利得行列で規定される二人非協力非ゼロ和 ゲームである.

  |  C  |  D  |
--+-----+-----+
  |   3 |   5 |
C |     |     |
  | 3   | 0   |
--+-----+-----+
  |   0 |   1 |
D |     |     |
  | 5   | 1   |
--+-----+-----+  

上記の利得行列における戦略Cは協調(Cooperate)を,そしてDは裏切り (Deception)を意味している.「協調」と「裏切り」の意味は下記の説明を参 照のこと.ラボ2では,このゲームを繰り返し行い可能な限り高い総利得をあ げるプレイヤーのプログラムを作成することを目的とする.

まず,囚人のジレンマゲームの背景について説明する. 囚人のジレンマゲームは,1950年頃 Merrill Flood と Melvin Dresher によって発案され,後に A.W. Tuckerによって定式 化された二人プレーヤによるゲームである. このゲームが囚人のジレンマと呼ばれるゆえんは, それが以下に述べる様な状況をもとにして説明された事情による.

その状況とは,仮にあなたがもう一人の共犯者と何らかの犯罪を犯して,逮捕され, 拘置されているとする.裁判を前にして二人は別々の独房に入れられている (二人の間に通信はないとする).そこであなたのところへ検事がやってきて, ある取り引きを持ち掛ける.検事が言うには,その取り引きは共犯者にも持ち かけられているという(これは二人の犯罪者に共通の状況とする).取り引きに 関して検事が言った内容はおおよそ以下のようなことである.

「状況証拠からして,あなたが無実を主張しても,検事側はあなた達の有罪を 証明して2年の刑にする自信がある. しかしあなたが罪を認めて,あなたの共犯容疑者の 罪状をあばく証言をしてくれれば,検事側はあなたを無罪放免にする.その場 合,共犯容疑者には5年の刑を求刑する.ただし両方とも自白した場合は4年 の禁固刑はかたいだろう.」

この状況で,各プレーヤは協調(無実を主張すること),もしくは裏切り(罪を 認めること)という2つの選択肢をとることができる.互いに,相手が次にと る行動を知らないままに,自分の次の行動を選ばなくてはならない. 両者が協調した場合の利得は双方にR,両者とも裏切った場合は双 方にP,一方が協調し他方が裏切った場合は,協調した方にS,裏切った方 にTの利得を与える.ここで各利得 T, R, P,S は T > R > P > S お よびR > (T + S)/2 を満足するようにとる.最初に与えた利得行列は T = 5, R = 3, P = 1, S = 0 という具体的なケースで,これは囚人のジレン マゲームの一例である.

今回のラボでは,囚人のジレンマゲームをプレーするプレーヤプログラムを作 成し,二人のプレーヤで囚人のジレンマゲームを繰り返し行い,総利得を競う. ゲームの繰り返し回数Nは不明である.
( 注意: 現在のプログラムでは繰り返し回数がデフォルト で200回になっているが,講義での実験時は回数を変更する(何回になるかはわ からないものとする)).

   また,今回の対戦では乱数によるエラーを導入し,各プレイヤが選択した戦略 がある確率で反転してしまうこととする.エラー率は数%程度とし,それは以下 で説明するゲーム管理プログラム(master.c)の中で扱われる.
( 注意: 現在のプログラムではエラー率が2,3%に設定され ているが,講義での実験時は変更になる可能性がある). 各プレイヤプログラムはエラーの発生を制御することはできない.  このエラーがあることにより,ある回の対戦でプレイヤーが協調を選んだとし ても,その意図に反して,実際には裏切りという戦略に転換されてしまうこと がある.その逆もありうる.また,このエラーは,双方のプレイヤにある確率 でランダムに生じる.

さて,このゲームを繰り返し行なう場合,それぞれどのような行動選択の戦略 を取るべきか?どうしたらエラーからリカバーし泥仕合になることを避けられ るか?相手の戦略決定メカニズムを推定するか学習することで優位な立場をと れるか?


諸注意

  1. 進化ゲーム(pdf形式)を読むと,TIT FOR TATというプログラ ムが紹介されているが,今回のラボではこのプログラムは禁止とする(TIT FOR TATをプログラムとして作成して提出しても成績はつかない).また,常 に裏切るとか常に協調する傾向にあるプログラム,また,講義で紹介した収益 最大可原理や,時おり相手を裏切りような卑劣な戦略も禁止とする.つまり, オリジナルな戦略を考えること.

    TIT-FOR-TATに関しては実際に, 今回の対戦ではエラーが導入されているので,TIT FOR TATは必ずしも有効なプ ログラムとは言えない.また,乱数を使ってランダムに戦略を選ぶ,常に協調する, 常に裏切るなどの単純なプログラムも禁止とする.エラーからのリカバリや相 手の過去の戦略から戦略決定メカニズムを推定するなどの工夫が必要である.

  2. 12月20日は対面講義で,すべてのプログラムでリーグ戦を行う.リーグ戦の詳細は以下を参照のこと.

  3. リーグ戦上位のプログラムに関しては,プログラム作成上のアイデアに関して簡単な発表をしてもらう予定. 

  4. 提出物はプログラム(ソースコード),レポートである.これらの詳細は以下を参照のこと.

  5. プログラム全体は,以下の規定にあるようにいくつかの関数に分割してプログラミングする.

  6. ラボ2では,対戦の都合上,複数の関数をそれぞれ指定されたファイル にいれて,コンパイル・リンクする.どの関数をどの名前のファイルにいれ るかの指定,そして複数のソースコードをコンパイルする方法は以下を参照 すること.作成したすべてのソースコードはginga01.fun.ac.jpマシン上の "/export/home/Fun/DCS/2023/lab/2/<学籍番号>/" ディレクトリの下にコピーしておくこと.ソースコードのアクセス許可モードは644 (-rw-r--r--)とする.


提出物

以下のものを提出すること.

期限

プログラムとレポートは12月18日(月)の午後23時を提出期限 とする.この時間までに指定されたディレクトリにプログラムをコピーしてお くこと.さらにHOPEにレポートを提出すること. それ以降は指定されたディレクトリは書き込み不可能となり,HOPEへのレポー ト提出はできなくなる..

提出の遅延は認められない.

 

ラボ2詳細 -プレイヤプログラムの作成-

ラボ課題2は,繰り返しゲームを管理するプログラム(master.c),は提供 されるもの(ginga01.fun.ac.jp上の/export/home/Fun/DCS/2023/resource/2/master.c)を用い,   (1)戦略を決定するプレイヤプログラム を二つ (player1.c と player2.c)作る.player1.c と player2.cは,トップレベルの 呼び出し関数がそれぞれ Player1(),Player2() となっている違いがあるだ けで,プログラム本体は同一でもよいし,本体が違っていてもよい(種類の異 なる二つのプレイヤプログラムを作ってもよい).このように二つのプログラ ム(ファイル)を作成するのは,リーグ戦の対戦の都合(一方がPlayer1関数,他 方がPlayer2関数で戦うため)である.

...Return