问题标签 [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 投票
2 回答
312 浏览

artificial-intelligence - 用尽可能少的“参数”表示双精度的 2D 地图

我正在使用一种称为NEAT的神经网络技术开发回合制游戏 AI 。我正在尝试训练一个可以在二维(X&Y 坐标)空间中移动的网络,给定存储在有效二维数组中的各种值。

我可以看到使用神经网络的两种策略:

  1. 对于网格中的每个“单元”,提供来自不同启发式的分数作为神经元的输入,并创建一个实际上是一个非常复杂的“评分”系统的 NN。将非游戏角色 (NPC) 移动到得分最高的位置。

  2. 为每个启发式度量创建一个压缩值(以某种方式压缩为尽可能少的位),并为每个度量提供一个输入神经元。

我对选项二很感兴趣,因为它提供了最少的计算量(游戏的运行时间很长),但是我很困惑我可以使用什么方法来创建两者的“小表示”版本-维度启发式值。我知道那里有诸如傅立叶变换之类的技术,但是我不知道这些是否适合我的问题。基本上,我正在寻找一种将 50x50 的双精度数组转换为一个或两个双精度值的方法。这两个双精度值可以进行有损压缩,我不需要能够取回原始值,我只需要一个合理的机制来将输入数据更改为一个小的占用空间。

这两种可能性的替代方法是根据与 NPC 的距离以某种方式编码“区域”(因此您可以获得“接近”单元格的实际值和“远”单元格的近似值)。我不确切知道我将如何连接它,但它至少消除了在游戏的每一轮评估每个单元的需要(考虑到我正在以每轮大约 1 秒的速度查看大约 500 万轮,任何简化我能想出会大有帮助)。

如果这没有多大意义,我深表歉意,这是一个相当困难的问题,困扰了我一段时间,我想不出一个简单的方法来描述它。

谢谢,

艾丹

编辑添加(并更改标题):

多亏了克里斯,我们完善了我正在寻找的东西。我正在寻找的是一种以尽可能少的参数逼近一条线的方法(我可以将 2D 地图转换为一条线)。我之前使用三次样条进行插值,但是对于在 0.0 和 1.0 之间变化很大的数据集,我需要一些更可行的东西。我想我正在寻找的是地图的“散列”。

我知道有诸如三次样条之类的技术,我可以从中计算出一些“关键点”,这些值是我正在寻找的合理类比。我需要一种方法来获取 2500 个值并提出这些值的小表示,我可以将其用于神经网络。我认为可以训练NN来推断这些表示的真实含义,或者至少可以确定表示与现实世界之间的某种相关性,因此它不一定需要是可逆函数,但我不认为许多单向函数(例如 MD5、SHA)实际上也会非常有帮助......

0 投票
8 回答
27490 浏览

artificial-intelligence - 如何编写人工神经网络(井字游戏)?

我想使用人工神经网络玩井字游戏。我的网络配置如下:对于 9 个字段中的每一个,我使用 2 个输入神经元。所以我当然有 18 个输入神经元。对于每个字段,我有一个用于玩家 1 的输入神经元和一个用于玩家 2 的神经元。除此之外,我还有 1 个输出神经元用于评估当前棋盘位置。输出值越高,玩家 1 的位置越好。输出值越低,玩家 2 的位置越好。

但我的问题是:我如何编码那个神经网络?我的想法是使用 Array[1-18] 作为输入神经元。该数组的值是输入权重。我会使用循环遍历数组。每当有神经元被激活时,我都会将权重添加到输出值中。所以输出值是激活的输入神经元的权重之和:

您认为这是对网络进行编程的好方法吗?你有更好的想法吗?

我希望你能帮助我。提前致谢!

0 投票
1 回答
978 浏览

model-view-controller - 游戏 AI:实现 Sense-Think-Act 组件的模式?

我正在开发一个游戏。游戏中的每个实体都是一个GameObject. 每个GameObject都由GameObjectControllerGameObjectModel和组成GameObjectView。(或其继承人。)

对于 NPC,GameObjectController分为:

IThinkNPC:读取当前状态并决定要做什么

IActNPC:根据需要做的事情更新状态

ISenseNPC:读取当前状态以回答世界查询(例如“我在阴影中吗?”)

我的问题:ISenseNPC界面可以吗?

这些方法都不接受任何参数。相反,实现应该保持对相关的引用GameObjectController并阅读它。

但是,我现在正在尝试为此编写单元测试。显然,有必要使用模拟,因为我不能直接传递参数。我这样做的方式感觉非常脆弱 - 如果出现另一个以不同方式使用世界查询实用程序的实现怎么办?真的,我不是在测试接口,而是在测试实现。较差的。

我首先使用这种模式的原因是为了保持IThinkNPC实现代码的简洁:

然而,也许清洁不值得。

因此,如果ISenseNPC每次都获取所需的所有参数,我可以将其设为静态。这有什么问题吗?

0 投票
3 回答
7072 浏览

game-ai - 最终幻想战术类游戏的人工智能

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

你对我如何处理目标选择、动作和技能选择过程有什么想法吗?

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

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

=== 更新 1

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

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

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

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

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

===

在此先感谢,Xtapodi。

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

0 投票
1 回答
2603 浏览

algorithm - 飞行游戏AI算法?

大家好,

我正处于我的一个爱好项目的设计阶段。我将开发一款 3D 空战游戏。(受 HAWX 启发)。但我想知道人工智能是如何为敌方飞船工作的?我想,它们不会像在 FPS 游戏中那样沿着路径移动(图上的路径查找)。我可以使用什么样的算法来移动敌方飞船?我可以使用任何 AI 库吗?

注意:我使用 irrlicht 引擎,C++ 作为我的开发环境。

0 投票
1 回答
625 浏览

frame-rate - 第一人称射击游戏中的隐藏马尔可夫模型而不是 FSM

我一直在做一个课程项目,其中我们使用 FSM 实现了 FPS,通过显示游戏的顶部 2d 视图,并使用机器人、玩家和圆圈。机器人的行为是确定性的。例如,如果机器人的生命值降至阈值以下,并且玩家可见,机器人就会逃跑,否则它会寻找健康包。

然而,我觉得在这种情况下,机器人并没有表现出太多的智能,因为它做出的大部分决定都是基于我们已经决定的规则。

我可以使用哪些其他技术来帮助我在机器人中实现一些真正的智能?我一直在研究 HMM,我觉得它们可能有助于为机器人带来更多的不确定性,并且机器人可能会开始比依赖预先定义的规则更自主地做出决策。

你们有什么感想?任何意见,将不胜感激。

0 投票
4 回答
3846 浏览

artificial-intelligence - 用神经网络连接 4:草稿评估 + 进一步步骤

我想构建一个使用人工神经网络工作的 Connect 4 引擎——只是因为我对 ANN 很着迷。

我创建了以下 ANN 结构草案。它会起作用吗?这些连接是否正确(甚至是交叉连接)?

替代文字

你能帮我为这个ANN起草一个UML类图吗?

我想向 ANN 提供董事会代表作为其输入。输出应该是选择的动作。

稍后应该使用强化学习来完成学习,并且应该应用sigmoid 函数。该引擎将与人类玩家对战。然后根据比赛结果调整权重。

我在找什么...

...主要是编码问题。从抽象思维到编码越远,它就越好。

0 投票
3 回答
340 浏览

algorithm - 2D 离散游戏中的建筑布局

我在网格宇宙中工作 - 对象仅存在于二维矩阵中的整数位置。

一些条款:

广场 - 一个离散的位置。每个正方形都有一个 int x 和 int y 坐标,并且没有两个正方形具有相同的 x 和 y 对。

相邻:一个正方形 X 与另一个正方形 Y 相邻,如果它们的 x 或 y 坐标的差异幅度不大于 1。更简单地说,所有正方形紧邻 N、NE、E、SE、S、SW 、W 和 NW 方向相邻。

问题:

鉴于以下一般情况:

如果建造者与四栋建筑物之一相邻,我想建造两栋建筑物,使它们都共享一个公共相邻广场,该广场也与至少四栋现有建筑物中的一栋相邻,并且这个公共相邻广场没有被阻挡在.

基本有效解决方案:

目前,我遍历四个建筑物相邻的所有可遍历方块,并寻找具有 3 个相邻可遍历方块的方块,但这有时会产生以下情况:

关于如何改进我的算法的任何想法?

编辑:添加了另一个失败的案例。

编辑:我还想知道是否有可能满足这些条件的配置。我不能保证一个可行的解决方案,如果没有办法成功地做到这一点,我不想尝试。

0 投票
2 回答
1244 浏览

artificial-intelligence - Prolog中Connect6游戏的表示和启发式

我想代表游戏 connect6 wiki(也许谓词石头(P,X,Y),其中 P 是玩家,X,Y 是坐标很好)。我也想用任何好的启发式方法来解决问题(制造对手)。你能给我一些关于 Prolog 中游戏 AI 的文章的提示吗?谢谢

0 投票
8 回答
6914 浏览

algorithm - “RaceTrack”游戏的AI算法

有谁知道(或可以建议)用于RaceTrack铅笔纸游戏的 AI 的好算法?

由于您在每个步骤中有 9 种可能的选择,并且您需要至少提前 6-10 步才能决定一个好的策略,因此即使您可以排除一些选择,因为与边界相交,暴力破解也变得非常昂贵。

目前我正在尝试为每个选择分配一些质量值,以便决定排除哪些选择 - 但我还不知道如何分配这样一个质量值的良好规则。