はじめに
前回の記事を投稿後、Ruby版networkxに携わることがあったので、更にやってみた。
じゃんけん
require_relative 'lib/networkX'
h = {
1 => [2],
2 => [3],
3 => [1]
}
g = NetworkX::DiGraph.new
h.each do |k, v|
v.each do |ve|
g.add_edge(ve - 1, k - 1)
end
end
puts NetworkX.pagerank(g)
# output
0.3333333
0.3333333
0.3333333
じゃんけんは三つ巴ですので、同じ得点になります。
トランプ
h = {
1 => [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
2 => [1],
3 => [2],
4 => [2, 3],
5 => [2, 3, 4],
6 => [2, 3, 4, 5],
7 => [2, 3, 4, 5, 6],
8 => [2, 3, 4, 5, 6, 7],
9 => [2, 3, 4, 5, 6, 7, 8],
10 => [2, 3, 4, 5, 6, 7, 8, 9],
11 => [2, 3, 4, 5, 6, 7, 8, 9, 10],
12 => [2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
13 => [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
}
要素h
のみ表示しております。
index | 絵柄 | 得点 |
---|---|---|
1 | A | 0.2160026 |
2 | 2 | 0.0769230 |
3 | 3 | 0.0222672 |
4 | 4 | 0.0389576 |
5 | 5 | 0.0408504 |
6 | 6 | 0.0445303 |
7 | 7 | 0.0488713 |
8 | 8 | 0.0542792 |
9 | 9 | 0.0612033 |
10 | 10 | 0.0704314 |
11 | J | 0.0834375 |
12 | Q | 0.1033930 |
13 | K | 0.1388527 |
トランプのルールとして、数の大きい方が勝ちとしますが、A
のみ2
を除くすべての数に勝ちます。
すると、A
の得点が一番大きいのですが、2
の得点が10
より大きく算出されています。
軍人将棋
h = {
1 => [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15],
2 => [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
3 => [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
4 => [5, 6, 7, 8, 9, 12, 13, 14, 15],
5 => [6, 7, 8, 9, 12, 13, 14, 15],
6 => [7, 8, 9, 12, 13, 14, 15],
7 => [8, 9, 12, 13, 14, 15],
8 => [9, 12, 13, 14, 15],
9 => [12, 13, 14, 15],
10 => [4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15],
11 => [4, 5, 6, 7, 8, 9, 12, 14, 15],
12 => [13, 14, 15],
13 => [11, 14, 15],
14 => [1, 15],
15 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14]
}
index | 絵柄 | 得点 |
---|---|---|
1 | 大将 | 0.1585483 |
2 | 中将 | 0.1036655 |
3 | 少将 | 0.0807769 |
4 | 大佐 | 0.0485714 |
5 | 中佐 | 0.0433120 |
6 | 少佐 | 0.0391522 |
7 | 大尉 | 0.0357737 |
8 | 中尉 | 0.0329713 |
9 | 少尉 | 0.0306064 |
10 | 飛行機 | 0.0629422 |
11 | 戦車 | 0.0528652 |
12 | 騎兵 | 0.0285820 |
13 | 工兵 | 0.0334844 |
14 | スパイ | 0.0575546 |
15 | 地雷 | 0.1911934 |
軍人将棋に馴染みのない方もいらっしゃると思いますが、引き分けを双方向のエッジとしています。
予想通り、飛行機
やスパイ
の得点が高いです。
勿論、ここでは移動能力(地雷は動かない、飛行機は飛び越せる等)を評価していないです。
後、一般的な将棋の場合、手番のある方が勝つ(駒をとれる)ので、pagerank
の手法ですと得点がすべて同じになるため、別の手法が必要になると思われます。
まとめ
- pegerank に更に詳しくなった