GAの例題

 色々自主的に機械学習を遊んでると模範解答が溢れている入門課題から実践課題への間くらいの丁度いい例題が必要だとわかる。必要なステップ数は個人差があるがゼロというわけにはいかないだろう。

 ところで、先月こういう話があった。

 

 

 ということで、例題

・相手の駒20枚を自由に並び替えて、局面評価値が最も高くなるものを求めよ。

という辺りで自主課題を設定してみた。

 

itertools.permutationsをやったらフリーズした。

そうよね。 20! / 9! /2 /2 /2 /2 位の数になるもんね。

ってことで、これはGAの課題だろうってことでGAで取り組みました。

試行錯誤の結果、組み換えはorder-based two-point crossover(日本語で何て言うか知らん)、突然変異体はチャンピオンデータのランダム二点入れ替え(正式に何て名前なんだろう?)が比較的うまく動いた。

選択は乱暴だがsubprocessで動かしたやねうら王(Apery SDT5評価関数)のノード数100万制限での評価値でソートした。

ノード数制限にした理由は計算時間が予測しやすいから程度の理由で、実は同じ局面でも値が変動するのでよくない部分もある。

 

 で、ryzenで数十分程度GAさせて作ったのが以下の局面。初手16歩で玉頭致命的である。

興味ある人コピペ用→sfen psgnnplbp/1g5l1/rppppsppk/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1

f:id:the48:20180202203616p:plain

  この局面で一応私が手動で作ったものより優秀な数値は出た。しかしながら、上記の回答に対してネット上でもっと良い数値を出している方もいるので、まだまだかなぁという感じ。今のところこの程度のGA力です。