昨日のアイデアを再考してみる
http://d.hatena.ne.jp/Gasyou/20120224/1330097571
とりあえず自己対戦学習で手を選択する場合の流れはこんな感じ。
- 各クライアントは個別に現局面での全指し手の評価値・指す確率を計算する。
- その後、指す確率を票数として合議サーバにどの手に何票投票という情報を送る。
- 合議サーバは票数が最大の手を選択する。
2.の部分は「評価値最大の手に一票」って実装も考えたけど、確率を元に票数を決めた方が良さそうな気がする*1ので、一度それでやってみます。
3.は票数を元にソフトマックスで手を選択する事も出来ますが、面倒なんで当面はパス。
んで、昨夜から引っかかってるデメリットについて。
メリットとして、例えば「終盤が得意だけど序盤が苦手なクライアント(評価関数)」と「序盤が得意で終盤苦手なクライアント(評価関数)」がいたとして、それぞれが合議で選ばれた別のクライアントの指し手を見て「序盤(終盤)ではこういう手が有効なんだ」と気付く事が出来ないかな、と考えています。
もちろんデメリットもあって、全クライアントが同じ棋譜から学習する事になるので、合議に必要なクライアントの多様性が失われる可能性もあります。
結局、この辺のメリットがデメリットを上回るか、って話ですが、どうなんだろうなぁ…
このままクライアント単独での学習を進めても、現状では上手く行く可能性がありません。なので、仮に合議での伸び率が悪くなったとしても、シングルクライアントでの棋力が向上すれば、トータルでは強くなる、ハズ…
ま、悩んでても無意味ですし、いっちょ実装してみますか。
*1:あくまで気がするだけ