これは私の最初の質問です。何か間違ったことをした場合は教えてください...
私は現在、Java でドラフト ゲームを作成しています。実際、AI 以外はすべて機能します。AI は現在、ミニマックスとアルファ ベータ プルーニングを使用するシングル スレッドです。このコードは機能しますが、非常に遅いと思います。ゲーム ツリーの深さは 5 しかありません。
- メインボード、深さ (0 から開始)、および最大深さを受け取る関数があります。この maxdepth で停止し、ボード上に最も多くのピースがあるプレーヤーの値 (-1、1、または 0) を返し、再帰呼び出しを終了します。
- maxdepth にまだ達していない場合は、すべての可能な動きを計算し、それらを 1 つずつ実行して、何らかの方法で変更をメインボードに保存します。
- また、私はアルファ ベータ プルーニングも使用します。たとえば、プレーヤーを勝利に導く手が見つかった場合、次に考えられる手は気にしません。
- そのメインボードの状態から次の一連の動きを再帰的に計算します。再帰呼び出しから抜け出すときに、これらの変更を (ポイント 2 から) 元に戻します。これらの再帰呼び出しによって返された値を保存し、それらに対して minimax を使用します。
そんな状況ですが、いくつか質問があります。ゲーム ツリーを深く掘り下げたいので、動きの計算にかかる時間を短縮する必要があります。
- AI の可能な動き (たとえば、AI が選択できる動き) の値が常に 0 であることは正常ですか? それとも、再帰をさらに深く掘り下げることができれば、これは変わりますか? 現時点では、再帰に 5 深さ (maxdepth) しか入れられないため、そうしないと時間がかかりすぎるためです。
- 役に立つかどうかはわかりませんが、この再帰をマルチスレッド再帰に変換する方法を教えてください。これにより、作業時間をある値で割ることができると思います...
誰かがこれで私を助けてくれますか?