私の以前の答えを詳しくカバーしてくれた@Phononに感謝します。ポイントをもう1つ追加します。時間コントロールです。
決定論的な時間制御はノードの数のみですが、これは一般的ではありません。より一般的な時間制御- 固定秒数またはゲーム時間は、一般的に確定的ではありません。
例を試してみましょう。ターミナルでストックフィッシュを実行します。タイプ:
movetime 20000に移動
このコマンドは、20秒後に移動するようにエンジンに指示します。私の結果:
info depth 23 seldepth 32 multipv 1 score cp 6 upperbound nodes 24325860 nps 1216171 hashfull 999 tbhits 0 time 20002 pv g1f3 d7d5
bestmove g1f3 ponder d7d5
移動は1.Nf3でした。次に、私はストックフィッシュを殺して、新しいものを始めました。もう一度、20秒。私は得ました:
info depth 23 seldepth 32 multipv 1 score cp 20 nodes 26185280 nps 1309067 hashfull 999 tbhits 0 time 20003 pv d2d4
bestmove d2d4 ponder g8f6
1.d4です!同じ位置、両方とも20秒で検索!
見える?どちらも20秒で移動しましたが、Linuxオペレーティングシステムの変動により、2回目の実行ではより深い検索が行われました(26185280> 24325860)。
この小さな実験はマルチスレッド化されていなかったことに注意してください(スレッド数= 1)。マルチスレッド化により、物事はさらに非決定的になります。
ストックフィッシュは、Google AlphaZeroの試合で1動きあたり1分が与えられました。スレッドの数は64 でした。試合におけるストックフィッシュの決定は、おそらく決定論的ではありませんでした。