ボードゲームAIの作成を依頼されました(ゲームはチェッカーにかなり似ています)。これまでのところ、ビットボードを使用した NegaScout の基本的な実装を完了し、5 秒以内に 10 ハーフプライの深さに到達できます。ゲームのカテゴリはEXPTIME-completeにあります。言い換えれば、宇宙全体で原子よりも多くの動きがあります。NegaScout のおかげでこの数を減らすことができましたが、まだ多くの可能性のある動きに対処する必要があります。
私のボードはすでに do/undo 機能で静的です。しかし、新しいボード構成ごとに、許可されているすべての動きを生成する必要があり、クラスが次のように単純であっても、多くの時間がかかります。
public class Move
{
private final byte startIndex;
private final byte endIndex;
private byte endPawn;
public Move(final byte start,final byte end){startIndex = start; endIndex = end;}
public final void setEndPawn(byte pawn){endPawn = pawn;}
//OTHER FUNCTIONS.. (ONLY FOR DISPLAY/DEBUG)
}
そこで、質問が 2 つあります。
FIRST = オブジェクト プーリング (移動時) はパフォーマンスを向上させますか?
Second = if(FIRST) then 実装方法を教えてもらえますか? (リンクと小さなコード サンプルは本当にありがたいです!!)