我被要求创建一个棋盘游戏 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 你能告诉我如何实现它吗?(链接和小代码示例将非常感激!!)