jj1guj / dekunobou

Othello AI using GA
https://dekunobou.jj1guj.net/
MIT License
10 stars 1 forks source link

implement XOT at GA mode #36

Open jj1guj opened 8 months ago

jj1guj commented 8 months ago

交叉後に交叉前と交叉後で複数回対戦させて勝率を計算して遺伝子を置き換えるかどうか判定しているが、現在その対戦は初期局面から開始している。 しかしながら現在の使用だとどの対局も同じ進行になるという懸念がある。この状況は汎化性能を測りたいと要望がある中で好ましくない。そこで、XOTという序盤8手の互角局面から対局を開始するルールを導入する。対局時は同一局面で先後両方を持って打たせるようにする。 同時に、数千局単位でXOTの初期局面集があるとのことなのでその調査も行う。

https://othelloq.com/tweet/anomalous-othello

jj1guj commented 7 months ago

以下のリンクからXOTの初期局面集をテキストファイル形式でダウンロードできることがわかった。 https://berg.earthlingz.de/xot/download.php?lang=en 棋譜形式は一般的な棋譜形式なので初期局面の設定は board.py#L8 を参考にすれば良さそう。

jj1guj commented 7 months ago

フローは以下の通り。

jj1guj commented 7 months ago

https://github.com/jj1guj/dekunobou/issues/36#issuecomment-1793438069

GAモード開始時に初期局面集のファイルを読み込み、棋譜をパースして0~63の座標に変換する。

どうせなら初期局面の生成までやってあげたほうがいい気がしてきたので初期局面の生成までやってBoardクラスのvectorを保持してランダムに初期局面を選択するようにする

jj1guj commented 7 months ago

とりあえず実装できたので動かして試してみる https://github.com/jj1guj/dekunobou/commit/bed16d98ddf9095a1c7bbd9ca39b6b72587bd40b

jj1guj commented 7 months ago

581世代目でSEGVで落ちた… 初期局面のランダム選択の部分が一番怪しそうなのでそこを中心に調査する。

jj1guj commented 7 months ago

初期局面のランダム選択の部分でstd::mt19937を使用(範囲は[0, 0xffffffff])してもSEGVで落ちた さらなる解析が必要そう

jj1guj commented 5 months ago

なんか動いた ulimit -s unlimitedしてなかったのが原因っぽい? これ忘れがちなので起動時に勝手に叩いてくれるようにしたいがsudo権限必要だしセキュリティ的によくなさそう…

jj1guj commented 5 months ago

選択パートにおいて探索深さを3にして対局させるように設定し評価関数の生成を試みた。 途中経過ではあるが1世代目と1510世代目で変化が見られない。 原因の調査が必要 out_1 out_1510

jj1guj commented 5 months ago

置き換え時の勝利数と閾値をみたところ、閾値に対し勝利数が少ないため置き換えが進まないことがわかった。 そこで閾値を小さくして再度試みる

jj1guj commented 4 months ago

よくよく考えたけど入力局面を回転させたりしてなくて初手f5固定なのがよくないような気がしてきた