目次と前回の記事
これまでに作成したモジュール
以下のリンクから、これまでに作成したモジュールを見ることができます。
この記事の内容
今回の記事は、下記の内容をまとめたものです。
ルールベースの AI の一覧
アルゴリズムの一覧
これまでに作成した AI の アルゴリズム は以下の通りです。
ルール | アルゴリズム |
---|---|
ルール1 | 左上から順 に 空いているマス を探し、最初に見つかったマス に 着手 する |
ルール2 | ランダム なマスに 着手 する |
ルール3 |
真ん中 のマスに 優先的 に 着手 する 既に 埋まっていた場合 は ランダム なマスに 着手 する |
ルール4 |
真ん中、隅 のマスの 順 で 優先的 に 着手 する 既に 埋まっていた場合 は ランダム なマスに 着手 する |
ルール5 |
勝てる場合 に 勝つ そうでない場合は ランダム なマスに 着手 する |
ルール6 |
勝てる場合 に 勝つ そうでない場合は 相手の勝利 を 阻止 する そうでない場合は ランダム なマスに 着手 する |
ルール6改 |
勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない そうでない場合は ランダム なマスに 着手 する |
ルール7 |
真ん中 のマスに 優先的 に 着手 する そうでない場合は 勝てる場合 に 勝つ そうでない場合は 相手の勝利 を 阻止 する そうでない場合は ランダム なマスに 着手 する |
ルール7改 |
真ん中 のマスに 優先的 に 着手 する そうでない場合は 勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない そうでない場合は ランダム なマスに 着手 する |
ルール8 |
真ん中 のマスに 優先的 に 着手 する そうでない場合は 勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない そうでない場合は、次 の 自分の手番 で 勝利できる ように、「自 2 敵 0 空 1」が 1 つ以上 存在する 局面になる着手を行う そうでない場合は ランダム なマスに 着手 する |
ルール9 |
真ん中 のマスに 優先的 に 着手 する そうでない場合は 勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない そうでない場合は、次 の 自分の手番 で 必ず勝利できる ように、「自 2 敵 0 空 1」が 2 つ以上存在する 局面になる着手を行う そうでない場合は、次 の 自分の手番 で 勝利できる ように、「自 2 敵 0 空 1」が 1 つ存在する 局面になる着手を行う そうでない場合は ランダム なマスに 着手 する |
ルール10 |
真ん中 のマスに 優先的 に 着手 する そうでない場合は 勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない そうでない場合は、次 の 自分の手番 で 必ず勝利できる ように、「自 2 敵 0 空 1」が 2 つ以上存在する 局面になる着手を行う そうでない場合は、以下 の 2 つを 総合的に判断 して着手を行う
|
ルール11 |
真ん中 のマスに 優先的 に 着手 する そうでない場合は 勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない そうでない場合は、次 の 自分の手番 で 必ず勝利できる ように、「自 2 敵 0 空 1」が 2 つ以上存在する 局面になる着手を行う そうでない場合は、以下 の 3 つを 総合的に判断 して着手を行う
|
ルール12 |
真ん中 のマスに 優先的 に 着手 する そうでない場合は 勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない そうでない場合は、次 の 自分の手番 で 必ず勝利できる ように、「自 2 敵 0 空 1」が 2 つ以上存在する 局面になる着手を行う そうでない場合は、斜め方向 に 〇×〇 が 並び、他の 6 マス が 空のマス の場合に、いずれか の 辺のマス に着手を行う そうでない場合は、以下 の 3 つを 総合的に判断 して着手を行う
|
ルール12 改 |
勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない そうでない場合は、次 の 自分の手番 で 必ず勝利できる ように、「自 2 敵 0 空 1」が 2 つ以上存在する 局面になる着手を行う そうでない場合は、斜め方向 に 〇×〇 が 並び、他の 6 マス が 空のマス の場合に、いずれか の 辺のマス に着手を行う そうでない場合は、以下 の 3 つを 総合的に判断 して着手を行う
|
ルール13 |
勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない。ただし、「自 0 敵 2 空 1」の 数 が 少ない着手 を 優先 する そうでない場合は、次 の 自分の手番 で 必ず勝利できる ように、「自 2 敵 0 空 1」が 2 つ以上存在する 局面になる着手を行う そうでない場合は、斜め方向 に 〇×〇 が 並び、他の 6 マス が 空のマス の場合に、いずれか の 辺のマス に着手を行う そうでない場合は、以下 の 3 つを 総合的に判断 して着手を行う
|
ルール14 |
勝てる場合 に 勝つ そうでない場合は 相手 が 勝利できる 着手を 行わない。ただし、「自 0 敵 2 空 1」の 数 が 少ない着手 を 優先 する。また、下記の 総合的に判断 して 着手 を行う 条件 も 考慮 する そうでない場合は、次 の 自分の手番 で 必ず勝利できる ように、「自 2 敵 0 空 1」が 2 つ以上存在する 局面になる着手を行う そうでない場合は、斜め方向 に 〇×〇 が 並び、他の 6 マス が 空のマス の場合に、いずれか の 辺のマス に着手を行う そうでない場合は、以下 の 3 つを 総合的に判断 して着手を行う
|
ルール 11 ~ 14 で 評価値を計算 する際の パラメータ は以下の通りです。
ai11s ver 1 |
ai11s ver 2 |
ai11s ver 3ai12s ai13s ai14s
|
|
---|---|---|---|
「自 2 敵 0 空 1」が 1 つの場合の評価値 | 1 | 2 | 2 |
「自 1 敵 0 空 2」が 1 つあたりの評価値 | 1 | 1 | 0.5 |
「自 0 敵 1 空 2」が 1 つあたりの評価値 | -1 | -1 | 1 |
アルゴリズムとルールの関係
下記は、ルール 14 の アルゴリズム の それぞれの条件 が、どのルール で 追加されたか についてまとめたものです。
順位 | 条件 | 種類 | ルール |
---|---|---|---|
1 | 勝てる場合 に 勝つ | 十分条件 | ルール 5 |
2 |
相手 が 勝利できる 着手を 行わない 「自 0 敵 2 空 1」の 数 が 少ない着手 を 優先 する 優先順位 が 5 の条件 も 考慮 する |
必要条件 |
ルール 6 ルール 13 ルール 14 |
3 | 「自 2 敵 0 空 1」が 2 つ以上存在 する着手を行う | 十分条件 | ルール 8 |
4 |
斜め方向 に 〇×〇 が 並び、他の 6 マス が 空のマス の場合は、いずれか の 辺のマス に着手を行う |
十分条件 | ルール 12 |
5 | 「自 2 敵 0 空 1」が 1 つ存在 する着手を行う 「自 1 敵 0 空 2」が 最も多い 着手を行う 「自 0 敵 1 空 2」が 最も少ない 着手を行う |
ルール 9 ルール 10 ルール 11 |
|
6 | ランダム なマスに 着手 する |
ゲーム木を利用した強解決の AI
以下は ゲーム木を利用した強解決の AI の関数のアルゴリズムの違いです。
AI | アルゴリズム |
---|---|
ai_gt1 |
下記の手順で処理を行う。
|
ai_gt2 |
上記の手順 2 をゲーム木の作成の時点で行い、Node の bestmoves 属性に代入しておく |
ai_gt3 |
上記の手順 1 をゲーム木の作成の時点で行い、Mbtree の nodelist_by_mb 属性に代入しておく |
ai_gt4 |
上記の手順 1 と 2 をまとめてゲーム木の作成の時点で行い、Mbtree の bestmoves_by_mb 属性に代入しておく |
ai_gt5 |
Mbtree の bestmoves_by_mb 属性だけを仮引数に代入するようにする |
ai_gt6 |
board 属性を利用した局面と最善手の対応表を仮引数に代入するようにする |
ai_gt7 |
board 属性を利用した局面と最善手・評価値の対応表を仮引数に代入するようにする |
gui_play に登録した ai_gt6
を利用した AI
下記は、gui_play
に登録した ai_gt6
を利用した AI の性質と、その AI が利用するゲーム木のノードの評価値を計算する方法です。
ai_gt6
全ての最善手の中からランダムに着手を行う強解決の AI です。
局面の状況 | 評価値 |
---|---|
〇 の必勝の局面 | 1 |
引き分けの局面 | 0 |
× の必勝の局面 | -1 |
ai_gtsv
必勝の局面 の場合は最善手の中で 最も早く勝利できる合法手 を、必敗の局面 の場合は最善手の中で 敗北を最も先に延ばす合法手 を選択する強解決の AI です。
局面の深さ | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|
〇 が勝利した場合の評価値 | 3 | 2 | 1 | ||
× が勝利した場合の評価値 | -2 | -1 |
引き分けの局面の評価値は常に 0 とする。
ai_gtsvrd
引き分けの局面の最善手 に対して、下記のような方法で 優劣をつけた ゲーム木の 評価値を計算 することで、勝利する可能性がある合法手を選択 されるようにする AI です。
-
× の手番の局面の場合
- 相手の着手によって 〇 が 勝利する可能性がある 場合は 0.5
- そうでない場合は 0
-
〇 の手番の局面の場合
- 相手の着手によって × が 勝利する可能性がある 場合は -0.5
- そうでない場合は 0
ランダムな AI である ai2
との対戦結果
基準となる ai2
との 対戦結果(単位は %)は以下の通りです。太字 は ai2 VS ai2
よりも 成績が良い 数値を表します。欠陥 の列は、アルゴリズム に 欠陥 があるため、ai2
との 対戦成績 が 良くても強い とは 限らない ことを表します。欠陥の詳細については、関数名のリンク先の説明を見て下さい。
なお、敗率 が 0 % になっている ai12
ver 2 以降 の AI は 弱解決の AI です。
また、ai_gt1
は、ゲーム木の評価値を利用した 強解決の AI です。なお、ai_gt1
~ ai_gt5
の AI の強さはすべて同一なので、表では ai_gt1
のみを表記します。
関数名 | o 勝 | o 負 | o 分 | x 勝 | x 負 | x 分 | 勝 | 負 | 分 | 欠陥 |
---|---|---|---|---|---|---|---|---|---|---|
ai1 ai1s
|
78.1 | 17.5 | 4.4 | 44.7 | 51.6 | 3.8 | 61.4 | 34.5 | 4.1 | あり |
ai2 ai2s
|
58.7 | 28.8 | 12.6 | 29.1 | 58.6 | 12.3 | 43.9 | 43.7 | 12.5 | |
ai3 ai3s
|
69.3 | 19.2 | 11.5 | 38.9 | 47.6 | 13.5 | 54.1 | 33.4 | 12.5 | |
ai4 ai4s
|
83.0 | 9.5 | 7.4 | 57.2 | 33.0 | 9.7 | 70.1 | 21.3 | 8.6 | あり |
ai5 ai5s
|
81.2 | 12.3 | 6.5 | 51.8 | 39.8 | 8.4 | 66.5 | 26.0 | 7.4 | |
ai6 |
88.9 | 2.2 | 8.9 | 70.3 | 6.2 | 23.5 | 79.6 | 4.2 | 16.2 | |
ai6s |
88.6 | 1.9 | 9.5 | 69.4 | 9.1 | 21.5 | 79.0 | 5.5 | 15.5 | |
ai7 ai7s
|
95.8 | 0.2 | 4.0 | 82.3 | 2.4 | 15.3 | 89.0 | 1.3 | 9.7 | |
ai8s |
98.2 | 0.1 | 1.6 | 89.4 | 2.5 | 8.1 | 93.8 | 1.3 | 4.9 | |
ai9s |
98.7 | 0.1 | 1.2 | 89.6 | 2.4 | 8.0 | 94.1 | 1.3 | 4.6 | |
ai10s |
97.4 | 0.0 | 2.6 | 85.6 | 2.6 | 11.7 | 91.5 | 1.3 | 7.2 | |
ai11s ver 1 |
98.1 | 0.0 | 1.9 | 82.5 | 1.9 | 15.6 | 90.3 | 1.0 | 8.7 | あり |
ai11s ver 2 |
98.8 | 0.0 | 1.2 | 87.7 | 2.4 | 10.0 | 93.2 | 1.2 | 5.6 | |
ai11s ver 3 |
99.1 | 0.0 | 0.9 | 87.7 | 0.8 | 11.5 | 93.4 | 0.4 | 6.2 | |
ai12s ver 2 |
98.9 | 0.0 | 1.1 | 88.2 | 0.0 | 11.8 | 93.5 | 0.0 | 6.5 | |
ai12s ver 3 |
95.8 | 0.0 | 4.2 | 86.9 | 0.0 | 13.1 | 91.3 | 0.0 | 8.7 | あり |
ai13s |
98.9 | 0.0 | 1.1 | 88.5 | 0.0 | 11.5 | 93.7 | 0.0 | 6.3 | |
ai14s |
99.0 | 0.0 | 1.0 | 88.8 | 0.0 | 11.2 | 93.9 | 0.0 | 6.1 | |
ai_gt1 |
96.9 | 0.0 | 3.1 | 78.0 | 0.0 | 22.1 | 87.4 | 0.0 | 12.6 | |
ai_gtsvrd |
97.1 | 0.0 | 2.9 | 81.1 | 0.0 | 18.9 | 89.1 | 0.0 | 10.9 |
本記事全体で作成したデータファイルの一覧
下記は、本記事全体で作成したデータファイルの一覧です。
本記事で入力したプログラム
本記事で入力したプログラムはありません。
更新履歴
更新日時 | 更新内容 |
---|---|
2024/09/22 | gui_play に登録した ai_gt6 を利用した AI の項目を追加しました。 |
2024/08/18 | ゲーム木を利用した AI と、作成したデータファイルの情報の項目を追加しました。以後は、本記事の更新に合わせて適宜修正します。 |
次回の記事