私は3D Tic-Tac-Toeゲームを設計しており、Minimaxアルゴリズムがどれくらい深く進むことができるかの限界となる時間を見いだしています。深さ6まではほとんど時間的に重要ではありませんが(< 1秒)、深度が深ければ時間がかかります。Minimaxアルゴリズム内のスレッディング
>Depth 7 = 6 seconds
>Depth 8 = 49 seconds
>Depth 9 = 314 seconds
私は、より高い深度をチェックする時間がありませんでした。最大深度は22で、AIはMove 1からのすべての可能なゲーム状態を分析し、決してユーザーに勝つことはありません。
Minimax関数でスレッドを実装したいのですが、スレッディングに比較的新しいスレッドです。
//player is -1 for human, +1 for AI
function minimax(board_state, depth, player)
if depth <= 0 or board == full //full board means no further states
return score * player
bestScore = -1000;
foreach possible move
if valid move
/* */
make_move()
bestScore = max(bestScore, minimax(board_state, depth-1, -player)
undo_move()
/* */
return bestScore
私は/* */
間のビットは、新たなスレッドです何かをしたいのですが、問題が発生する:私のミニマックス関数は以下のようであってもdepth = 1
で、それは8つのスレッドです。 depth = 8
については、スレッド数は16534863です。スレッドの制限は何ですか?それは私のCPUが持っている物理的なコアの数にリンクされていますか?
C++にはどのような質問が関係していますか? –
私のプログラム自体はC++になっています。 – gator
[スレッドプール](https://en.wikipedia.org/wiki/Thread_pool)の実装を見てください –