问题标签 [game-ai]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
359 浏览

artificial-intelligence - 游戏 AI 遗传算法中的适应度函数替代方案

我使用 Alpha-Beta 修剪创建了一个五子棋(连续 5 个)AI。它在一个不那么愚蠢的水平上采取行动。首先,让我模糊地描述一下Alpha-Beta算法的评分功能。

当它接收到一个棋盘作为输入时,它首先找到所有重复的棋子,并根据其作为威胁的有用性,从 4 个可能的值中给它打分,这取决于长度。它将返回所有重复分数的总和。

但是,问题是我明确决定了分数(总共 4 个),它们似乎不是最好的选择。所以我决定实现一个遗传算法来生成这些分数。每个基因将是 4 个分数之一。例如,硬编码分数的染色体将是:[5, 40000,10000000,50000]

但是,因为我使用遗传算法来创建评分函数的分数,所以我不确定应该如何实现遗传适应度函数。所以相反,我想到了以下几点:

我不会使用适应度函数,而是将选择过程合并在一起:如果我有 2 条染色体,A 和 B,并且需要选择一个,我将在每个 AI 中使用 A 和 B 染色体来模拟游戏,并且选择获胜的染色体。

1.这是健身功能的可行替代品吗?

2.由于Alpha-Beta算法的特点,我需要给获胜条件的最大分数,大多数情况下设置为无穷大。但是,因为我不能使用 Infinity,所以我只是使用了一个大得离谱的数字。我还需要将此分数添加到染色体吗?还是因为它无关紧要并且不会改变评分函数的值,所以将其保留为常数?

3.当最初创建染色体时,随机生成,遵循标准分布据说是最优化的。然而,就我而言,基因有很大的偏差。随机生成染色体还可以吗?

0 投票
1 回答
71 浏览

artificial-intelligence - 用于游戏机器人的人类逼真 AI

有哪些策略可以创建像人类一样玩的 AI 游戏机器人?

有人可以指导我在哪里可以找到有关此主题的更多信息吗?

0 投票
1 回答
96 浏览

neural-network - 游戏 2048 的政策网络

我正在尝试根据 Karpathy 的RL 教程为游戏 2048 实施策略网络代理。我知道算法需要玩一些游戏,记住输入和采取的行动,标准化和平均中心结束分数。但是,我陷入了损失函数的设计。如何正确地鼓励那些导致更好的最终分数的行为并阻止那些导致更差分数的行为?

在输出层使用 softmax 时,我设计了一些东西:

loss = sum((action - net_output) * reward)

其中动作是一种热门格式。但是,这种损失似乎没有多大作用,网络没有学习。我在 PyTorch 中的完整代码(没有游戏环境)在这里

0 投票
1 回答
886 浏览

android - 如何为更大的井字游戏板设计算法?

我在 Android 中创建了一个 tactactoe 游戏,它很棒。但是这个游戏有3*3的玩法。在 3*3 游戏中,我们可以实现我们的手动 AI(首先填充角落位置),或者我们可以使用 Minimax 算法来获得最佳移动。这非常适合 3*3 板。但是当我为 4*4 和 5*5 尝试相同的算法时,该算法需要花费大量时间来确定最佳移动。因此我不能使用极小极大算法。

那我现在能做什么?我想以不同的目标实现不同的级别,如下所示 在此处输入图像描述

这里是 6*6 棋盘,目标(获胜的连续符号)是 5。所以我想为这个动态棋盘设计一个具有动态目标的 AI。目标可以是 3、4、5 等。我该怎么做?提前致谢。

0 投票
1 回答
1289 浏览

path-finding - 如何使 Godot 中的 AStar 适应平台游戏?

我一直在为我正在开发的基于平台游戏的游戏寻找一种强大的寻路方法,A* 看起来是最好的方法。我注意到Godot 中有一个AStar实现的演示。但是,它是为基于网格/图块的游戏编写的,我无法将其适应于 Y 轴受重力限制的平台游戏。

我找到了一个非常好的答案,它描述了如何将 A* 应用于 Unity 中的平台游戏。我的问题是......是否可以在 Godot 中使用 AStar 来实现上述答案中描述的相同目的?如果不使用内置的 AStar 框架,这是否可以做得更好?什么是它在 GDscript 中如何工作(有或没有 AStar)的一个非常简单的例子?

虽然我已经发布了 100 点赏金(并且已经过期),但我仍然愿意再发布 100 点赏金并奖励它,等待这个问题的答案。

0 投票
1 回答
37 浏览

artificial-intelligence - 基于树搜索的游戏 AI:如何通过稀疏奖励避免 AI“徘徊”/“拖延”?

我的游戏 AI 使用了一种算法,该算法根据我可以做出的动作搜索所有可能的未来状态(minimax / monte carlo esque)。它使用评分系统评估这些状态,选择得分最高的最终状态并遵循它。

这在大多数情况下都很有效,但在奖励稀少的情况下效果很差。例如:在我右侧 3 格处有一个理想的收藏品。自然的解决方案是向右->向右->向右。

但是,我的算法搜索 6 转深。它会找到许多最终收集对象的路径,包括需要超过 3 圈的路径。例如,它可能会找到一条路径:上->右->下->右->右->下,而不是在第 5 回合收集对象。

由于在这两种情况下,最终的叶节点都将对象检测为已收集,因此它自然不会偏爱其中一个。因此,不是在第 1 弯向右走,而是向上、向下或向左走。这种行为会在下一回合准确地重复,所以它基本上会在可收集的物体前随机跳舞,只有运气才会让它踩到它。

这显然不是最理想的,我想修复它,但是已经没有如何正确处理这个问题的想法了。这个问题是否有任何解决方案,或者是否有任何理论工作来处理这个问题?

我尝试过的解决方案:

  • 使其在较早的回合中更重视对象收集。虽然这有效,但要击败评估者的“噪音”,转弯之间的差异必须相当大。回合 1 的评级必须高于 2,回合 2 的评级必须高于 3,等等。回合 1 和 6 之间的差异必须如此之大,以至于最终导致行为极度贪婪,这在大多数情况下是不可取的。在具有多个对象的环境中,它最终可能会选择在第 1 回合抓取对象的路径,而不是在第 5 回合和第 6 回合抓取对象的更好路径。

  • 将对象指定为目标并为其指定距离。如果不逐个进行,原始问题仍然存在。如果在轮到轮的基础上完成,每轮所需的重要性差异再次使其过于贪婪。这种方法也会降低灵活性并导致其他问题。目标选择不是微不足道的,并且有点破坏了极小极大风格算法的要点

  • 在我的搜索中进行更深入的搜索,以便它总能找到第二个对象。这将花费如此多的计算能力,以至于我不得不做出让步,比如更积极地修剪路径。如果我这样做,我会回到同样的问题,因为我不知道如何让它更喜欢修剪 5 回合版本而不是 3 回合版本。

  • 为上一回合制定的计划提供额外的价值。如果它至少可以遵循次优路径,那么就不会有那么大的问题。不幸的是,这再次必须是一个非常强大的效果,它才能可靠地工作,使其在所有场景中都遵循次优路径,从而损害整体性能。

0 投票
2 回答
217 浏览

c# - 游戏 AI 如何统一定位、识别和瞄准其他游戏对象

如何让我的 NPC AI 定位 X 距离内的所有对象,识别每个对象,然后能够瞄准特定对象?一个例子是:AI 在一个区域内,并且在它的范围内有 4 个对象。这些对象是两棵树、一块石头和一头猪。AI 需要木头,然后需要一些石头。我如何让 AI 能够识别 2 棵树、岩石和猪,然后去一棵树,然后去岩石?

0 投票
0 回答
68 浏览

java - 如何将 A* 算法的结果用于 2D 游戏?

我正在第一次尝试在我的一个游戏中引入寻路。到目前为止,我已经实现了一个 A* 算法,它似乎可以正确地找到我根据打印语句设置到指定位置的墙周围的路径。但是,从我理解的方式来看,我用来生成路径的方法返回的是从目标到角色的路径,而不是相反。因此,我需要反转路径以使我的角色移动到指定位置(如果我理解正确的话)。我如何以最好的方式做到这一点?

探路者代码:

我希望角色类中的运动代码是这样的:

由于这是我第一次为游戏进行寻路,虽然我不确定,但我可能会错误地接近这个。

0 投票
1 回答
42 浏览

artificial-intelligence - 2 个具有 Minimax 的竞争性 AI

简化游戏规则:

  • 棋子每回合可以移动一次。
  • 棋子可以向 4 个方向移动。(上下左右)
  • 棋子像棋盘一样在网格上移动。
  • 到达对方行的棋子获胜。
  • 为简单起见,可以忽略其他规则。

评价功能:

  • 如果reached to the target, return 100.
  • 其他:return Opponent Distance From Target - Own Distance From Target

minimax使用alpha-beta pruning并指定了一个max-depth. 我将我的实现与几个 3rd 方实现进行了比较,它看起来是一样的。因此,我不想粘贴我的实现,而是想直接问我的问题:

当 2 个 AI 相互竞争时。一旦他们检测到其中任何一个赢得比赛,他们就无法选择有意义的方向,因为超过 1 个选择的得分相同。随机选择这些选项中的任何一个,都不会改善它,因为它们永远毫无意义地移动。

这是(死锁)预期的事情吗?如果不是,可能是什么问题?如果是这样,我该如何解决?

0 投票
0 回答
96 浏览

c++ - BTSK 顶部的 C++ 行为树代码表示 Behavior() : m_eStatus(BH_INVALID) {} 是什么意思?

我是 C++ 编程新手,一直在研究 Behavior Tree Starter Kit 以构建新的 AI 框架。我很难理解行为树入门工具包代码。鉴于此用于游戏 AI 行为树的 C++ 代码,顶部的代码部分(似乎正在设置初始状态或其他内容)是什么意思?什么是虚拟作品?

这是完整的代码,也是什么virtual Status update() = 0;意思: