エンジンは同じゲームを続けます


8

自由に利用できるtscpエンジンに基本的にビットボードを追加することで、チェスエンジンのカスタマイズを書き終えたところです。今、私はそれをwinboardでテストしていますが、2台のマシンが同じゲームを何度も同じ試合でプレイすることがよくあります。少なくともランダムに等しい動きを選択させることで、ゲームにいくつかの種類を追加したいと思います。私は単純な移動順序でアルファベータ検索を使用しています。葉のノードに小さな乱数を追加して関係を壊すことを考えていますが、評価関数が使用する小さなボーナスのいくつかは3〜5センチポーンであるため、このソリューションはあまり好きではありません。だから、私は乱数を結びつけるのに十分な「部屋」を持っていません。

私のもう1つの考えは、評価==アルファを見つけたときにエンジンがランダムに選択して移動することでした。私は、検索で最後に順序付けられた移動を優先するのではないかと思うので、私はこれがあまり好きではありません。

問題は、等しいスコアのリーフノードからランダムに選択するにはどうすればよいですか?そしてまた均等に?

回答:


7

注意:

エンジンが確定的であることは良い考えです。ランダムに移動を選択する理由はありません。エンジンの強度を下げるためにそれを行うだけです。エンジンを非決定的にすると、バグのデバッグと再現が非常に難しくなります。私の推奨はそれをしないことです。

エンジンを変更しないでください。オープニングブックを使用して、ランダムに行を選択することができます。たとえば、CuteChessソフトウェアなど、多くのチェスGUIでそれを行うことができます。Arena GUIでもそれが可能です。

しかし、あなたが主張した場合:

ストックフィッシュのソースコードを見てみましょう。

 Move Skill::pick_best(size_t multiPV) {

    const RootMoves& rootMoves = Threads.main()->rootMoves;
    static PRNG rng(now()); // PRNG sequence should be non-deterministic

    // RootMoves are already sorted by score in descending order
    Value topScore = rootMoves[0].score;
    int delta = std::min(topScore - rootMoves[multiPV - 1].score, PawnValueMg);
    int weakness = 120 - 2 * level;
    int maxScore = -VALUE_INFINITE;

    // Choose best move. For each move score we add two terms, both dependent on
    // weakness. One is deterministic and bigger for weaker levels, and one is
    // random. Then we choose the move with the resulting highest score.
    for (size_t i = 0; i < multiPV; ++i)
    {
        // This is our magic formula
        int push = (  weakness * int(topScore - rootMoves[i].score)
                    + delta * (rng.rand<unsigned>() % weakness)) / 128;

        if (rootMoves[i].score + push > maxScore)
        {
            maxScore = rootMoves[i].score + push;
            best = rootMoves[i].pv[0];
        }
    }

    return best;   }
  • ストックフィッシュはマルチPVを開始します(TSCPではサポートされていないため、自分でコーディングする必要があります!)
  • 乱数を計算し、PVごとにスコアに追加します
  • 重み付けされた各PVを比較し、最適なPVを選択します

次のリンクが役立つ場合があります。

推奨事項:エンジンを弱めたい場合以外は、行わないでください。


本のアプローチはうまくいきました、ありがとう!転置テーブルと三角配列に関するフォローアップ質問を投稿しました。
nak3c 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.