问题标签 [artificial-life]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
genetic-algorithm - 如何将一组/一条染色体翻译成一个属性?
所以,既然这个问题的答案基本上是说我真的应该研究编码我的生物的基因*,我做到了!
因此,我创建了以下简洁的 (byte[]-) 结构:
基因 = { X, X, X, X, Y, Y, Y, Y, Z, Z, Z, Z }
在哪里
X = 代表生物的某种特征。
Y = 这些块控制交叉和突变如何、是否以及何时发生(16 个可能的值,我认为应该绰绰有余!)
Z = 链的长度(基本上,这是为了将来的构建,我想让进化控制甚至整个链的长度)。
(所以 Z 和 Y 可以被认为是元信息)
(在你问之前,是的,那是一个 12 字节的 :))
我的问题如下:
我如何将这些与每个“生物”的特征联系起来?
基本上,我是这样看的(这可能是我实现它的方式):每个“生物”都可以跑来跑去,吃东西和繁殖,基本的东西。我不认为(我当然不希望如此!)我本身需要一个健身功能,但我希望进化,就像在食物、伙伴和空间的竞赛中一样,将推动生物进化。
这种观点是错误的吗?将其视为一个大图并“简单地”从那里获取它会更容易(请注意,我是程序员,而不是数学家!)?
或者,tl;dr:你能给我指出正确的方向吗?文章、研究和/或实施的例子?
(更重要的是;博士;我如何将基因翻译成例如腿的长度?)
*阅读问题,我正在构建一种模拟器。
algorithm - Wa-Tor 像元胞自动机。单元格应该按什么顺序更新?
前段时间我写了一个像元胞自动机一样的 Wa-Tor(参见 Wikipedia),但是有更多的物种和更聪明的物种。除了进行大量微调以获得稳定的系统外,它非常简单并且运行良好。然而,从那时起,我问自己(现在是你)如何“真实地”更新单元格。
我的“世界”是一个网格,总是从左上角到右下角更新。IMO 这也意味着靠近顶部和左侧的单元格总是更快。因此,例如单元格 [3, 3] 中的一条鱼可以在更新之前被 [3, 2] 中的鲨鱼吃掉。如果单元格的位置相反,鱼总是会从鲨鱼身上逃脱,因为它可以在鲨鱼更新之前离开鲨鱼。
我是否正确认为这是一个“问题”(或至少不现实)?
IMO 在现实环境中应该同时更新所有单元格,但我不知道如何实现类似的东西。我可以想象的另一种方法是以“打乱”的顺序评估单元格。
你会如何解决这个问题/这些问题通常是如何解决的?
artificial-intelligence - 我是否应该向正在由遗传算法训练的人工神经网络添加偏差
我有一个控制人工食草动物的人工神经网络。输入是最近植物的大小和方向、最近伴侣的大小和方向以及食草动物的健康状况。输出是一个运动矢量(方向和幅度)。如果通过遗传算法进行训练,是否有必要使用偏差?
algorithm - 操作性条件反射算法?
为代理实施实时操作性条件反射(基于监督奖励/惩罚的学习)的最佳方法是什么?我应该使用神经网络(以及什么类型)?或者是其他东西?
我希望代理能够接受训练,像狗一样遵循命令。这些命令将以触摸屏上的手势形式出现。我希望代理能够接受训练以遵循路径(在连续的 2D 空间中),根据命令进行行为更改(由 FSM 状态转换建模),并执行一系列动作。
代理将处于模拟的物理环境中。
python - 蚁群模拟——优化路径
我正在尝试构建一个简单的蚁群模拟。世界是方格;它们中的每一个都可以由某种程度的信息素和任意数量的蚂蚁组成。有两种类型的信息素:食物信息素和巢信息素。蚂蚁对环境一无所知,但返回巢穴的蚂蚁会跟随巢穴信息素(从某种意义上说,它们几乎总是选择移动到所有附近细胞中信息素水平最高的细胞)并留下食物信息素,反之亦然。
蚂蚁有时会随机移动,而不是朝着信息素最大的方向移动。模拟的每一刻蚂蚁都会检查附近 8 个单元格中的信息素水平,如果当前单元格中的信息素水平低于附近所有单元格中的最大信息素水平,它会添加一些信息素。
当前的模拟效果很好,但找到的路径不是最佳路径。我有两个问题我不知道如何解决:
- 我如何模拟对角线移动比非对角线移动更长的事实(上,左下或右)?
- 我应该如何模拟信息素的扩散?现在,信息素会随着时间的推移而蒸发,但没有扩散。我试图将一些信息素从每个细胞、模拟的每个滴答声转移到附近的 8 个细胞,但结果是一团糟——整个环境都充满了信息素——我认为这是因为机制蚂蚁用来调节信息素水平。
python - 具有神经网络的人工生命
我正在尝试建立一个由神经网络控制的代理的简单进化模拟。在当前版本中,每个代理都有一个带有一个隐藏层的前馈神经网络。环境包含固定数量的食物,用红点表示。当智能体移动时,他会失去能量,当他靠近食物时,他会获得能量。能量为 0 的特工死亡。神经网络的输入是智能体的当前角度和到最近食物的向量。每个时间步长,每个智能体的运动角度都会根据其神经网络的输出而改变。目的当然是观察一段时间后觅食行为的演变。然而,什么也没有发生。
不知道问题是神经网络的结构(太简单了?)还是繁殖机制:为了防止种群爆炸,初始种群大约是 20 个智能体,随着种群接近 50,繁殖机会接近零。当复制确实发生时,通过从头到尾遍历代理列表来选择父节点,并检查每个代理的 0 到 1 之间的随机数是否小于该代理的能量与总和之间的比率。所有代理的能量。如果是这样,则搜索结束并且该代理成为父代理,因为我们向环境中添加该代理的副本,该代理在其神经网络中的一个或多个权重中具有一定的突变概率。
提前致谢!
python - 在python中的对象上应用函数
我写了一个人工生命模拟。每个生物都是我定义的“动物”类的对象,具有一些属性。我在 Animal 类之外定义了一个函数“reproduce”:
可以看出,每只动物都有一个大脑,它是来自不同类别的对象:对于我定义的每只动物animals[i].brain = Brain()
。复制功能中的“变异”部分确保孩子的大脑与父母的大脑不同。
然而,问题是当我将这个函数应用于列表中的一些动物时,孩子确实得到了一些新的大脑,但是父母的大脑变得与孩子的新大脑相同。当我使用reproduce(copy.deepcopy(animals[i]))
而不是那样时reproduce(animals[i])
,不会发生。是什么原因?
谢谢!
scala - Akka 消息传递时间
我正在使用 Scala 和 Akka 进行人工生命模拟,到目前为止,我对两者都非常满意。我在时间方面遇到了一些问题,但是我无法完全解释。
目前,我模拟中的每只动物都是一对演员(动物+大脑)。通常,这两个参与者轮流进行(动物将传感器输入发送到大脑,等待结果,对其采取行动并重新开始)。然而,动物时不时地需要相互互动才能互相吃掉或繁殖。
对我来说奇怪的一件事是时机。事实证明,从一种动物向另一种动物发送信息比从动物向大脑发送信息要慢很多(大约 100 倍)。与素食者和无性动物相比,这使我可怜的捕食者和性活跃的动物处于不利地位(免责声明:我自己也是素食主义者,但我认为成为素食者有更好的理由,而不是在尝试打猎时陷入困境。 .)。
我提取了一个演示问题的最小代码片段:
这就是这里发生的事情:
- 我正在创造 50 对动物/大脑演员
- 它们都启动并运行 5 秒
- 每只动物做一个无限循环,轮流用它的大脑
- 在所有运行的 1% 中,一只动物向随机的其他动物发送 ping 并等待其回复。然后,它用它的大脑继续它的循环
- 对大脑和对等节点的每个请求都会被测量,这样我们就可以得到一个平均值
- 5 秒后,一切都停止,并比较大脑请求和对同伴的 ping 时间
在我的双核 i7 上,我看到了这些数字:
大脑请求的平均时间:0.004708ms(从 21073859 个请求中采样)
对等 ping 的平均时间:0.66866 毫秒(从 211167 个请求中采样)
因此,对同伴的 ping 比对大脑的请求慢 165 倍。我一直在尝试很多事情来解决这个问题(例如优先邮箱和预热 JIT),但无法弄清楚发生了什么。有人有想法吗?
artificial-intelligence - 无法向另一个 Jason 代理发送操作
我正在使用 Jason 语言在两个代理之间进行通信。但我无法使用发送操作,它给出了一个错误。
这是我的两个经纪人
代理1:-
特工2:-
因此,当我尝试在 agent1 中调用发送操作时出现错误,而 agent2 给出了接收错误。
更新
我收到此错误,
python - 如何在神经网络的输入中输入人工生命模拟中最近的物体?
我刚刚开始使用 Pybrain 在 Python 和 Pygame 中进行人工生命模拟(再次......我失去了另一个),我正在计划如何工作。到目前为止,我有一个带有一些“食物颗粒”的环境。每分钟添加一个食物颗粒。我还没有制作我的代理(又名“生物”),但我知道我希望他们有简单的前馈神经网络,带有一些输入,输出将是它的运动。我希望输入显示他们面前的东西,有点像他们正在看到他们面前的模拟世界。我该怎么办?我要么希望他们真正“看到”他们视线中的颜色,要么只是将最近的物体输入到他们的 NN 中。哪一个最好,我将如何实施它们?