【问题标题】:AI for a Final fantasy tactics-like game最终幻想战术类游戏的人工智能
【发布时间】:2011-03-09 04:15:00
【问题描述】:

我正在按照最终幻想的战术实施一个基于小网格、基于回合的策略。

您对我如何处理目标选择、移动和技能选择过程有任何想法吗?

我正在考虑断开决策,但这三个决策在很大程度上是相互关联的。 (例如,除非我知道要攻击谁,以及我将使用的技能范围有多大,否则我无法决定移动到哪里,反之亦然,除非我知道要攻击多少回合,否则我无法决定攻击谁将带我到达每个目标)

我想转向一个统一的系统,但是尝试以类似于杀戮地带 1 AI 的方式使用的潜在实地研究中的东西让我陷入了局部最大值。

=== 更新 1

我目前正在尝试使用潜在领域/影响图来生成我做出决策的数据。

我不知道如何处理拥有许多技能,以及不会造成伤害而是增益/减益或改变世界的技能。

其他人建议使用目前在围棋游戏中使用的蒙特卡洛树搜索。

我相信我的演员将使用的空间并不适合它,因为游戏中的许多动作都不会导致你可以攻击和影响世界的位置(我在一个比最终更大的世界奇幻战术)

在最终幻想战术中它可能会成功应用,尽管分支因素比 9x9 围棋要大得多(据我了解)

===

在此先感谢您,Xtapodi。

ps.1 - 一个问题是,要准确地知道敌人有多远,我需要找到他的路径,因为虽然敌人在附近,但一个不可逾越的悬崖可能会将我们隔开,需要 4 个转弯才能绕过。或者更糟的是,一个单位挡住了路,比如说一座桥,所以实际上没有办法到达他。

【问题讨论】:

    标签: game-ai


    【解决方案1】:

    我使用的一种方法是做一个两遍系统。

    首先,找出你的单位可以去哪里。使用 A* 或其他标记地形,看看单位本回合可以移动多远。

    一旦你知道了这一点,就可以逐步了解你可用的战术(近战攻击、治疗友方单位等),并为该战术的所有可用用途分配一个适应度函数。如果您通过标记的地形,您可以非常快速地确定您可能的战术空间是什么。

    这会为您提供一个可用战术列表及其每个动作的适应度函数。选择最好的一个或从顶部随机化。如果没有任何可用的战术,请重复该过程,将地形标记为两步,依此类推。

    我所说的适应度函数是决定在某个单位或位置上执行策略的“价值”。例如,您的“治疗友方单位”战术决策阶段可能会遍历所有友方单位。如果一个友方单位在范围内(即,可以从您的单位可以到达的位置到达),将其添加到可能的战术列表中,并给它一个健康等级,例如,100 *(1.0 - 单位健康),其中单位生命值范围从 0 到 1。因此,将一个角色的生命值恢复到仅剩 10% 的生命值将值 90 点,而一个仅下降 5% 的单位将值 5,并且该单位甚至不会考虑治愈未受伤的单元。特殊单位(即保持胜利条件所需的“保护boss”场景单位)可以被赋予更高的基数,以便他们得到友军单位的更多关注。

    类似地,您的“近战攻击”决策阶段将遍历所有可到达的敌方单位,计算可能造成的伤害,并将其与单位的生命值进行比较。给每个单位一个“攻击意愿”,然后将它乘以你可能做的剩余生命值的百分比,你就有了一个非常详细的适应度函数,它有利于尽可能消除单位,但仍然追求高价值目标。

    使用这样的过程,您将获得一个选项列表,例如“移动到位置 A 并治疗友方单位 B:50 分”、“移动到位置 C 并攻击敌方单位 D:15 分”等。突然之间,选择战术真的很容易。

    可以通过将策略的适合度乘以实施该策略所必须采取的路径的适合度来添加更多细节。例如,如果你为了治疗一个友方单位而必须移动到的地方使你处于严重危险之中(例如,站在熔岩空间或其他地方),你可以通过将该策略的适用性乘以.2 左右,以便单位仍然可以考虑它,但前提是它真的很重要。所有这一切都需要编写一个算法来评估给定位置的适合度,并且可以像预先计算的“地形可取性”数字一样简单,也可以像维护敌方单位的“威胁图”一样复杂。

    当然,最困难的部分是找到使引擎智能的正确措施。但这是系统中有趣的部分,需要调整。

    【讨论】:

    • 非常感谢cc您的详细回复。我经常接近你所描述的,一个伟大的见解是,如果没有发现任何有趣的东西,你会扩大搜索空间。您将如何考虑没有提供战术优势的行动的立场。例如,您有一个骑士和 2 个弓箭手,骑士的冲锋将远远超出弓箭手对模型的帮助范围。反之亦然,如果您将健身添加到只是站在某个地方,那么您将如何决定扩大您的搜索空间。
    • 通过适应有利于您想要的行为的地形来处理它。对于近战战士来说,靠近具有较高适应度的敌人的位置会使战士更靠近,但添加“靠近友军单位”会使您的单位保持在一起。考虑到足够的健身考虑,即使您不向前看,您的单位也会变得聪明。使用这个系统也很容易放弃特定的战术。如果您的关卡带有升高的吊桥,请为降低机制的路径添加适应度函数。
    【解决方案2】:

    一个好问题,答案可能无处不在。就个人而言,我对此没有太多经验,但我会围绕概念而不是距离制定策略。

    您将为每个 NPC 创建一个状态机。它将通过某些设置来预测要攻击的角色。

    例如,NPC 会被标记为攻击最弱或攻击最强或攻击最受伤。然后我会尝试定位它们,以便它们可以损坏所需的目标。

    如果你也有治疗者,你可以反过来对治疗者目标做同样的事情。

    目标更改也将是该系统的重要组成部分。所以你会想考虑一下。一个简单的版本是重新评估改变目标给定百分比的转弯。

    最后,我会在系统中添加随机机会。例如一个字符可以设置如下

    攻击最弱 .25 攻击最强 0.50 攻击最受伤的 .25

    更改目标 .1

    什么时候该进攻了。您从 0-1 生成一个随机数。如果它在你之下改变目标,你可以通过生成另一个随机数来攻击目标来改变目标。

    您可以通过增加攻击模式百分比来开始将距离因素考虑到您的系统中。 例如,如果需要 3 个回合来攻击最受伤的人。通过将该值除以 3 并将差值分配给其他两种可能性来降低它的目标百分比。

    【讨论】:

    • 感谢 madmik3 的精彩输入。我喜欢你提出的许多想法,我目前的心态是基于一种贪婪的算法,总是在本回合选择最佳行动,从玩家的角度来看,这可能存在很大缺陷。在您的最后一段中,问题是我可能靠近对手,但实际上被一条需要 3 圈才能穿过的河流隔开,您是否建议在目标选择时为每个可能的目标(昂贵)进行寻路,但不要选择目标每次都发生以平衡执行负载?
    • @Xtapodi:实时战略游戏为所有单位实现了路径查找程序,没有太大问题。在回合制、FFT 风格的游戏中,为更少数量的单元实现寻路例程的成本在我看来是可以忽略不计的,即使你正在检查路径到所有可能的目标。事实上,我建议这样做,因为您可以根据其他因素(例如玩家单位的生命值等)计算出敌方单位是否应该移动到其他地方而不是关注最近的 PC 单位。
    • @JAB:感谢您的评论。你所说的 RTS 可能是真的(取决于游戏),但也需要那些已经有很多经验的人几个月的工作。是的,回合制让我有更多的时间来处理。您是否建议从每个玩家单位(目前为 4 到 5 个)运行 Dijkstra,然后让 AI 处理该数据?
    • @Xtapodi:我建议尝试the A* algorithm,它是 Dijkstra 算法的扩展,通常效率更高。您可能还想查看incremental heuristic searches
    • @JAB:嗯,在 RTS 的 1024x1024 地图上,您将拥有 100 万个节点,有针对此类情况的算法记录在案,我将就此离开主题。是的,A* 可能会解决问题,但在最坏的情况下,A* 与 Dijkstra 相同,因此,例如,如果我需要从 AI 单元到每个玩家单元进行 A*,只做一个 Dijkstra 可能实际上是一种优化,我的问题是决定我需要什么来做出战术决定,然后使用适当的寻路算法(如果有的话,我目前正在使用吸引力场,因此我陷入了死胡同)
    【解决方案3】:

    如果战斗发生的地形是预先确定的,或者不太宽,there 是一篇关于 FPS 中的地形推理的文章,可以用作回合制游戏的基础。

    简而言之,您为地图的每个单元格预先计算了一组值,例如在给定方向上射击的适用性、保护、能见度……等等。然后 AI 可以使用这些值来选择正确的操作。例如,战士会尽可能快地向敌人走去,如果有保护的话,会使用保护,而小偷会走一条从敌人方向能见度尽可能低的路径,目标是从侧面或后方发动攻击。

    但是,如果地形是随机的和/或太宽,则预计算可能会太长而无法使用。

    问候 纪尧姆

    【讨论】:

    • 感谢 Guillaume 的回复,我仍在阅读论文并思考如何以及是否可以应用它。我有一种感觉,对于某些具有近似数据的事物,在这类游戏中可能看起来真的很糟糕,例如视线。
    • 是和不是。你没有视线,只是敌人所在的牢房在左侧的能见度很低。因此,您可以使用它来限制您对敌人这一侧的路径搜索。另一个例子:知道敌人必须经过一个区域,并且知道该区域是一个非常好的射击位置(即该区域的能见度好,这个方向有很多小障碍物,其他方向的访问或能见度低) 对 AI 狙击手很有用 :) 但你实际上必须检查真实的视线
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多