まず Games.jl
を読み込む:
In [1]:
using Games
授業での例
$ \begin{bmatrix} 3, 3 & 3, 2 \\ 2, 2 & 5, 6 \\ 0, 3 & 6, 1 \end{bmatrix} $
Julia では3次元以上の配列を作りにくいので,各プレイヤーごとに Player
を作ることにする:
プレイヤー1:
In [2]:
p1 = Player(
[3 3
2 5
0 6]
)
Out[2]:
プレイヤー2:
自分の戦略が行,相手の戦略が列
In [3]:
p2 = Player(
[3 2 3
2 6 1]
)
Out[3]:
組み合わせて NormalFormGame
を作る:
In [4]:
g = NormalFormGame(p1, p2)
Out[4]:
support_enumeration
でナッシュ均衡を列挙する:
In [5]:
support_enumeration(g)
Out[5]:
結果を NEs
という変数に格納してみる:
In [6]:
NEs = support_enumeration(g);
NEs
の要素の数 = ナッシュ均衡の数
In [7]:
length(NEs)
Out[7]:
1つ目のナッシュ均衡:
In [8]:
NEs[1]
Out[8]:
2つ目のナッシュ均衡:
In [9]:
NEs[2]
Out[9]:
3つ目のナッシュ均衡:
In [10]:
NEs[3]
Out[10]:
それぞれ確かにナッシュ均衡になっている:
In [11]:
for NE in NEs
println(is_nash(g, NE))
end
グレーヴァ『非協力ゲーム理論』第3章練習問題3.3を解かせてみる.
(a)
In [12]:
p1 = Player(
[0 3
5 0
1 1]
);
In [13]:
p2 = Player(
[1 2 8
3 0 7]
);
In [14]:
g_a = NormalFormGame(p1, p2)
Out[14]:
In [15]:
support_enumeration(g_a)
Out[15]:
プレイヤー1の戦略3は被支配戦略になっている:
In [16]:
is_dominated(g_a.players[1], 3)
Out[16]:
利得が有理数ならば,厳密計算で実行される:
有理数利得のゲームに変換する:
In [17]:
g_a_rational = NormalFormGame(Rational{Int}, g_a)
Out[17]:
In [18]:
support_enumeration(g_a_rational)
Out[18]:
(b)
最初から有理数で入力してもよい:
In [19]:
p1 = Player(
[0//1 3
5 0
2 2]
) # 一カ所有理数にすればよい
Out[19]:
In [20]:
p2 = Player(
[1//1 2 8
3 0 7]
) # 一カ所有理数にすればよい
Out[20]:
In [21]:
g_b_rational = NormalFormGame(p1, p2)
Out[21]:
In [22]:
support_enumeration(g_b_rational)
Out[22]:
In [ ]: