TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【dlshogi】軽量価値ネットワーク その4(駒得評価関数)

前回、Stockfishの探索部の移植をビルドできるところまで行った。
いくつかあったバグを修正して、とりあえず対局できる状態にできた。

駒得評価関数

駒に以下の通り評価値を付けただけの評価関数である。
序盤では差がつかないため、評価値0になる。

constexpr Value PawnValue = 90;
constexpr Value LanceValue = 315;
constexpr Value KnightValue = 405;
constexpr Value SilverValue = 495;
constexpr Value GoldValue = 540;
constexpr Value BishopValue = 855;
constexpr Value RookValue = 990;
constexpr Value ProPawnValue = 540;
constexpr Value ProLanceValue = 540;
constexpr Value ProKnightValue = 540;
constexpr Value ProSilverValue = 540;
constexpr Value HorseValue = 945;
constexpr Value DragonValue = 1395;

NPS

1スレッドで、200万NPS、
16スレッドで、2200万NPSくらいである。

強さ

駒得評価関数で、将棋所に標準で添付するLesserkaiと対局して、勝てることを確認した。


Aperyのコードとの違い

はじめ頭金で1手詰めもできないため原因を調べたら、Aperyでは、NonCaptureMinusProで、駒打ちを生成しないないことが原因であった。
既存のAperyのmovePicker.cppのソースでは、MovePickerのQuietInitで、NonCaptureMinusProとは別に、generateMoves<Drop>を別に呼び出していた。
やねうら王に合わせて、NonCaptureMinusProで、駒打ちも生成するようにした。

まとめ

Stockfishの探索部を移植して、駒得評価関数で対局できるところまで実装した。
駒得評価関数でもLesserkaiに勝てることを確認した。

チェス由来のコードが残っている箇所と、探索部のコードを理解しきれていない部分があるので、修正しながら理解していくつもりである。