時代は人間の戦略通さないやり方だよな!
そう思ってオセロai計画を始動した訳です。
計画の中身は以下の通り
乱数を用いてどんどん試合を進めながらその時の盤面と置いたマスなどを記録しておく
試合が終わったらその試合結果に応じて選んで来たマスをその時の盤面ごとに評価していく
最終的に勝ちやすいマスってのが分かるっていう寸法だ
だが、この場合の数がとんでもなく多い。
ざっと10^50ぐらいはあるようだ。
普通にやってもたどり着かないどころかメモリ不足で死ぬのでは?
解決策としてデータ全体を一つのファイルにして全部同時に読み込んでしまうのはしないで、ファイル名を盤面変数で定めて中身を置けるマスの評価の数字だけ入れようということにした。
これらを実装するために、その時置けるマスのリスト変数と置いたマスの変数、リストのリストで管理してた変数から[. ]を取っ払い-1を-に取り替えることで出来た64字のファイル名の変数を全ターン毎にまとめたリスト変数を用意した。
試合終了したら以下の処理をする
ファイル名+.txtを開く
開けなかったら置けるマスリストの長さ分だけ0 を並べたものを作る
数字と空白で出来たデータをリストにする
置いたマスが置けるマスリストの何番目にあるか調べて、その数字を1足したりする(正確にはターン×試合結果(それぞれ白黒を意味する1と-1のどちらかが入っているけど意味ない気がする))
出来たものをまた文字列に戻してファイル名+.txtに書き込む
というのを毎ターン分やる
ってのをやってたら問題が発生した。hddの通信速度に引っかかってクソ遅くなった
ssdにするのも手だなとは思うけど一つのファイルにして辞書変数にするのも良いんだろうか?
一晩放置したら10mb以上100万ファイル程のデータベースが出来上がっていたが、中身を確認すると学習された感じでは全然無かったという話
ソース