Artificial intelligence 以最少的“";参数“;尽可能
我正在开发一款基于回合的游戏AI,它使用了一种被称为的神经网络技术。我正在尝试训练一个网络,它可以在二维(X&Y坐标)空间中移动,给定存储在二维数组中的各种值 我可以看到使用神经网络的两种策略:Artificial intelligence 以最少的“";参数“;尽可能,artificial-intelligence,neural-network,game-ai,neat,Artificial Intelligence,Neural Network,Game Ai,Neat,我正在开发一款基于回合的游戏AI,它使用了一种被称为的神经网络技术。我正在尝试训练一个网络,它可以在二维(X&Y坐标)空间中移动,给定存储在二维数组中的各种值 我可以看到使用神经网络的两种策略: 对于网格中的每个“单元”,提供来自不同启发式的分数作为神经元的输入,并创建一个神经网络,它实际上是一个非常复杂的“评分”系统。将非玩家角色(NPC)移动到得分最高的位置 为每个heuristic度量值创建一个压缩值(以某种方式压缩为尽可能少的位),并为每个度量值提供一个输入神经元 我对选项二很感兴趣,因
我知道有一些技术,比如三次样条曲线,我可以从中得出一些“关键点”,这些值是我所寻找的合理类比。我需要一种方法来获取2500个值,并得出这些值的一个小表示,我可以用于神经网络。我认为可以训练神经网络来推断这些表示的真正含义,或者至少确定表示与现实世界之间的某种相关性,因此它不一定需要是可逆函数,但我不认为有很多单向函数(如MD5、SHA)实际上,它们也会非常有用…基本上,任何图形压缩算法都会做你想做的事情。它们经过了大量优化,可以将二维数字数组压缩到尽可能小的内存中 编辑以添加:
另一件要考虑的事情,因为你想使用压缩来减少处理时间,所以得到很高的压缩比通常需要更多的计算来压缩和解压缩数组。与运行神经网络相比,您可能需要花费更多的时间压缩和解压缩数组
再次编辑以添加: 根据你的评论,听起来你可能想要的是一份工作。使用该曲线将50x50*数组转换为1x2500线,然后得出一个公式,该公式近似于数组中每个单元格所需的值*阵列是否必须为50x50?如果是一个尺寸稍有不同的正方形,那么用空间填充曲线填充可能会容易得多。例如,希尔伯特曲线适用于二次幂的维数。您可以尝试的一件事是对1D线进行FFT,然后删除稍后的(高频)项。例如,在MATLAB中,我执行了以下操作:
x = [1:1000];
y = rand(1,1000);
f = fft(y, 250); % truncate to 250 terms
plot(x,y, x,abs(ifft(f), 1000));
通常情况下,f的iFFT峰值与y的峰值非常接近。它们不一定是y的最高点,但它们是峰值。例如,在这次运行中,在f的反向FFT中,在x=424、475和725处有峰值,在y中,在x=423、475和726处也有峰值。然而,y的全局最大值为x=503,这是ifft(f)中的峰值,但不是很高
然而,这只会将数据使用量减少一半,因为我将1000个double转换为250个复杂值。仅使用FFT的实部可获得进一步的增加:
x = [1:1000];
y = rand(1,1000);
f = real(fft(y, 250)); % only uses 1/4 the space now
plot(x,y, x,abs(ifft(f, 1000)));
这仍然产生了相当好的结果,ifft(f)的每个主峰对应于y中的一个峰值,在大多数时间里,该峰值距离最多只有2倍,并且直接使用1/4的存储空间
然而,这仍然不能得到“一个或两个双值”的结果。你们现在把2500双装进625。您可以通过剪切更多术语进行试验,但您必须通过剪切更多术语“近距离”测试更多值。也许你可以保留前10%的条件,并找到最大值,然后在3或4的距离内查看;这将使你的2500个双打减少到“仅仅”250个。只有通过测试才能发现什么最适合您的应用程序
如果你真的很绝望,你可以去低至最低的1%频率,并搜索5或6在任何方向的真正峰值。但这仍然让你