ゲーム理論入門/(9)The Bargaining Problem(1950)-Examples

今日は昨日の論文のレジュメの続きで、論文の数値例とグラフの部分を実際にExcelで再現してみた。

The Bargaining Problem(1950)-Examples

EXAMPLES

論文の数値例をExcelの"BargainingProblem"というシートのA1-C10のエリアに以下のように入力し、

Item Utility to Bill Utility to Jack
Book     2     4
whip     2     2
ball     2     1
bat     2     2
box     4     1
pen     -10     -1
toy     -4     -1
knife     -6     -2
hat     -2     -2

後掲のExcelマクロを実行すると、2^9-1=511通りの交換パターンについて、

  • J列にBillの効用
  • K列にJackの効用
  • L列に実際の交換Item
  • M列に2人の効用の積

が入る。

以下は、実行結果をM列の降順にソートした最初の23行(=Utility積が40以上のパターン)。

Bill's Utility Gain Jack's Utility Gain Item exchanged Utility Multiplication
12 5 book,whip,ball,bat,-pen,-toy,-knife 60
14 4 book,whip,bat,-pen,-toy,-knife 56
10 5 book,whip,bat,-pen,-knife 50
10 5 book,whip,bat,box,-pen,-toy,-knife 50
8 6 book,whip,bat,-pen,-toy 48
8 6 book,whip,ball,bat,-pen,-knife 48
8 6 book,whip,ball,bat,box,-pen,-toy,-knife 48
6 7 book,whip,ball,bat,-pen,-toy 42
14 3 book,whip,ball,-pen,-toy,-knife 42
14 3 book,ball,bat,-pen,-toy,-knife 42
14 3 book,whip,ball,bat,-pen,-toy,-knife,-hat 42
10 4 book,whip,-pen,-toy 40
8 5 book,whip,ball,-pen,-toy 40
10 4 book,bat,-pen,-toy 40
8 5 book,ball,bat,-pen,-toy 40
10 4 book,whip,ball,-pen,-knife 40
10 4 book,ball,bat,-pen,-knife 40
10 4 book,whip,ball,box,-pen,-toy,-knife 40
10 4 book,ball,bat,box,-pen,-toy,-knife 40
10 4 book,whip,bat,-pen,-toy,-hat 40
8 5 book,whip,ball,bat,-pen,-toy,-hat 40
10 4 book,whip,ball,bat,-pen,-knife,-hat 40
10 4 book,whip,ball,bat,box,-pen,-toy,-knife,-hat 40

(マイナス付きの交換ItemはJackからBill、それ以外はBillからJackへの贈与を示す)

→ J-K列を散布図として描画すれば、論文の図2を再現できる。



Sub nash()
  cnt = 0
  Dim bill(1000), jack(1000), item(1000)
  Sheets("BargainingProblem").Activate
  cnt = 0
  Cells(1, 2).Select
  Set tbl = ActiveCell.CurrentRegion
  ' 品物の数
  itemcnt = tbl.Rows.Count - 1
  ' 品物のやり取りの組み合わせ数 は 2^品物数−1
  '(まったくやり取りなしのケースを除く)
  For j = 1 To (2 ^ itemcnt - 1)
      cnt = cnt + 1
      bill(cnt) = 0
      jack(cnt) = 0
      item(cnt) = ""
      For i = 1 To itemcnt
        '2進数で表現した場合にビットが立つ品物はやり取りする
        '品物がBillからJackへ = Billの効用減、Jackの効用増
        If (cnt Mod (2 ^ i)) >= (2 ^ (i - 1)) Then
          bill(cnt) = bill(cnt) - Cells(i + 1, 2).Value
          jack(cnt) = jack(cnt) + Cells(i + 1, 3).Value
          If Cells(i + 1, 2).Value < 0 Then work = "-" Else work = ""
          item(cnt) = item(cnt) + "," + work + Cells(i + 1, 1).Value
        End If
      Next
  Next
  Cells(1, 10).Value = "Bill's Utility Gain"
  Cells(1, 11).Value = "Jack's Utility Gain"
  Cells(1, 12).Value = "Item exchanged"
  Cells(1, 13).Value = "Utility Multiplication"
  For i = 1 To cnt
    Cells(i + 1, 10).Value = bill(i)
    Cells(i + 1, 11).Value = jack(i)
    Cells(i + 1, 12).Value = Right(item(i), Len(item(i)) - 1)
    Cells(i + 1, 13).FormulaR1C1 = "=rc[-3]*rc[-2]"
  Next
End Sub