我目前正在涉足Java AI编程,并尝试AI挑战。在挑战中,我的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 *通常用于寻路,但我会修改它以达到游戏状态前瞻的目的。我很确定它会把它变成一个minimax算法。
答案 0 :(得分:2)
如果您只计算一次数组的内容并进行计算 对于每个单元格而言,就像检查几个相邻单元格中的敌人一样简单 相对于你的时间限制,100x100阵列根本不起作用。
根据你帖子中的信息,这对我来说听起来不错。