パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

半機械学習をする

2016-10-22 | コンピュータ
コンピュータ将棋の大会でよく作者が自分では強さがわからないといった表現をしています。

ここのところ作っているcode vsのぷよぷよ風のゲームのAI連鎖ってどうやってつくるんろう。
これといったアイデアあんまり浮かばない。とか思っていたら12連鎖とかしました。

えっなんで?

さっぱり理由がわかりません。それっぽい形を評価する関数を一個入れているぐらいです。
次の一手は全検索をかけて一番連鎖をする手は打つことはできますが、連鎖する盤面の作り方は今のところ不明です。


そのほかにも形成判断のような関数をいくつか作っています。どれが何点というバランスのとり方がよくわからなくて、
いちいちプログラム修正で確認、なかなか成果も出ずバージョン管理とかの手間も大変です。


そんな中、閃きます。テスト用にテキストファイルにログみたいなものを残したものを流用して、
ここにある程度バラけさしたパラメータとその結果を残して、自動でいいものをとりこめれば、ひょっとして機械学習なのではと思って作ってみています。
とりあえず最後のフィードバックを自前でやってみました。

やってみたのはおじゃまぷよを30個作るターン数

3年ぶりにデータベースまで作って分析してみました。一番有益だと思ったパラメータを固定にして再半学習

数時間後...いよいよ現在登録中のプログラムAとの対戦!結果は惨敗勝率2割弱

学習の方向性に問題ありです。


でも本番環境に投入!

ランクは少し下がっちゃいました。



少し時間が流れます。その間に寝ていたので頭がスッキリとして少し冴えます。



問題点は学習の対戦相手、ただあふれないように指すアルゴリズムだったので、多めの連鎖を狙えたのですが、以前作成したものの小まめの連鎖のパンチをくらってしまってました。

その後そこを修正してプログラムAと対戦させると勝率は逆転

もう一回、半学習させて一つ有益だと思われるパラメータの加点を2倍にしてみました。すると、これまでのプログラムAに対して11勝1敗。

半機械学習すごいじゃないかと本番で対戦...順位はやっぱり変わりません。壁が分厚すぎる。

本番1400試合が目の前、せいぜい4、5時間ぐらいしか直に対戦させていないのに提出したプログラムを恐ろしい勢いで対戦させています。

そんな中、名前の知っているトップランカーが参戦してキター。その分、後ろへ進軍です。総負け数なら全国2位!


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。