リバーシ(終盤読み) その2

前回に引き続きリバーシの終盤読み。前回時点で約280秒と酷い状況ですが、引き続き改善していきたいと思います。

着手可能位置取得処理の改善

改善前の着手可能位置取得処理はこんな感じ。

やっていることとしては64箇所全てに対して1つずつ置けるかどうかを判断している、というもの。
これをこちらの記事を参考に、64箇所を一気に計算するように変更。

# 対象読者 「**ビットボード初心者がオセロをさくっと実装してみること**」に重点を置いてます (筆者もそれです) "ビットボード"を知らない人は、まず以下あたりを読むと良いかもしれません [ビットボードの凄さをざっくりと解説して...

参考にして作り直した結果が下のコード。

alphabetaでの重複処理の削除

前の記事でalphabeta関数の中身をお見せしていますが、同じ盤面で着手可能位置取得を2回行っていたのを1回に修正。
修正後のソースはこちら。

単純に関数序盤での終局判定用の着手可能位置取得時に結果を覚えておいて、盤面展開時にも使用します、という対応。

この時点での処理速度等…

この時点での処理速度等ですが、以下です。

score internal leaf total time(sec) knps
この記事の対応前 38 299,002,385 113,304,014 412,306,399 279.929 1,472.90
この記事の対応後 38 299,002,385 113,304,014 412,306,399 93.848 4,393.34

約280秒→約94秒と大幅改善!

スポンサーリンク

フォローする

スポンサーリンク