我正在使用一种称为NEAT的神经网络技术开发回合制游戏 AI 。我正在尝试训练一个可以在二维(X&Y 坐标)空间中移动的网络,给定存储在有效二维数组中的各种值。
我可以看到使用神经网络的两种策略:
对于网格中的每个“单元”,提供来自不同启发式的分数作为神经元的输入,并创建一个实际上是一个非常复杂的“评分”系统的 NN。将非游戏角色 (NPC) 移动到得分最高的位置。
为每个启发式度量创建一个压缩值(以某种方式压缩为尽可能少的位),并为每个度量提供一个输入神经元。
我对选项二很感兴趣,因为它提供了最少的计算量(游戏的运行时间很长),但是我很困惑我可以使用什么方法来创建两者的“小表示”版本-维度启发式值。我知道那里有诸如傅立叶变换之类的技术,但是我不知道这些是否适合我的问题。基本上,我正在寻找一种将 50x50 的双精度数组转换为一个或两个双精度值的方法。这两个双精度值可以进行有损压缩,我不需要能够取回原始值,我只需要一个合理的机制来将输入数据更改为一个小的占用空间。
这两种可能性的替代方法是根据与 NPC 的距离以某种方式编码“区域”(因此您可以获得“接近”单元格的实际值和“远”单元格的近似值)。我不确切知道我将如何连接它,但它至少消除了在游戏的每一轮评估每个单元的需要(考虑到我正在以每轮大约 1 秒的速度查看大约 500 万轮,任何简化我能想出会大有帮助)。
如果这没有多大意义,我深表歉意,这是一个相当困难的问题,困扰了我一段时间,我想不出一个简单的方法来描述它。
谢谢,
艾丹
编辑添加(并更改标题):
多亏了克里斯,我们完善了我正在寻找的东西。我正在寻找的是一种以尽可能少的参数逼近一条线的方法(我可以将 2D 地图转换为一条线)。我之前使用三次样条进行插值,但是对于在 0.0 和 1.0 之间变化很大的数据集,我需要一些更可行的东西。我想我正在寻找的是地图的“散列”。
我知道有诸如三次样条之类的技术,我可以从中计算出一些“关键点”,这些值是我正在寻找的合理类比。我需要一种方法来获取 2500 个值并提出这些值的小表示,我可以将其用于神经网络。我认为可以训练NN来推断这些表示的真实含义,或者至少可以确定表示与现实世界之间的某种相关性,因此它不一定需要是可逆函数,但我不认为许多单向函数(例如 MD5、SHA)实际上也会非常有帮助......