-2

我被要求创建一个棋盘游戏 AI(该游戏与跳棋非常相似)。到目前为止,我用一个位板完成了 NegaScout 的基本实现,并且在 5 秒内,我可以达到 10 个半层深度。游戏的类别在于 EXPTIME-complete。换句话说,整个宇宙中的运动几乎比原子还多。NegaScout 帮助我减少了这个数字,但我仍然需要处理大量可能的动作。

我的板已经是静态的,具有执行/撤消功能。但是对于每个新的板配置,我都需要生成所有允许的移动,即使我的课程很简单,它也会花费很多时间:

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)
}

所以我有两个问题。

FIRST = 对象池(在移动中)会提高我的性能吗?

Second = if(FIRST) then 你能告诉我如何实现它吗?(链接和小代码示例将非常感激!!)

4

1 回答 1

1

对象池(在移动中)会提高我的性能吗?

对象池通常用于尝试* 以提高性能。它是否真的能成功提高性能完全是另一回事。

如果你在一个拥有大量内存和一个不错的垃圾收集器的平台上运行,那么丢弃一个对象并创建一个新对象通常会比尝试回收更快。这实际上取决于初始化对象的成本。

如果您的平台速度较慢或内存有限,则等式可能会倾向于对象池。但是,缺点是内存池会使您的代码更加复杂。此外,您需要防止池成为一种内存泄漏。

总而言之,我建议不要实施内存池,直到你得到一些硬分析数据表明它可能会有所帮助。

参考:

于 2012-06-21T14:20:12.667 回答