コンピュータとオセロ対戦目次

# コンピュータとオセロ対戦シリーズとは
文字通り、AIなどを使ってコンピュータとオセロ対戦するまでの軌跡を記録するためのシリーズです。

# この記事について
コンピュータとオセロ対戦シリーズの記事数が増えてきたので、ここに目次として全記事のURLと軽い説明を書くことにしました。
シリーズが更新され次第、この記事も更新していきます。

# C言語編

1　～普通にオセロ～
C言語を使い、人同士でのオセロを可能にしました。

https://qiita.com/tt_and_tk/items/6346aaec7277fca4ad2c

2　～ランダムに返す～
ランダムに打ち返してくるコンピュータとの対戦ができるようになりました。
プレイヤー先攻、コンピュータ後攻のみです。

https://qiita.com/tt_and_tk/items/b7aa5f543037ad35a7a2

3　～一手先まで読む～
一手先まで読み、最もひっくりかえせる場所へ打ち返してくるコンピュータとの対戦ができるようになりました。
プレイヤー先攻、コンピュータ後攻のみです。

https://qiita.com/tt_and_tk/items/7ddb15af4609e55908d2

4　～二手先まで読んで返す～
二手先まで読み、二手先で最も有利になりやすい場所へ打ち返してくるコンピュータとの対戦ができるようになりました。
プレイヤー先攻、コンピュータ後攻のみです。

https://qiita.com/tt_and_tk/items/27b567f636aaeab166e4

5　～n手先まで読んで返す～
n手先まで読み、n手先で最も有利になりやすい場所へ打ち返してくるコンピュータとの対戦ができるようになりました。
プレイヤー先攻、コンピュータ後攻のみです。

https://qiita.com/tt_and_tk/items/c1c526bdb3dd7f163161

# Processing編

6　～クリック操作でオセロ～
Processingを使い、クリック操作で人同士でのオセロを可能にしました。

https://qiita.com/tt_and_tk/items/e00d61190833ef2a3ca7

7　～クリック操作でランダム対戦～
ランダムに打ち返してくるコンピュータとの対戦がクリック操作でできるようになりました。
プレイヤーとコンピュータ、どちらが先攻かを選べます。

https://qiita.com/tt_and_tk/items/85b05b0eace25f31f73b

8　～クリック1hand～
一手先まで読み、最もひっくりかえせる場所へ打ち返してくるコンピュータとの対戦がクリック操作でできるようになりました。
プレイヤーとコンピュータ、どちらが先攻かを選べます。

https://qiita.com/tt_and_tk/items/7cf1cf1c3e5127ee492d

9　～クリックnhand～
n手先まで読み、n手先で最も有利になりやすい場所へ打ち返してくるコンピュータとの対戦がクリック操作でできるようになりました。
プレイヤーとコンピュータ、どちらが先攻かを選べます。

https://qiita.com/tt_and_tk/items/79260b0859cd3a60062b

# Python編

10　～Pythonでオセロ～
Pythonを使ってAIをやるため、まずはPythonで普通にオセロを作りました。

https://qiita.com/tt_and_tk/items/9c4a6ed37254381a4f1c

## sklearn編

11　～機械学習、方針決定～
機械学習の方針をいろいろ試しました。

https://qiita.com/tt_and_tk/items/49ed4bdd52f3597b80d6

12　～機械学習、方針決定2～
前回決定した方針について、より詳しく検討しました。

https://qiita.com/tt_and_tk/items/0f9f50a4299899cab7ea

13　～機械学習、考察～
11と12の結果から考察を行い改善案を考えました。

https://qiita.com/tt_and_tk/items/5311ce25d46bfe21c2e5

# 下積み編

14　～BitBoard～
高速かつ臨機応変に対応できるデータ集めを可能にするため、c++でBitBoardを実装しました。

https://qiita.com/tt_and_tk/items/353e369e3a2b888c038c

15　～遺伝的アルゴリズム～
最適な評価値を決めるため、遺伝的アルゴリズムを用いて学習を行いました。

https://qiita.com/tt_and_tk/items/04768c21d351897e82f4

16　～遺伝的アルゴリズム、考察～
15の結果から考察を行い改善案を考えました。

https://qiita.com/tt_and_tk/items/82a6ac8a0b83b9e9fdff

17　～遺伝的アルゴリズム、乱数～
srand関数の引数を変更し遺伝的アルゴリズムを行ってみました。

https://qiita.com/tt_and_tk/items/9928f1848112785563ce

18　～乱数検証～
srand関数の引数について、それによって先手後手に有利不利が生まれるかどうか調べました。

https://qiita.com/tt_and_tk/items/ca0f0f2cc1be35f99241

19　～評価値の評価～
15及び17で求めた評価値の有用性を検証しました。

https://qiita.com/tt_and_tk/items/d0a192d1b4d3ef9c4fb5

20　～遺伝的アルゴリズム、改善～
遺伝的アルゴリズムの最適な方法を探すため総当たりで調べるプログラムを作りました。

https://qiita.com/tt_and_tk/items/e46cbbd0dc6f9f841003

21　～データ分析～
20で得られたデータを分析しました。

https://qiita.com/tt_and_tk/items/db9c6d3e4893cfcbd679

22　～遺伝的アルゴリズム、改善～
汎用性のある評価値を求めるための遺伝的アルゴリズムを行いました。

https://qiita.com/tt_and_tk/items/65bea2e3a7ec58556ad9

23　～評価値決定～
人力で評価学習を決定しました。

https://qiita.com/tt_and_tk/items/6cac66b66f3e2cfabd4a

# 機械学習編

24　～機械学習、リベンジ～
13で頓挫していた機械学習にリベンジしました。

https://qiita.com/tt_and_tk/items/7510e285bd4ba8251b13

25　～PythonでBitBoard～
データ集めもPythonで行うため、BitBoardでオセロができるようにしました。

https://qiita.com/tt_and_tk/items/9279ee9b1cab8efe529e

26　～JavaでBitBoard～
JavaでBitBoardができるようにしました。

https://qiita.com/tt_and_tk/items/c5186903c9dd421bee81

27　～勝敗予測～
盤面から最終結果を予想する機械学習を行いました。

https://qiita.com/tt_and_tk/items/98a06feb9b3c66fa2e89

28　～勝敗予測、改善～
27で行った勝敗予測の改善を行いました。

https://qiita.com/tt_and_tk/items/35ba790f0f285b170bb9

29　～勝敗予測AIと対戦～
28で作成したモデルとの対戦プログラムを作りました。

https://qiita.com/tt_and_tk/items/4006bce08ede7e975033

# 深層学習編

30　～深層学習で勝敗予測～
28、29で行った学習をニューラルネットワークで行ってみました。

https://qiita.com/tt_and_tk/items/eb2a0389626b160f32f0

31　～深層学習で勝敗予測、実験～
30で行った深層学習のミスを修正し、精度を上げるための実験を行いました。

https://qiita.com/tt_and_tk/items/a06e3c9ddf88b0213cb9

32　～深層学習で勝敗予測、実験2～
31の続きの実験を行い、本番用モデルを作成しました。

https://qiita.com/tt_and_tk/items/a95c5632be0a1f643408

33　～勝敗予測AIと対戦～
32で作成したモデルとの対戦プログラムを作りました。

https://qiita.com/tt_and_tk/items/4179c1e25d689bccce8a

34　～性能評価～
今まで作成したプログラムたちを対戦させてみました。

https://qiita.com/tt_and_tk/items/13be9077d3b136c20375

35　～NN改良～
32で作成したNNの改良案を考えました。

https://qiita.com/tt_and_tk/items/100a2751abe39a95442f

36　～10層のハイパーパラメータ～
10層のニューラルネットワークを作成し、性能を上げるための実験を行いました。

https://qiita.com/tt_and_tk/items/d0c087bf559eb26c8e2a

37　～新AIの準備～
新しいAIを作るため、まずミスを見つけたまま終わっていた4層のニューラルネットワークを作り直しました。

https://qiita.com/tt_and_tk/items/753fe2fad62b9fad5aae

38　～係数、局所探索～
局所探索法を用いて、37で示した新AIの係数を求めることに挑戦しました。

https://qiita.com/tt_and_tk/items/6f7147039e71c0553ed2

# ライブラリ作成編

39　～ライブラリ、ノード作成～
ノードクラスを作成しました。

https://qiita.com/tt_and_tk/items/e91bfc5c83bd8ee73d75

40　～行列計算～
行列計算クラスを作成しました。

https://qiita.com/tt_and_tk/items/6b9612571e602c417b42

41　～層～
層を作りました。

https://qiita.com/tt_and_tk/items/bd49dd220f8c9a8eadd5

42　～ネットワーク～
ネットワークを作成しました。

https://qiita.com/tt_and_tk/items/9c3e208d77373d0683e3

43　～目的関数～
目的関数を作成しました。

https://qiita.com/tt_and_tk/items/ed76a06d55e869aa706a

44　～勾配降下法と誤差逆伝播法～
勾配降下法を実装しました。

https://qiita.com/tt_and_tk/items/5b6f755a115af6eac620

45　～最適化関数～
勾配降下法以外の様々な最適化関数を実装しました。

https://qiita.com/tt_and_tk/items/54c91a2ba0f5606d54b9

46　～モデルの保存とロード～
モデルの保存とロード機能を実装し、ライブラリを完成させました。

https://qiita.com/tt_and_tk/items/7a71975d8ca29079a6bc

# 組み合わせAI編

47　～Javaで勝敗予測～
Javaでオセロを作り直し、試合結果の予測を行いました。

https://qiita.com/tt_and_tk/items/22641b036d3b1e5fdbca

48　～勝敗予測、改善～
47で行った勝敗予測の改善を行いました。

https://qiita.com/tt_and_tk/items/d8f662c430ac277a4d20

49　～AI実装と性能評価～
48で作成したネットワークを実装し、その強さを評価しました。

https://qiita.com/tt_and_tk/items/1f784fbd9d1af6b03415

# ライブラリ再作成編

50　～行列計算～
行列計算クラスを作成。

https://qiita.com/tt_and_tk/items/54101f07855763fb4924

51　～層～
全結合層、畳み込み層、プーリング層を作成しました。

https://qiita.com/tt_and_tk/items/5249541e6bdf307c28ad

52　～ネットワーククラス～
層をまとめて扱えるネットワーククラスを作成しました。

https://qiita.com/tt_and_tk/items/8bce5586efbf6a67f086

53　～損失関数～
損失関数を作成しました。

https://qiita.com/tt_and_tk/items/5c647f59019a03d4cf9e

54　～勾配降下法と誤差逆伝播法～
勾配降下法を実装しました。

https://qiita.com/tt_and_tk/items/9dac1988c3e52dbab2dd

# 強化学習編

55　～強化学習～
表形式での強化学習を行いました．

https://qiita.com/tt_and_tk/items/065c7ef34bdbd7fc04b6

56 ～深層強化学習～
深層強化学習をしてみました．

https://qiita.com/tt_and_tk/items/f71eeb01cb12cbeff494