我正在用Java创建一个进化模拟器。模拟包括具有冷/热区域和高/低高度等的地图。 我希望世界上的生物以两种方式进化 - 每一个生物都会在其一生中发展它的AI,当一个生物再现时,就有可能发生变异。 我认为让这些生物的大脑成为一个神经网络,将传感器的数据作为输入(目前只有眼睛),然后向推进器(使生物移动)产生命令,这将是一件好事。
但是,我只有基本神经网络的经验,可以接收用户的所需输入并相应地计算错误。但是在这个模拟器中,没有最佳结果。结果可以通过我创建的适应度函数(其计算能量变化,后代数量等)进行评级,但不知道哪个输出节点是错误的,哪个是正确的。
提前致谢,对任何英语错误感到抱歉。
答案 0 :(得分:0)
你遇到了神经网络和游戏的常见问题。正如评论中所提到的,当没有“正确的”时,通常会使用遗传算法。解。 因此,您的目标基本上是以某种方式结合神经网络和遗传算法。幸运的是,之前有人这样做并在此paper中描述了这个过程。
由于论文相对复杂,实现算法需要花费大量时间,因此您应该考虑使用库。 由于我找不到任何适合我的图书馆,我决定自己写一个,你可以找到它here 图书馆的工作应该足够小,以便“小”。像你这样的问题。您将在Main类中找到一些示例代码。
使用
组合网络Network.breedWith(Network other);
使用
创建网络Network net = new Network(int inputs, int outputs);
使用
突变网络Network.innovate();
正如您将在示例代码中看到的那样,每个新网络始终具有初始数量的突变非常重要。这是因为当您创建新网络时,存在无连接,因此创建连接需要创新(用于突变的花哨字)。 如果需要,您始终可以创建网络副本(Network.getCopy();)。 Network类及其所有属性实现可序列化,因此您可以使用ObjectOutputStream保存/加载网络。
如果您决定使用我的图书馆,请告诉我您的结果!