神经网络的人工生命

我正在尝试构建一个由神经网络控制的代理的简单进化模拟。在当前版本中,每个代理都有一个带有一个隐藏层的前馈神经网络。环境中包含固定数量的食物,以红色点表示。当代理移动时,它会消耗能量,而当它靠近食物时,它会获得能量。代理的能量为0时死亡。神经网络的输入是代理的当前角度和到最近食物的向量。每个时间步,代理的移动角度会根据其神经网络的输出进行改变。当然,目标是观察到一段时间后会出现寻找食物的行为。然而,目前什么都没有发生。

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

提前感谢!


回答:

如果环境足够友好(例如,找到食物很容易),那么随机移动可能是一种完全可行的策略,生殖成功可能更多地受到运气的驱动,而不是其他因素。还要考虑到意想不到的后果:例如,如果后代与其父代共处同一位置,那么它们在局部区域内立即成为竞争者,这可能在长期内导致两者都死亡的足够不利情况。

为了测试你的系统,引入一个具有“预设”神经网络的个体,设置为直接引导个体朝向最近的食物(你的模型是这样的,这种东西存在且相对容易编写,对吗?如果不是,那么期望它进化出来是不合理的!)。将该个体引入你的模拟中,与那些愚蠢的大众混在一起。如果该个体没有迅速占据主导地位,这表明你的模拟设置不利于这种行为。但如果该个体获得生殖成功,并且它及其后代占据主导地位,那么你的模拟做对了某些事情,你需要在其他地方寻找这种行为未能进化的原因。

回应评论的更新:

在我看来,这种角度和向量的混合是值得怀疑的。个体是否能进化到“直接朝向最近食物移动”的行为,很大程度上取决于你的网络能否很好地近似atan函数(我持怀疑态度)。这再次建议进行更多测试:

  • 搁置所有生态模拟,仅测试扰动一组你的随机网络,看看它们是否能进化到预期的功能。
  • (更简单,更好)让网络输出一个向量(而不是角度):个体应该移动的方向(当然这意味着有两个输出节点而不是一个)。显然,“直接朝向食物移动”的策略就是直接传递“朝向食物的方向”向量分量,有趣的是看看你的随机网络是否能进化到这个简单的“恒等函数”(也应该允许引入如上所述的预设优化个体)。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注