我正在使用一种名为 NEAT 的神经网络技术开发一个回合制游戏 AI。我试图训练一个神经网络,使其能够在二维(X&Y 坐标)空间中移动,这些空间中存储了许多值,这些值实际上是一个二维数组。
我看到了使用神经网络的两种策略:
-
对于网格中的每个“单元格”,将来自不同启发式方法的分数作为神经元的输入,并创建一个实际上非常复杂的“评分”系统的神经网络。 将非玩家角色 (NPC) 移动到得分最高的位置。
-
为每个启发式度量创建一个压缩值(以某种方式压缩到尽可能少的位),并为每个度量提供一个输入神经元。
我对第二种方案非常感兴趣,因为它所需的计算量最少(游戏的运行时间很长),但是我很困惑可以使用哪种方法来创建二维启发式值的“小表示”版本。 我知道存在傅里叶变换之类的技术,但是我不知道这些技术是否适合我的问题。 基本上,我正在寻找一种将 50×50 的双精度浮点数数组转换为一个或两个双精度浮点数值的方法。 这两个双精度浮点数值可以是进行有损压缩的,我不需要能够获得原始值,只需要一个合理的机制将输入数据更改为一个小的 footprint。
这两种可能性的一种替代方法是根据与 NPC 的某些距离来编码一个“区域”(因此您可以获得“近距离”单元格的实际值,以及“远距离”单元格的近似值)。 我不知道该如何连接它,但是至少可以避免在游戏的每一轮中都评估每个单元格的需求(因为我正在查看大约 500 万轮,每轮大约 1 秒,所以我提出的任何简化方案都会非常有帮助)。
如果这没有多大意义,我深感抱歉,这是一个困扰我一段时间的难题,我无法想到一种容易描述它的方法。
谢谢,
Aidan
编辑添加(并更改标题):
感谢 Chris,我们完善了我正在寻找的东西。 我正在寻找一种用尽可能少的参数来近似一条线(我可以将二维地图转换为一条线)的方法。 我以前曾使用三次样条进行插值,但是对于在 0.0 和 1.0 之间剧烈变化的数据集,我需要更可行的东西。 我想我真正寻找的是地图的“哈希”。
我知道有一些技术,例如三次样条,我可以从中计算出一些“关键点”,这些值与我正在寻找的东西非常相似。 我需要一种方法来获取这 2500 个值,并提出这些值的一个小的表示形式,供神经网络使用。 我认为可以训练 NN 来推断这些表示的真实含义,或者至少确定表示与真实世界之间的一些相关性,因此它不一定需要是可逆函数,但是我不认为很多单向函数(例如 MD5、SHA)实际上也会很有帮助…
回答:
基本上,任何图形压缩算法都可以满足您的需求。 它们经过了大量优化,可以将二维数字数组压缩为尽可能小的 footprint。
编辑添加:
另一件需要考虑的事情是,由于您希望使用压缩来减少处理时间,因此获得真正高的压缩率通常需要更多的计算来压缩和解压缩数组。 您可能会达到这样一种程度,即您花费在压缩和解压缩数组上的时间比运行神经网络的时间还要多。
再次编辑添加:
根据您的评论,听起来您可能需要的是空间填充曲线。 使用该曲线将您的 50×50* 数组转换为 1×2500 线,然后找到一个公式,该公式可近似您要为数组的每个单元格获得的值。
*该数组必须是 50×50 吗? 如果它是尺寸略有不同的正方形,则用空间填充曲线填充可能会更容易。 例如,希尔伯特曲线非常适合尺寸为 2 的幂的情况。