1

我只想知道街机/策略游戏中使用的各种 AI 算法或逻辑,用于为单个单位寻找/选择最佳攻击目标。

因为,我必须编写一个小的 AI 逻辑,其中他们的一组单位被各种油轮攻击,所以我被困在获得更好的逻辑或算法来为单位选择一个最佳目标来攻击油轮。

可用数据有:油轮位置、范围、生命值、伤害。

请任何人知道解决这个问题的最合适的算法/逻辑,尽早回复。

在此先感谢,拉马南德。

4

3 回答 3

6

我将以类似于RPG游戏玩家的角度来表达这一点:

为了对其他敌人造成致命一击,你会先打倒哪个角色?打倒队伍的治疗者是常识,因为他们可以治愈团队的其他成员。一旦治疗者离开,团队需要使用药物 - 供应有限 - 一旦药物用完,派对就搞砸了。

类似的逻辑也适用于坦克计划。在你的 AI 中,你需要弄清楚哪些坦克为用户的舰队提供了最大的力量和支持,并首先消灭它们。不要专注于任何其他坦克,除非它们对实现目标至关重要:首先杀死团队中最强大、最有用的成员。

因此,我将分解我认为最有可能与您的坦克属性有关的内容。

RANGE: Far range tanks can hit from a distance but have weak STRENGTH in their attacks.

TANKER POSITION: Closer tanks are faster tanks, but have less STRENGTH in their attacks.  Also low HITPOINTS because they're meant for SPEED, and not for DAMAGE.

TANKER HP: Higher HP means a slower-moving tank, as they're stronger.  But they won't be close to the front lines.

DAMAGE: Higher DAMAGE means a STRONGER tank with lots of HP, but SLOWER as well to move.

所以如果我是你,我会首先关注那些拥有最高生命值/最强攻击的坦克,然后是最近的坦克,然后再担心远程坦克——在他们进入之前你不能对他们做任何事情你的攻击半径:P

该算法将非常简单。如果你有一个队伍中的坦克列表,为他们创建一个自定义排序(使用 CompareTo)并按等级将具有最高可能 HP 的坦克排序到列表顶部,其次是坦克,重点是速度,然后范围。

然后遍历列表中的每个项目。如果可以攻击 Tank(0),则攻击。如果没有,请转到 Tank(1)。

于 2010-06-20T20:33:55.597 回答
4

目标是一次只攻击一个对手,并且一次最多接收一个敌人的火力(尽管最好没有)。

理想情况下,你会躲在掩体后面攻击坦克,并在他们的侧翼发动突然袭击。这使您可以一次摧毁一个坦克,而不会受到火力或几乎没有火力。

如果你没有掩护,那么你应该以敌人为掩护。移动到将敌人置于敌人身后的位置。这也提高了你击球的机会。

您还可以使用范围来减少来自多个敌人的火力。撤退,直到你只在一个敌人的范围内。

如果敌人都可以向你开火,你想攻击一个目标,直到它不再构成威胁,然后再攻击下一个目标。目标是尽快减少您收到的火量。

如果多个敌人可以同时向您开火,并且您可以选择目标,则应该向可以以最低成本减少最多伤害的目标开火。只需将生命值除以伤害,然后攻击结果最小的那个。您还应该计算任何其他相关统计数据。射程可能对您和敌人造成同等影响,但考虑到机动躲避火力的能力,距离较近的敌人更有害,应该在计算中给予一定的重视。

如果移动会降低被击中的可能性,那么你应该继续移动,通常是绕着你的对手盘旋以留在他们的侧翼。

团队战术主要包括侧翼和转移。

弹药情况如何,是否有可能错过固定目标?

于 2010-06-21T17:08:09.353 回答
1

根据您的评论,听起来您已经有了一些特别的规则或启发式方法,可以根据您自己的衡量标准为您提供大约 70% 的成功率,并且您希望进一步优化这一点以获得更高的胜率。

作为一种通用的解决方法,我会使用爬山算法。由于我不知道你当前算法的细节导致 70% 的成功率,我只能抽象地描述如何适应爬山来优化你的算法。

爬山的一般原则如下。希望您当前算法的某些数字参数的微小变化会导致结果成功率的微小(希望是线性)变化。如果这是真的,那么您将首先参数化您当前的规则集——这意味着您必须在当前算法中决定可以调整和优化哪些数字参数以实现更高的成功率。一旦你决定了它们是什么,学习过程就很简单了。从您当前的算法开始。生成各种新算法,其参数比以前略有调整,并运行您的模拟以评估这组新算法的性能。选择最好的作为您的下一个起点。重复这个过程,直到算法不能变得更好。

如果您的算法是一组 if-then 规则(这包括规则匹配系统),并且提高性能涉及重新排序或重组这些规则,那么您可能需要考虑遗传算法,这有点复杂。要应用遗传算法,您必须定义变异和交叉运算符,以便单一应用变异或交叉导致整体性能发生微小变化,而多次应用变异和交叉导致整体性能发生较大变化你的算法的性能。我不是这个领域的专家,但是当你在谷歌上搜索“决策树上的遗传算法”时应该会出现很多问题。要避免的陷阱是,如果您只是考虑为变异算子交换决策树中的分支,则单个应用程序可能会修改决策树的根,从而产生巨大的性能差异。这通常会为遗传算法增加太多噪音,

请注意,这两种方法是非常流行的用于学习或改进当前算法的 AI 方法。您将进行所有这些模拟和离线学习。然后,您只需部署生成的学习算法。

于 2010-06-23T06:54:15.320 回答