我正在使用称为NEAT的神经网络技术开展基于回合的游戏AI。我试图训练一个网络,该网络可以在二维(X & Y coords)空间中移动,并给出存储在实际上是二维数组中的各种值。用尽可能少的“参数”代表双打的2D地图
我可以看到两个策略使用神经网络:
对于网格中的每个“单元”,提供了从不同的启发式的得分作为输入神经元,并创建一个NN,有效地一个是非常复杂的“评分”系统。将非演奏角色(NPC)移动到得分最高的位置。
为每个启发式度量创建一个压缩值(以某种方式压缩成尽可能少的位),并为这些度量提供一个输入神经元。
我在方案二颇感兴趣,因为它提出了计算所需的最低量(游戏是相当长的运行时间),但我很困惑,我会用什么方式来打造“小表示“版本的二维启发式值。我知道那里有傅立叶变换等技术,但我不知道这些技术是否适合我的问题。基本上我正在寻找一种方法来将50x50的双打数组转换为一个或两个双精度值。这两个double值可以进行有损压缩,我不需要能够获取原始值,我只需要一个合理的机制将输入数据更改为小型足迹。
这两种可能性的替代方法是以某种方式编码一个基于距离NPC一定距离的“区域”(因此您可以获得“关闭”单元的实际值,以及“远”单元的近似值)。我不确切知道如何连接它,但它至少摆脱了在游戏的每一轮都要评估每个单元格的需要(因为我在每轮大约1秒钟内查看大约500万轮,任何简化我可以拿出很大的帮助)。
我很抱歉,如果这没有多大意义,这是一个相当困难的问题,一直困扰着我,我想不出一个简单的方式来描述它。
三江源,
艾丹
编辑补充(并更改标题):
感谢Chris我们已经精制我所期待的。我正在寻找的是一种用尽可能少的参数近似直线(我可以将二维地图转换为一条直线)的方法。我之前使用三次样条插值进行插值,但是我需要一些更有用的数据集,这些数据集在0.0到1.0之间变化很大。我正在寻找的东西我想是地图的“哈希”。
我知道有一些技术,如三次样条,我可以从中找出一些“关键点”,这些值是我寻找的合理比喻。我需要一种方法来取得2500个值,并拿出这些值的一个小表示,我可以用于神经网络。我认为神经网络可以被训练来推断这些表征的真正含义,或者至少可以确定表示与现实世界之间的某种相关性,所以它不一定需要是可逆函数,但我不认为许多单向函数(如MD5,SHA's)实际上也会非常有用......
虽然我可以压缩到两个或最好是一个数字吗?我认为大多数图形压缩算法专注于保持相同的粗略像素大小,只是使用更智能的方式来存储颜色信息。 – Aidos 2009-04-12 15:13:55
我不认为你能够把它归结为一两个双打,并且它可以被认为是原始的50x50阵列。这是一个1250:1的压缩比。 – 2009-04-12 15:22:51
我想我可能误导了使用术语压缩。基本上我需要的是某种计算,可以给我一些描述“地图”的值。我可以将它们转换成一个简单的线条图,我需要一种方法来确定这条线的“函数”,就像一个三次样条的参数一样? – Aidos 2009-04-12 15:34:39