Java 棋盘游戏AI中的对象池

Java 棋盘游戏AI中的对象池,java,algorithm,artificial-intelligence,object-pooling,Java,Algorithm,Artificial Intelligence,Object Pooling,我被要求创建一个棋盘游戏AI(该游戏非常类似于跳棋)。到目前为止,我用一块比特板完成了NegaScout的基本实现,在5秒内,我可以达到10层半深。游戏的类别在于完成时间。换句话说,在整个宇宙中,几乎有比原子更多的运动。NegaScout帮助我减少了这个数字,但我仍然需要处理大量可能的动作 我的电路板已经是静态的,具有do/undo功能。但对于每个新的板卡配置,我需要生成所有允许的移动,即使我的类很简单,也需要花费大量时间: public class Move { private fin

我被要求创建一个棋盘游戏AI(该游戏非常类似于跳棋)。到目前为止,我用一块比特板完成了NegaScout的基本实现,在5秒内,我可以达到10层半深。游戏的类别在于完成时间。换句话说,在整个宇宙中,几乎有比原子更多的运动。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)
}
所以我有两个问题

FIRST=对象池(移动中)是否会提高我的性能

第二个=如果(第一个),那么您能告诉我如何实现它吗?(链接和小代码示例将非常感谢!!)

对象池(移动中)是否会提高我的性能

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

如果您运行在一个内存充足、垃圾收集器性能良好的平台上,那么丢弃一个对象并创建一个新对象通常比尝试回收要快。这实际上取决于初始化对象的成本

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

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

参考:


您是否已经研究过对象池?我相信你会更快地得到答案。第一个问题的答案是肯定的,对象池总是用来提高性能。第二个问题的答案是否定的,鉴于您的代码片段有限,即使它可以在您的项目上实现,我们也无法告诉您posted@Josh我不熟悉对象池,所以我想问一个问题,让在这个问题上比我了解更多的人告诉我它是否适用于我的问题,如果是这样的话,在这个问题上给我很好的参考。@ControlAltDel如果可以帮助你的话,我可以把代码放在移动生成的地方?那还是有点傻。一个快速的谷歌搜索应该能回答你的第一个问题,而且,就像ControlAltDel已经证明的那样,任何人都很难在不查看更多代码的情况下直接将其应用到你的案例中。你应该研究一下自己,把你能做的应用到你的项目中,然后带着具体的实施问题回来。我的电脑是i5 3.2ghz/8gig ram/ubuntu 12.04/jdk 1.6。就像我说的,到目前为止,我做了10次上下半场,比赛平均每半场有20次可能的移动,所以10^20次可能的移动。这就是我现在能给你的。如果你想要更多的信息,那就需要更多的时间。这告诉我,记忆不太可能是个问题。等式的其余部分取决于程序的细节。我的建议仍然是“先分析一下”。我会照你说的做,分析一下我的项目,我希望得到一个明确的答案,但和很多事情一样,这并不容易。感谢您指出该解决方案的一些潜在问题!