我正在用Java创建一个进化模拟器。模拟由冷热区和高/低海拔等组成。我想让世界上的生物以两种方式进化--每一个生物都会在他有生之年进化出人工智能,当一个生物繁殖时,就有可能发生突变。我认为,让这些生物的大脑成为一个神经网络,将传感器的数据作为输入(目前只有眼睛),并向推进器发出指令(这会使生物四处移动),这将是一件好事。
然而,我只对基本的神经网络有经验,它接收用户的期望输入,并相应地计算误差。然而,在这个模拟器中,没有最优的结果。结果可以通过我创建的适应度函数来评定(计算能量变化、后代数量等),但不知道哪个输出节点是错误的,哪个是正确的。
提前感谢,并对任何英语错误表示歉意。
发布于 2017-09-15 08:26:00
你在神经网络和游戏中遇到了一个常见的问题。正如注释中提到的,在没有“正确”解的情况下,经常使用遗传算法。所以你的目标基本上是把神经网络和遗传算法结合起来。幸运的是,以前有人这样做过,并在这个纸中描述了这个过程。
由于本文比较复杂,实现该算法的时间也很长,因此您应该考虑使用一个库。因为我找不到适合我的库,所以我决定自己写一个,你可以发现这里库应该能很好地处理像你这样的“小”问题。您将在主类中找到一些示例代码。
结合网络使用
Network.breedWith(Network other);创建网络使用
Network net = new Network(int inputs, int outputs);变异网络
Network.innovate();正如您将在示例代码中看到的,对于每个新的网络,始终拥有初始的突变量是很重要的。这是因为当您创建一个新的网络时,没有连接,因此创建连接需要创新(意为突变)。如果需要,您可以始终创建网络副本(Network.getCopy();)。Network及其所有属性都实现了可序列化,因此您可以使用ObjectOutputStream保存/加载网络。
如果你决定使用我的图书馆,请告诉我你得到了什么结果!
https://stackoverflow.com/questions/44988769
复制相似问题