-2

ボードゲーム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 実装方法を教えてもらえますか? (リンクと小さなコード サンプルは本当にありがたいです!!)

4

1 に答える 1

1

オブジェクト プーリング (移動時) によってパフォーマンスが向上しますか?

オブジェクト プーリングは、多くの場合、パフォーマンスを改善するために *使用されます。実際にパフォーマンスの向上に成功するかどうかは、まったく別の問題です。

十分なメモリと適切なガベージ コレクターを備えたプラットフォームで実行している場合、オブジェクトを破棄して新しいオブジェクトを作成する方が、リサイクルを試みるよりも高速になることがよくあります。オブジェクトを初期化するのにどれだけコストがかかるかによって異なります。

プラットフォームが遅い場合やメモリが限られている場合は、オブジェクト プーリングが有利になる可能性があります。ただし、メモリ プールによってコードが複雑になるという欠点があります。さらに、プールが一種のメモリリークになるのを防ぐ必要があります。

全体として、メモリ プーリングが役立つ可能性が高いというハード プロファイリングの数値が得られるまでは、メモリ プーリングを実装しないことをお勧めします。

参照:

于 2012-06-21T14:20:12.667 に答える