コンピュータとオセロ対戦シリーズとは
文字通り、AIなどを使ってコンピュータとオセロ対戦するまでの軌跡を記録するためのシリーズです。
この記事について
コンピュータとオセロ対戦シリーズの記事数が増えてきたので、ここに目次として全記事のURLと軽い説明を書くことにしました。
シリーズが更新され次第、この記事も更新していきます。
C言語編
1 ~普通にオセロ~
C言語を使い、人同士でのオセロを可能にしました。
2 ~ランダムに返す~
ランダムに打ち返してくるコンピュータとの対戦ができるようになりました。
プレイヤー先攻、コンピュータ後攻のみです。
3 ~一手先まで読む~
一手先まで読み、最もひっくりかえせる場所へ打ち返してくるコンピュータとの対戦ができるようになりました。
プレイヤー先攻、コンピュータ後攻のみです。
4 ~二手先まで読んで返す~
二手先まで読み、二手先で最も有利になりやすい場所へ打ち返してくるコンピュータとの対戦ができるようになりました。
プレイヤー先攻、コンピュータ後攻のみです。
5 ~n手先まで読んで返す~
n手先まで読み、n手先で最も有利になりやすい場所へ打ち返してくるコンピュータとの対戦ができるようになりました。
プレイヤー先攻、コンピュータ後攻のみです。
Processing編
6 ~クリック操作でオセロ~
Processingを使い、クリック操作で人同士でのオセロを可能にしました。
7 ~クリック操作でランダム対戦~
ランダムに打ち返してくるコンピュータとの対戦がクリック操作でできるようになりました。
プレイヤーとコンピュータ、どちらが先攻かを選べます。
8 ~クリック1hand~
一手先まで読み、最もひっくりかえせる場所へ打ち返してくるコンピュータとの対戦がクリック操作でできるようになりました。
プレイヤーとコンピュータ、どちらが先攻かを選べます。
9 ~クリックnhand~
n手先まで読み、n手先で最も有利になりやすい場所へ打ち返してくるコンピュータとの対戦がクリック操作でできるようになりました。
プレイヤーとコンピュータ、どちらが先攻かを選べます。
Python編
10 ~Pythonでオセロ~
Pythonを使ってAIをやるため、まずはPythonで普通にオセロを作りました。
sklearn編
11 ~機械学習、方針決定~
機械学習の方針をいろいろ試しました。
12 ~機械学習、方針決定2~
前回決定した方針について、より詳しく検討しました。
13 ~機械学習、考察~
11と12の結果から考察を行い改善案を考えました。
下積み編
14 ~BitBoard~
高速かつ臨機応変に対応できるデータ集めを可能にするため、c++でBitBoardを実装しました。
15 ~遺伝的アルゴリズム~
最適な評価値を決めるため、遺伝的アルゴリズムを用いて学習を行いました。
16 ~遺伝的アルゴリズム、考察~
15の結果から考察を行い改善案を考えました。
17 ~遺伝的アルゴリズム、乱数~
srand関数の引数を変更し遺伝的アルゴリズムを行ってみました。
18 ~乱数検証~
srand関数の引数について、それによって先手後手に有利不利が生まれるかどうか調べました。
19 ~評価値の評価~
15及び17で求めた評価値の有用性を検証しました。
20 ~遺伝的アルゴリズム、改善~
遺伝的アルゴリズムの最適な方法を探すため総当たりで調べるプログラムを作りました。
21 ~データ分析~
20で得られたデータを分析しました。
22 ~遺伝的アルゴリズム、改善~
汎用性のある評価値を求めるための遺伝的アルゴリズムを行いました。
23 ~評価値決定~
人力で評価学習を決定しました。
機械学習編
24 ~機械学習、リベンジ~
13で頓挫していた機械学習にリベンジしました。
25 ~PythonでBitBoard~
データ集めもPythonで行うため、BitBoardでオセロができるようにしました。
26 ~JavaでBitBoard~
JavaでBitBoardができるようにしました。
27 ~勝敗予測~
盤面から最終結果を予想する機械学習を行いました。
28 ~勝敗予測、改善~
27で行った勝敗予測の改善を行いました。
29 ~勝敗予測AIと対戦~
28で作成したモデルとの対戦プログラムを作りました。
深層学習編
30 ~深層学習で勝敗予測~
28、29で行った学習をニューラルネットワークで行ってみました。
31 ~深層学習で勝敗予測、実験~
30で行った深層学習のミスを修正し、精度を上げるための実験を行いました。
32 ~深層学習で勝敗予測、実験2~
31の続きの実験を行い、本番用モデルを作成しました。
33 ~勝敗予測AIと対戦~
32で作成したモデルとの対戦プログラムを作りました。
34 ~性能評価~
今まで作成したプログラムたちを対戦させてみました。
35 ~NN改良~
32で作成したNNの改良案を考えました。
36 ~10層のハイパーパラメータ~
10層のニューラルネットワークを作成し、性能を上げるための実験を行いました。
37 ~新AIの準備~
新しいAIを作るため、まずミスを見つけたまま終わっていた4層のニューラルネットワークを作り直しました。
38 ~係数、局所探索~
局所探索法を用いて、37で示した新AIの係数を求めることに挑戦しました。
ライブラリ作成編
39 ~ライブラリ、ノード作成~
ノードクラスを作成しました。
40 ~行列計算~
行列計算クラスを作成しました。
41 ~層~
層を作りました。
42 ~ネットワーク~
ネットワークを作成しました。
43 ~目的関数~
目的関数を作成しました。
44 ~勾配降下法と誤差逆伝播法~
勾配降下法を実装しました。
45 ~最適化関数~
勾配降下法以外の様々な最適化関数を実装しました。
46 ~モデルの保存とロード~
モデルの保存とロード機能を実装し、ライブラリを完成させました。
組み合わせAI編
47 ~Javaで勝敗予測~
Javaでオセロを作り直し、試合結果の予測を行いました。
48 ~勝敗予測、改善~
47で行った勝敗予測の改善を行いました。
49 ~AI実装と性能評価~
48で作成したネットワークを実装し、その強さを評価しました。
ライブラリ再作成編
50 ~行列計算~
行列計算クラスを作成。
51 ~層~
全結合層、畳み込み層、プーリング層を作成しました。
52 ~ネットワーククラス~
層をまとめて扱えるネットワーククラスを作成しました。
53 ~損失関数~
損失関数を作成しました。
54 ~勾配降下法と誤差逆伝播法~
勾配降下法を実装しました。
強化学習編
55 ~強化学習~
表形式での強化学習を行いました.
56 ~深層強化学習~
深層強化学習をしてみました.