quantecon.game_theory を使ってみる

まず quantecon.game_theory を読み込む:


In [1]:
import quantecon.game_theory as gt

support_enumeration

2人 (非退化) ゲームのナッシュ均衡をすべて列挙する.

授業での例

$ \begin{bmatrix} 3, 3 & 3, 2 \\ 2, 2 & 5, 6 \\ 0, 3 & 6, 1 \end{bmatrix} $

NormalFormGame を作る:


In [2]:
g = gt.NormalFormGame(
    [[(3, 3), (3, 2)],
     [(2, 2), (5, 6)],
     [(0, 3), (6, 1)]]
)

利得表を表示してみる:


In [3]:
print(g)


2-player NormalFormGame with payoff profile array:
[[[3, 3],  [3, 2]],
 [[2, 2],  [5, 6]],
 [[0, 3],  [6, 1]]]

support_enumeration でナッシュ均衡を列挙する:


In [4]:
gt.support_enumeration(g)


Out[4]:
[(array([1., 0., 0.]), array([1., 0.])),
 (array([0.8, 0.2, 0. ]), array([0.66666667, 0.33333333])),
 (array([0.        , 0.33333333, 0.66666667]),
  array([0.33333333, 0.66666667]))]

結果を NEs という変数に格納してみる:


In [5]:
NEs = gt.support_enumeration(g)

NEs の要素の数 = ナッシュ均衡の数


In [6]:
len(NEs)


Out[6]:
3

1つ目のナッシュ均衡:


In [7]:
NEs[0]


Out[7]:
(array([1., 0., 0.]), array([1., 0.]))

2つ目のナッシュ均衡:


In [8]:
NEs[1]


Out[8]:
(array([0.8, 0.2, 0. ]), array([0.66666667, 0.33333333]))

3つ目のナッシュ均衡:


In [9]:
NEs[2]


Out[9]:
(array([0.        , 0.33333333, 0.66666667]), array([0.33333333, 0.66666667]))

それぞれ確かにナッシュ均衡になっている:


In [10]:
for NE in NEs:
    print(g.is_nash(NE))


True
True
True

グレーヴァ『非協力ゲーム理論』第3章練習問題3.3を解かせてみる.

(a)


In [11]:
g_a = gt.NormalFormGame(
    [[(0, 1), (3, 3)],
     [(5, 2), (0, 0)],
     [(1, 8), (1, 7)]]
)

In [12]:
gt.support_enumeration(g_a)


Out[12]:
[(array([1., 0., 0.]), array([0., 1.])),
 (array([0., 1., 0.]), array([1., 0.])),
 (array([0.5, 0.5, 0. ]), array([0.375, 0.625]))]

1番目のプレイヤー (Python では0始まりなので,プレイヤー0) の3番目の戦略 (戦略2) は被支配戦略になっている:


In [13]:
g_a.players[0].is_dominated(2)


Out[13]:
True

(b)


In [14]:
g_b = gt.NormalFormGame(
    [[(0, 1), (3, 3)],
     [(5, 2), (0, 0)],
     [(2, 8), (2, 7)]]
)

In [15]:
gt.support_enumeration(g_b)


Out[15]:
[(array([1., 0., 0.]), array([0., 1.])),
 (array([0., 1., 0.]), array([1., 0.])),
 (array([0.33333333, 0.        , 0.66666667]),
  array([0.33333333, 0.66666667]))]

(c)


In [16]:
g_c = gt.NormalFormGame(
    [[(0, 3), (3, 2)],
     [(5, 0), (0, 4)],
     [(1, 1), (1, 1)]]
)

In [17]:
gt.support_enumeration(g_c)


Out[17]:
[(array([0.8, 0.2, 0. ]), array([0.375, 0.625]))]

他の関数を使ってみる

vertex_enumeration

2人 (非退化) ゲームのナッシュ均衡をすべて列挙する. support_enumeration とは異なるアルゴリズム (多面体の頂点列挙アルゴリズム) が使われている.


In [18]:
gt.vertex_enumeration(g_a)


Out[18]:
[(array([1., 0., 0.]), array([0., 1.])),
 (array([0., 1., 0.]), array([1., 0.])),
 (array([0.5, 0.5, 0. ]), array([0.375, 0.625]))]

In [19]:
gt.vertex_enumeration(g_b)


Out[19]:
[(array([1., 0., 0.]), array([0., 1.])),
 (array([0.33333333, 0.        , 0.66666667]),
  array([0.33333333, 0.66666667])),
 (array([0., 1., 0.]), array([1., 0.]))]

In [20]:
gt.vertex_enumeration(g_c)


Out[20]:
[(array([0.8, 0.2, 0. ]), array([0.375, 0.625]))]

lemke_howson

2人ゲームのナッシュ均衡を1つ求める. 数100戦略程度のゲームにも使える.


In [21]:
gt.lemke_howson(g_c)


Out[21]:
(array([0.8, 0.2, 0. ]), array([0.375, 0.625]))

戦略数200の2人ゲームをランダムに発生させる:


In [22]:
g_200 = gt.random_game((200, 200))

In [23]:
g_200


Out[23]:
<200x200 2-player NormalFormGame of dtype float64>

In [24]:
gt.lemke_howson(g_200)


Out[24]:
(array([0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.19093132, 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.02558687, 0.07383312, 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.0045642 , 0.02360499, 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.58128166, 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.03739411,
        0.02554917, 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.03725456, 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ]),
 array([0.        , 0.        , 0.        , 0.        , 0.01519323,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.20865023, 0.        ,
        0.        , 0.        , 0.        , 0.31850566, 0.21470394,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.13335555, 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.02678899, 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.01197588, 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.06135257, 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.00947395,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.        ]))

In [ ]: