python - 神经网络的人工生命

标签 python artificial-intelligence neural-network artificial-life

<分区>

我正在尝试构建一个由神经网络控制的代理的简单进化模拟。在当前版本中,每个代理都有带一个隐藏层的前馈神经网络。环境包含固定数量的食物,用红点表示。当代理人移动时,他会失去能量,而当他靠近食物时,他会获得能量。能量为 0 的特工死亡。神经网络的输入是代理的当前角度和到最近食物的向量。每个时间步,每个代理的运动角度都由其神经网络的输出改变。目的当然是观察一段时间后觅食行为的演变。但是,没有任何反应。

不知道是神经网络的结构(太简单了?)还是繁殖机制的问题:为了防止种群爆炸,初始种群大概是20个agent,随着种群数量接近50,繁殖机会接近于零。当确实发生繁殖时,通过从头到尾遍历代理列表并检查每个代理的 0 到 1 之间的随机数是否小于该代理的能量与所有代理人的能量。如果是这样,则搜索结束并且该代理成为父代,因为我们向环境中添加了该代理的副本,其神经网络中的一个或多个权重有一定的突变概率。

提前致谢!

最佳答案

如果环境足够好(例如,很容易找到食物),那么随机移动可能是一个完全可行的策略,而且繁殖成功受运气的影响可能远大于其他任何因素。还要考虑意想不到的后果:例如,如果后代与其 parent 同处一地,那么两者立即在本地相互竞争,从长远来看,这可能非常不利,导致双方死亡。

要测试您的系统,请引入一个具有“预制”神经网络的个体,该神经网络设置为将个体直接引向最近的食物(您的模型是这样的东西存在并且很容易写下来,对吗?如果不,期望它进化是不合理的!)。将那个人介绍到你在哑巴群众中的模拟中。如果个人没有迅速控制,则表明您的模拟未设置为强化此类行为。但是,如果个体享受繁殖成功并且它和它的后代接管,那么你的模拟正在做正确的事情,你需要寻找其他地方,因为这种行为没有进化。

响应评论的更新:

在我看来,这种角度和矢量的混合是可疑的。个人是否可以进化为“直接走向最近的食物”行为必须取决于您的网络对 atan 函数的近似程度(我持怀疑态度)。同样,这表明需要进行更多测试:

  • 搁置所有生态模拟,只测试扰乱种群 研究您的随机网络风格,看看它们是否可以朝着预期的功能发展。
  • (更简单,更好)让网络输出一个向量(而不是角度):个体应该移动的方向(当然这意味着有 2 个输出节点而不是一个)。显然,“直接转向食物”策略只是“转向食物”向量分量的直接传递,然后有趣的是看看你的随机网络是否朝着这个简单的“身份函数”演化(也应该允许引入现成的优化个体,如上所述)。

我也对“定量食物”持怀疑态度。 (我假设你的意思是一旦一个红点被消耗,另一个红点就会被引入)。一个更“现实”的模型可能是以恒定的速度引入食物,而不是强加任何人为的人口限制:人口限制是由食物供应的限制决定的。例如,如果您每分钟引入 100 个单位的食物,而个体每分钟需要 1 个单位的食物才能生存,那么您的模拟应该发现它趋向于长期平均有 100 个个体,而不需要夹紧以避免“人口爆炸”(尽管繁荣与萧条、盛宴或饥荒的动态可能实际上会出现,具体取决于细节)。

关于python - 神经网络的人工生命,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15008875/

相关文章:

python - 性能分析仪

java - 华为HIAI引擎 "General text recognition"未检测到图像中的任何文本

python - 简单的 MLP 时间序列训练产生意想不到的平均线结果

python - 在Python中首次使用惯用语时构造

python - 如何在gensim.doc2vec中使用infer_vector?

.net - .NET 中的神经网络示例

algorithm - 局部波束搜索和随机波束搜索有什么区别?

machine-learning - 人工神经网络-为什么隐藏层通常使用 sigmoid 激活函数而不是 tanh-sigmoid 激活函数?

c++ - C++ 中 NaN 的异常原因?极限接近零会导致 NaN 吗?

python - 使用 Python/Matlab 在图像中人为地合并非刚性运动以生成数据