A.I. AN shogi ver.1アピール文章
兵頭優空
2021/3/30作成
2021/4/20改訂
◆初めに
A.I. AN shogi ver.1は汎用的手法とその弱点を補完する専用手法の組み合わせによってある程度の強さのA.I.を作ることが目標の(そして私の実験台の)A.I. ANシリーズ(現在非公開)の将棋バージョンです。
◆使用したライブラリ
python-shogiを使用しています。
合法手生成などの将棋のルールに関することや、プロトコルに対応した通信のために使用しています。
◇選定理由
・私は将棋に関する知識があまりないので、合法手生成や盤面管理等々の処理はライブラリに任せる必要があったから。
・通信プロトコルに関する部分も開発期間の短縮のために省きたかったから。(開発開始は2020年11月ごろ)
・私が使えるプログラミング言語はPythonのみなので、デバッグ等の観点からなるべくPyhtonで書かれているライブラリの方が望ましかったから。
・余計な機能はいらなかったから。
・たまたま探していた時に見つけたから。
◆特徴
・ニューラルネットを使用していること。(Kerasとかは使用していない)
・劣化版原始モンテカルロ探索(以後MCS)も使用していること。(MCTSは作るのが大変そうだったのと技術不足、αβ法はマシンパワーと技術不足で断念)
・残り持ち時間やターン数等の条件で上記の異なる2つのA.I.を切り替えながら戦うこと。(ニューラルネットが非合法手を打った場合、残り持ち時間やターン数の条件でランダムかMCSどちらか代理で手を打つ)
・ニューラルネットの学習(パラメーター更新)に遺伝的アルゴリズムを使用している。(A.I. ANシリーズの伝統)(後詳細な解説)
・少ないリソースでもなるべく力を発揮できるように設計されていること。(理由は私がまだ中学生で財力がないため)
・将棋についてルール以外知らない状態からニューラルネットは学習していくこと。(そもそも私は将棋初心者なのでやりたくてもできない)

◆目標とか
目標は、相手に瞬殺されないようにすること。
勝つことは目標というよりかは願い事に近い。

◆ニューラルネット
ニューラルネットは2021/4/18より前のバージョンは方策を出力していたが、これだとプログラムの都合上合法手を指すことから学習しなければらななかった。
過去の実験では多少ルールを学習していたが、非合法手を指すことがかなりあり、微塵も強くなっていなかった。
そこで、ニューラルネットに方策ではなく価値を出力させることにした。
具体的には、あまりニューラルネットのパラメーターをつつきたくなかったので、方策ニューラルネットに着手の価値を出力させる改造をした。(つまり、学習したパラメーターはそのまま流用できる)
これによってpython-shogiが合法手と判定している着手のみするようになった。

◆学習アルゴリズム解説
1, リセット
ニューラルネットの変数定義をすると、プログラムが対応した初期集団の生成を行う。
ニューラルネットの規模の変更をしたら手動でモデルファイル(パラメーターを保存しているファイル)のリセットをする必要がある。
2, 対局で適応度の測定
各個体ごとに、3局ずつ対ランダム, 後手番, 平手で対戦を行う。
勝ち+1000, 負け-100, ターン数ごとに-0.1点でスコア(適応度)を算出する。(数字は適当、必要なのは個体の相対評価なので)
例:A.I.の勝ちで87ターン試合が続いた場合
→1000 + 87 * (-0.1) = 991.3
でスコアは991.3となる。
3, ソート等々
スコアの高い順にソートし、トッププレーヤーをfather、二番プレーヤーをmotherに代入する。
カウンターに+1し、学習係数的な値(以後α)等の調整を行う。
4, パラメーター更新と保存
スコアが全個体全く同じならすべての個体を突然変異(すべて　　　　　　　　のパラメーターを完全ランダム化)させる。
そうでなければ、各個体ごとに10%抽選をし、当選したらその個体を突然変異させ、さらにそうでなければ、パラメーター毎にfather 2/3、mother 1/3で当選した方の値+乱数(α, -αの範囲の浮動小数点型)という計算を行う。
すべての個体のパラメーター更新が終わると、fatherをモデル　　ファイルに書き込む。
◇学習の全体の流れ
最初に1を1回行い、その後は学習回数分2～3を繰り返す。
学習が全くうまくいってなければリセット機能を使い、リセットする。
◆その他いろいろ
・ここに書かれているのは2021/4/21ごろの情報なので、今の学習が全然上手くいってない状況が続けば変更されるかもしれない。(そうなったら修正版を提出するかもしれない)(そうなれば保険として学習させている小さいモデルで出場するしかない)
・探索は終局までプレイするので序盤は遅いが、終盤戦になるほど早くなる。(はず)
・探索時間削減のため、長すぎる(175ターン以上)プレイアウトは強制終了するので序盤の探索は100%時間の無駄になっている。
・開発者が1人なのは私に友達がいなかったから。(もう次は三年生になるのに)
・春休みが終わりそう(もうすぐ学校が始まる予定)なので気分最悪でモチベーションが大幅ダウンしているので開発が間に合わないかもしれない。(学校行きたくない)