我目前正在涉足Java编程,并尝试一个人工智能挑战。在挑战中,我的AI被给予2秒来回应新的游戏状态。如果超过这两秒而没有得到响应,我的AI就会被没收。游戏由一个有目标和敌人的网格组成,每个敌人都是由游戏产生的独立AI。我实施了一个标准A*,以找到最近的可用目标。
我希望我的A*算法能增加敌人附近可能被证明是危险的方块的成本,从而避免危险的路径。我正在考虑一个二维阵列,包含每个方格的估计生命损失,仅限于在每个敌人的2个方格内计算(~5x5)。每个回合,每个敌人,这个阵列将有一个5x5平方设置为0,并重新计算。
假设我写的代码只做它必须做的事然后继续前进.一个介于20x20和100x100之间的二维数组会显着地影响执行时间吗?在A*算法中,每平方估计威胁的二维数组是否是一种计算成本的好方法,以避免敌人?
更新:我让它运行得非常完美。我使用的成本函数:
For each enemy
Calculate manhattan distance
If 0 or 1, cost += absolute(enemy health - health) / 5
Else if 2, cost += absolute(enemy heath - health) / 10
Else cost += 0使用它,我看到了一些非常令人印象深刻的寻路和移动;当没有其他动作达到目标时,机器人通常会承担计算出来的风险,但基本上避免了其他敌人。添加启发式的性能成本是多么微不足道,给我留下了深刻的印象。这并不是一个完美的解决方案,但它告诉我,A*是多么健壮。
A*通常用于路径查找,但我将修改它以实现游戏状态的前瞻性。我很确定这会把它变成一个极小极大算法。
发布于 2014-03-19 00:11:38
如果您只计算数组的内容一次,并且每个单元格的计算很简单,比如检查几个相邻的单元格是否有敌人,那么100x100数组与您的时间限制无关。
考虑到你帖子中的信息,这对我来说是个好主意。
https://stackoverflow.com/questions/22493120
复制相似问题