首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进化模拟器中的神经网络--如何在没有预期结果的情况下计算误差

进化模拟器中的神经网络--如何在没有预期结果的情况下计算误差
EN

Stack Overflow用户
提问于 2017-07-08 17:11:14
回答 1查看 444关注 0票数 0

我正在用Java创建一个进化模拟器。模拟由冷热区和高/低海拔等组成。我想让世界上的生物以两种方式进化--每一个生物都会在他有生之年进化出人工智能,当一个生物繁殖时,就有可能发生突变。我认为,让这些生物的大脑成为一个神经网络,将传感器的数据作为输入(目前只有眼睛),并向推进器发出指令(这会使生物四处移动),这将是一件好事。

然而,我只对基本的神经网络有经验,它接收用户的期望输入,并相应地计算误差。然而,在这个模拟器中,没有最优的结果。结果可以通过我创建的适应度函数来评定(计算能量变化、后代数量等),但不知道哪个输出节点是错误的,哪个是正确的。

  1. 对于这个问题,我是否采用了正确的方法?或者也许神经网络不是解决这一问题的最佳方法?
  2. 如果这是一个可行的方式来实现我的愿望,我如何使神经网络调整正确的权重,如果我不知道?

提前感谢,并对任何英语错误表示歉意。

EN

回答 1

Stack Overflow用户

发布于 2017-09-15 08:26:00

你在神经网络和游戏中遇到了一个常见的问题。正如注释中提到的,在没有“正确”解的情况下,经常使用遗传算法。所以你的目标基本上是把神经网络和遗传算法结合起来。幸运的是,以前有人这样做过,并在这个中描述了这个过程。

由于本文比较复杂,实现该算法的时间也很长,因此您应该考虑使用一个库。因为我找不到适合我的库,所以我决定自己写一个,你可以发现这里库应该能很好地处理像你这样的“小”问题。您将在主类中找到一些示例代码。

结合网络使用

代码语言:javascript
复制
Network.breedWith(Network other);

创建网络使用

代码语言:javascript
复制
Network net = new Network(int inputs, int outputs);

变异网络

代码语言:javascript
复制
Network.innovate();

正如您将在示例代码中看到的,对于每个新的网络,始终拥有初始的突变量是很重要的。这是因为当您创建一个新的网络时,没有连接,因此创建连接需要创新(意为突变)。如果需要,您可以始终创建网络副本(Network.getCopy();)。Network及其所有属性都实现了可序列化,因此您可以使用ObjectOutputStream保存/加载网络。

如果你决定使用我的图书馆,请告诉我你得到了什么结果!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44988769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档