「Pythonで〇×ゲームのAIを一から作成する」の目次です
| 回数 | タイトル | 公開日 | 最終更新日 |
|---|---|---|---|
| 1 | はじめに | 2023/09/20 | 2023/09/20 |
| 2 | Python のプログラムの記述と実行 | 2023/09/20 | 2023/09/20 |
| 3 | ゲームの仕様の整理 | 2023/09/20 | 2023/09/20 |
| 4 | 配列 と list 型のデータ | 2023/09/20 | 2023/09/20 |
| 5 | ゲーム盤のデータ構造と繰り返し処理 | 2023/09/20 | 2023/09/20 |
| 6 | list と繰り返し処理 | 2023/09/20 | 2023/09/20 |
| 7 | Python のデータとオブジェクト | 2023/09/20 | 2023/09/20 |
| 8 | Python の変数と代入処理 | 2023/09/20 | 2023/09/20 |
| 9 | list の仕組み | 2023/09/20 | 2023/09/20 |
| 10 | 正しい初期化されたゲーム盤の作成方法 | 2023/09/20 | 2023/09/29 |
| 11 | Python の代入処理の補足 | 2023/09/20 | 2023/09/21 |
| 12 | マークの配置と条件分岐 | 2023/09/21 | 2023/09/29 |
| 13 | 関数の定義と関数呼び出し | 2023/09/24 | 2023/09/29 |
| 14 | 名前空間とスコープの仕組み | 2023/09/28 | 2023/09/29 |
| 15 | 名前解決を見分けやすいプログラムの記述方法 | 2023/10/01 | 2023/10/09 |
| 16 | プログラムの修正と関数の副作用 | 2023/10/05 | 2023/10/09 |
| 17 | モジュールのインポートと docstring | 2023/10/08 | 2023/11/25 |
| 18 | ゲーム盤の表示 | 2023/10/12 | 2023/10/12 |
| 19 | オブジェクト指向プログラミング | 2023/10/15 | 2023/10/15 |
| 20 | クラスとインスタンスの仕組み | 2023/10/19 | 2023/10/19 |
| 21 | クラスの属性 | 2023/10/22 | 2023/10/22 |
| 22 | 手番の実装 | 2023/10/26 | 2023/10/26 |
| 23 | 勝敗判定 | 2023/10/29 | 2023/11/25 |
| 24 | 勝敗判定のテストの手法 | 2023/11/02 | 2023/11/02 |
| 25 | テストを行う関数とデータと処理の分離 | 2023/11/05 | 2023/11/05 |
| 26 | テストケースを表すデータ構造の修正 | 2023/11/09 | 2023/11/09 |
| 27 | アルゴリズムとデータ構造 | 2023/11/12 | 2023/11/12 |
| 28 | list と文字列の変換 | 2023/11/16 | 2023/11/16 |
| 29 | 文字列で表現する xy 座標 | 2023/11/19 | 2023/11/19 |
| 30 | その他の座標を表すデータ構造 | 2023/11/23 | 2023/11/23 |
| 31 | 〇の勝利の判定に対するテスト | 2023/11/26 | 2023/11/26 |
| 32 | × の勝利の判定に対するテストと test_judge の改良 | 2023/11/30 | 2023/11/30 |
| 33 | 引き分けの判定に対するテストと組み合わせ網羅テスト | 2023/12/03 | 2023/12/03 |
| 34 | さまざまな勝利判定のアルゴリズム | 2023/12/07 | 2024/01/28 |
| 35 | さまざまな勝利判定のアルゴリズム2 | 2023/12/10 | 2023/12/11 |
| 36 | すべてのマスが埋まっていることを判定するアルゴリズム | 2023/12/15 | 2023/12/15 |
| 37 | 〇×ゲームを遊ぶためのメソッドの定義 | 2023/12/17 | 2023/12/17 |
| 38 | play メソッドの改良 | 2023/12/21 | 2023/12/21 |
| 39 | 単純な AI の作成 | 2023/12/24 | 2023/12/24 |
| 40 | AI の強さの評価方法 | 2023/12/29 | 2023/12/29 |
| 41 | 比率の表示と書式の指定 | 2023/12/31 | 2023/12/31 |
| 42 | 手番を入れ替えた対戦 | 2024/01/04 | 2024/01/04 |
| 43 | AI の視点からの結果の表示 | 2024/01/07 | 2024/01/07 |
| 44 | ルールベースのAIとAIの検証 | 2024/01/10 | 2024/01/10 |
| 45 | 勝てる場合に勝つAIと、浅いコピーと深いコピー | 2024/01/14 | 2024/01/14 |
| 46 | 相手の勝利を阻止するAI | 2024/01/18 | 2024/01/18 |
| 47 | 評価値を利用するアルゴリズム | 2024/01/21 | 2024/01/21 |
| 48 | デバッグ表示と、可変長引数と実引数の展開 | 2024/01/25 | 2024/01/25 |
| 49 | 評価値の計算方法 | 2024/01/28 | 2024/01/28 |
| 50 | 局面に対する評価値の設定と計算 | 2024/02/01 | 2024/02/01 |
| 51 | 〇×ゲームに勝つための条件 | 2024/02/04 | 2024/02/04 |
| 52 | set の性質と利用方法 | 2024/02/08 | 2024/02/08 |
| 53 | dict のハッシュ可能なオブジェクトへの変換と互換性 | 2024/02/11 | 2024/02/11 |
| 54 | namedtuple を使った dict の変換 | 2024/02/15 | 2024/02/15 |
| 55 | 必要条件と十分条件と、複数の条件を考慮した評価値 | 2024/02/19 | 2024/02/19 |
| 56 | 棋譜の記録と、問題のある試合経過の検証 | 2024/02/22 | 2024/02/22 |
| 57 | 敗因の検証と改善方法 | 2024/02/26 | 2024/02/26 |
| 58 | 最強の AI と最善手の定義とその性質 | 2024/03/01 | 2024/03/01 |
| 59 | 演繹法とヒューリスティックによる問題の解決 | 2024/03/04 | 2024/03/04 |
| 60 | 弱解決の定義と性質とその判定方法 | 2024/03/08 | 2024/03/08 |
| 61 | ai11s の検証と限定的な条件による問題の解決 | 2024/03/11 | 2024/03/11 |
| 62 | 条件の統合と乱数の種によるプログラムの再現性 | 2024/03/14 | 2024/03/14 |
| 63 | 最善手の優劣 | 2024/03/17 | 2024/03/17 |
| 64 | ルールベースの AI の一覧、対戦成績、作成したデータファイルのまとめ | 2024/03/18 | 2024/08/22 |
| 65 | matplotlib による画像の描画の基本 | 2024/03/21 | 2024/03/21 |
| 66 | 枠線と文字列によるマークの描画 | 2024/03/24 | 2024/03/24 |
| 67 | 画像によるマークの描画 | 2024/03/28 | 2024/03/28 |
| 68 | ipywidgets と ipympl の使い方とイベント駆動型プログラミング | 2024/03/31 | 2024/03/31 |
| 69 | 画像の描画のタイミングと丸めによる座標の変換 | 2024/04/04 | 2024/04/05 |
| 70 | マウスによる着手の処理 | 2024/04/07 | 2024/04/08 |
| 71 | GUI による AI との対戦 | 2024/04/11 | 2024/04/14 |
| 72 | リセットボタンによるゲームのリセット | 2024/04/14 | 2024/04/14 |
| 73 | 重複する処理の統合 | 2024/04/18 | 2024/04/18 |
| 74 | Dropdown による AI を選択するドロップダウンメニューの作成 | 2024/04/21 | 2024/04/21 |
| 75 | 循環インポートとDropdownの項目の自動登録 | 2024/04/24 | 2024/04/24 |
| 76 | playメソッドのバグの修正とデフォルト引数に関する注意点 | 2024/04/28 | 2024/04/28 |
| 77 | Dropdown による AI の選択と play メソッドの改良 | 2024/05/02 | 2024/05/02 |
| 78 | リプレイ機能の実装 | 2024/05/05 | 2024/05/05 |
| 79 | リプレイ機能の < ボタンに関する修正 | 2024/05/09 | 2024/05/09 |
| 80 | リプレイ機能の残りの問題の修正 | 2024/05/12 | 2025/08/11 |
| 81 | AI が手番を担当した場合のリプレイ機能とGUIの処理の分離 | 2024/05/16 | 2024/05/16 |
| 82 | self の意味の混同に由来する様々なエラー | 2024/05/19 | 2024/05/19 |
| 83 | GUIの機能の分離の完了と差分による局面の再現 | 2024/05/23 | 2024/05/23 |
| 84 | IntSliderとキー入力によるGUIの実装 | 2024/05/26 | 2024/05/26 |
| 85 | キー入力による着手の処理の実装と inspect モジュールを利用したバグの修正 | 2024/05/30 | 2024/05/30 |
| 86 | GUI による乱数の種の設定と対戦結果のファイルへの読み書き | 2024/06/02 | 2024/06/02 |
| 87 | ファイルダイアログの設定とOutputウィジェット | 2024/06/06 | 2024/06/06 |
| 88 | ゲーム木、木構造と親ノードと子ノードの関係の視覚化 | 2024/06/09 | 2024/06/09 |
| 89 | 幅優先アルゴリズムによる深さ 2 のゲーム木の作成と視覚化 | 2024/06/13 | 2024/06/13 |
| 90 | 幅優先アルゴリズムによる任意の深さのゲーム木の作成と部分木の視覚化 | 2024/06/16 | 2024/06/16 |
| 91 | ゲーム木の視覚化の処理のバグの修正と改良 | 2024/06/19 | 2024/06/19 |
| 92 | ゲーム木の部分木の表示範囲の改良 | 2024/06/23 | 2024/06/23 |
| 93 | 継承を利用したGUIの定義 | 2024/06/27 | 2024/09/05 |
| 94 | ゲーム木を視覚化する GUI の作成 | 2024/06/30 | 2024/06/30 |
| 95 | ゲーム木を視覚化する GUI の改良 | 2024/07/04 | 2024/07/04 |
| 96 | テンキーとマウスによる中心となるノードの移動 | 2024/07/07 | 2024/07/07 |
| 97 | ゲーム木の生成過程を表示するアニメーション | 2024/07/11 | 2024/07/11 |
| 98 | ゲーム木の生成過程を表示するアニメーションの改良と処理時間の計測 | 2024/07/15 | 2024/07/15 |
| 99 | 深さ優先アルゴリズムによるゲーム木の生成 | 2024/07/19 | 2024/07/19 |
| 100 | 再帰呼び出しによる繰り返し処理の性質 | 2024/07/21 | 2024/07/21 |
| 101 | for 文と while 文による繰り返し処理の性質と使い分け | 2024/07/25 | 2024/07/25 |
| 102 | 直線的な繰り返し処理を行うボトムアップとトップダウンな再帰呼び出し | 2024/07/28 | 2024/07/28 |
| 103 | 複数の項で表される漸化式のトップダウンな再帰呼び出しによる計算 | 2024/08/01 | 2024/08/01 |
| 104 | 木構造のデータに対する幅優先と深さ優先アルゴリズムによる繰り返し処理 | 2024/08/04 | 2024/08/04 |
| 105 | ミニマックス法によるゲーム木の全てのノードの評価値の計算 | 2024/08/08 | 2024/08/08 |
| 106 | 深さ優先アルゴリズムと幅優先アルゴリズムでのゲーム木の評価値の計算の過程の視覚化 | 2024/08/11 | 2024/08/11 |
| 107 | ゲーム木を利用した強解決のAIの作成とエラーメッセージによるデバッグ | 2024/08/15 | 2024/08/15 |
| 108 | ゲーム木を利用した AI の処理の改良とプログレスバーの表示 | 2024/08/18 | 2024/08/18 |
| 109 | 強解決の AI であるかの判定 | 2024/08/22 | 2024/08/25 |
| 110 | データ型による演算子の処理の違いによるバグとboard 属性を利用した局面の表現 | 2024/08/25 | 2024/08/25 |
| 111 | 同一局面の計算と同一局面を考慮した強解決の AI の判定 | 2024/08/29 | 2024/08/29 |
| 112 | 弱解決の AI であるかの判定と枝狩りによる探索の効率化 | 2024/09/01 | 2024/09/02 |
| 113 | パラメータを必要とする AI に対する GUI の対戦機能の実装 | 2024/09/05 | 2024/09/05 |
| 114 | データ構造を変更した結果生じた Marubatsu_GUI クラスのバグの修正 | 2024/09/08 | 2024/09/08 |
| 115 | ファイルの保存と読み込みに関するバグの修正と改良 | 2024/09/12 | 2024/09/12 |
| 116 | 〇×ゲームの GUI とゲーム木の表示の連動 | 2024/09/15 | 2024/09/15 |
| 117 | GUI の部分木への最善手の表示と最善手を着手し続けた場合の局面の表示 | 2024/09/19 | 2024/09/19 |
| 118 | 最善手の優劣を考慮したゲーム木を利用する AI | 2024/09/22 | 2024/09/22 |
| 119 | matplotlib での文字の表示の性質と部分木の表示サイズを変更する FloatSlider の実装 | 2024/09/26 | 2024/09/26 |
| 120 | draw_subtree メソッドで表示する部分木の動的な作成 | 2024/09/29 | 2024/09/29 |
| 121 | 部分木の動的な作成の続きと潜在的なバグ | 2024/10/03 | 2024/10/03 |
| 122 | 評価値が計算された部分木の動的な作成と Mbtree_GUI クラスによる表示 | 2024/10/06 | 2024/10/06 |
| 123 | Dropdown による最善手・評価値の対応表の変更 | 2024/10/10 | 2024/10/10 |
| 124 | リプレイ機能を利用した際のバグの検証と修正 | 2024/10/13 | 2024/10/13 |
| 125 | 現在の局面の状況と合法手を着手した際の局面の状況の表示 | 2024/10/17 | 2024/11/16 |
| 126 | AI が計算した候補手または評価値のゲーム盤への表示 | 2024/10/20 | 2024/10/20 |
| 127 | ラッパー関数 | 2024/10/23 | 2024/10/23 |
| 128 | ラッパー関数を作成して返り値として返す高階関数とクロージャーの仕組み | 2024/10/28 | 2024/10/28 |
| 129 | デコレーターとデコレーター式によるラッパー関数の定義 | 2024/11/01 | 2024/11/01 |
| 130 | クラスによるデコレーターの定義とデコレーター式による AI の定義 | 2024/11/04 | 2024/11/04 |
| 131 | ラッパー関数とラップする関数の仮引数の関係 | 2024/11/09 | 2024/11/09 |
| 132 | デコレーター式を利用したすべての AI の関数の再定義 | 2024/11/12 | 2024/11/12 |
| 133 | 再定義した AI の検証と任意の AI が計算した候補手または評価値のゲーム盤への表示 | 2024/11/16 | 2024/11/16 |
| 134 | 評価値を表示するAIの自動選択とゲーム木を利用するAIの評価値の一覧の計算 | 2024/11/24 | 2024/11/24 |
| 135 | 引き分けの局面での最善手の優劣と最大と最小の評価値の計算 | 2024/11/28 | 2024/11/28 |
| 136 | ミニマックス法と引き分けの局面の評価値の再計算の処理の分離 | 2024/12/01 | 2024/12/01 |
| 137 | ミニマックス法による探索の実装方法の種類と評価値を動的に計算する実装方法 | 2024/12/05 | 2024/12/05 |
| 138 | αβ(アルファベータ)法の仕組みと実装 | 2024/12/08 | 2024/12/08 |
| 139 | Mbtree_Anim クラスのバグの修正と改良 | 2024/12/15 | 2024/12/15 |
| 140 | αβ 法による評価値の計算手順の視覚化 | 2024/12/19 | 2024/12/19 |
| 141 | αβ 法の視覚化の改良 | 2024/12/22 | 2024/12/22 |
| 142 | 数直線による αβ 法の α 値などの視覚化 | 2024/12/26 | 2024/12/26 |
| 143 | Mbtree_Anim のアニメーションの各フレームで行われる処理の視覚化 | 2024/12/29 | 2024/12/29 |
| 144 | 枝狩りが行われたノードの表示の明確化 | 2025/01/02 | 2025/01/02 |
| 145 | Mbtee_Anim での選択中のノードに対するフレームの移動 | 2025/01/05 | 2025/01/05 |
| 146 | αβ 法のまとめとMbtree_Anim を利用した αβ 法の処理の確認 | 2025/01/09 | 2025/01/09 |
| 147 | αβ 法での枝狩りが行われたノードの数などの視覚化 | 2025/01/12 | 2025/01/12 |
| 148 | Mbtree_Anim でのフレーム間の差分データの表示 | 2025/01/19 | 2025/01/19 |
| 149 | Mbtree_Anim を用いた αβ 法による評価値の計算手順と差分データの確認方法のまとめ | 2025/01/23 | 2025/01/25 |
| 150 | αβ 法の処理の効率の性質と改善方法 | 2025/01/26 | 2025/01/26 |
| 151 | 置換表によるミニマックス法の枝狩り | 2025/02/02 | 2025/02/02 |
| 152 | 置換表による αβ 法の枝狩り | 2025/02/09 | 2025/02/09 |
| 153 | αβ 法が計算する評価値の意味(fail low と fail high) | 2025/02/16 | 2025/02/16 |
| 154 | ミニマックス値の下界と上界を記録する置換表を利用した αβ 法 | 2025/02/23 | 2025/02/23 |
| 155 | 置換表付き αβ 法での置換表へのデータの記録方法の修正 | 2025/02/27 | 2025/02/27 |
| 156 | 置換表付き αβ 法の視覚化を行うための関数の定義 | 2025/03/06 | 2025/03/06 |
| 157 | ミニマックス法の視覚化の検討と視覚化に必要なデータの記録 | 2025/03/09 | 2025/03/09 |
| 158 | ミニマックス法の視覚化のための Mbtree_Anim の修正 | 2025/03/13 | 2025/03/13 |
| 159 | αβ 法の視覚化の検討と視覚化に必要なデータの記録 | 2025/03/17 | 2025/03/17 |
| 160 | αβ 法の視覚化のための Mbtree_Anim の修正 その 1 | 2025/03/20 | 2025/03/20 |
| 161 | αβ 法の視覚化のための Mbtree_Anim の修正 その 2 | 2025/03/23 | 2025/03/23 |
| 162 | αβ 法の視覚化のための Mbtree_Anim の修正 その 3 | 2025/03/30 | 2025/03/30 |
| 163 | null window search | 2025/04/02 | 2025/04/02 |
| 164 | move ordering を行う AI の定義と dict の要素の並べ替え | 2025/04/09 | 2025/04/10 |
| 165 | スカウト法のアルゴリズムと性質 | 2025/04/19 | 2025/04/19 |
| 166 | スカウト法の実装と効率 | 2025/04/24 | 2025/04/24 |
| 167 | 完璧な move ordering での αβ 法とスカウト法 | 2025/04/28 | 2025/04/28 |
| 168 | MTD(f) 法の仕組みと実装 | 2024/05/04 | 2025/05/04 |
| 169 | αβ 法との比較による MTD(f) 法の効率の検証 | 2025/05/08 | 2025/05/08 |
| 170 | ミニマックス値の推定値の精度による MTD(f) 法の効率の検証 | 2025/05/11 | 2025/05/11 |
| 171 | その他の αβ 法の効率を改善するアルゴリズムと αβ 法の最大効率の証明 | 2025/05/15 | 2025/05/15 |
| 172 | 深さ制限探索と @ai_by_score の補足説明と改良 | 2025/05/22 | 2025/05/22 |
| 173 | ai_by_mmscore の定義と深さ制限探索による AI の実装 | 2025/05/27 | 2025/05/27 |
| 174 | 深さ制限探索の性質 | 2025/06/02 | 2025/06/02 |
| 175 | 静的評価関数の近似値の誤差の精度とばらつきの精度 | 2025/06/08 | 2025/06/21 |
| 176 | 静的評価関数の精度に関する補足と確率分布の計算を行う関数の定義 | 2025/06/14 | 2025/06/14 |
| 177 | 正規分布に従う離散型確率分布の計算 | 2025/06/22 | 2025/06/22 |
| 178 | 深さの上限を 1 としたミニマックス法で計算される確率分布の性質 | 2025/06/29 | 2025/06/29 |
| 179 | 深さの上限を 2 以上としたミニマックス法で計算される確率分布の性質 | 2025/07/06 | 2025/07/06 |
| 180 | 水平線効果と誤差の蓄積によるバグ | 2025/07/13 | 2025/07/13 |
| 181 | 反復深化と例外に関する処理 | 2025/07/20 | 2025/07/20 |
| 182 | 反復深化を利用した move ordering | 2025/07/27 | 2025/08/07 |
| 183 | move ordering を行う αβ 法の反復深化の実装と検証 | 2025/08/03 | 2025/08/07 |
| 184 | 反復深化を利用した Principal Variation Search | 2025/08/08 | 2025/08/08 |
| 185 | 着手の取り消しによる処理の高速化 | 2025/08/12 | 2025/08/12 |
| 186 | 着手の取り消しによる処理の高速化の検証 | 2025/08/16 | 2025/08/16 |
| 187 | ボトルネックと処理の高速化の関係 | 2025/08/20 | 2025/08/20 |
| 188 | 勝敗判定の処理の高速化と高速化の手法の組み合わせ | 2025/08/24 | 2025/08/28 |
| 189 | コンピューターの環境やPythonのバージョンの違いによる処理速度の影響と各直線上のマークの数を記録することの利点 | 2025/08/28 | 2025/08/28 |
| 190 | 他の Marubatsu クラスの処理速度の改善の試み | 2025/09/01 | 2025/09/01 |
| 191 | ポリモーフィズムによる異なるゲーム盤を表すデータ構造の切り替えと __getitem__ と __setitem__ の利用方法 |
2025/09/05 | 2025/09/05 |
| 192 | ListBoard クラスの処理速度の低下と無限ループのバグの修正 | 2025/09/09 | 2025/09/09 |
| 193 | Board クラスの抽象メソッドの追加 | 2025/09/13 | 2025/09/13 |
| 194 | ベンチマークの設定と関数の定義と timeit モジュールの使い方 | 2025/09/17 | 2025/09/17 |
| 195 | 座標を表すデータ構造に対するポリモーフィズム | 2025/09/22 | 2025/09/22 |
| 196 | ListBoard と List1dBoard クラスの処理の検証と修正 | 2025/09/28 | 2025/09/28 |
| 197 | array と numpy を利用したゲーム盤を表すクラスの定義 | 2025/10/04 | 2025/10/04 |
| 198 | スライス表記などを利用した NpBoard クラスの改良 | 2025/10/11 | 2025/10/11 |
| 199 | ndarray の演算とブロードキャストを利用した判定処理 | 2025/10/18 | 2025/10/18 |
| 200 | 回転(np.rot90)と反転(np.filplr)を利用した同一局面の計算 | 2025/10/25 | 2025/10/25 |
| 201 | 近日公開予定です |