1 Star 1 Fork 658

boobor / 人工生命

forked from drinkjava2 / 人工生命 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
版本提交记录.md 5.86 KB
一键复制 编辑 原始数据 按行查看 历史
drinkjava2 提交于 2019-06-13 01:32 . Happy & Pain

版本提交记录

2018-1-3

项目启动,主要是文字方面的一些构想。

2019-3-11 1.0.0版, Commit:Go frog go!

开发环境完成,演示第一个人工生命诞生。但是所有Frog脑部为空,因为运动神经元被短路,只能固定向一个方向运动。
这是第一个发布版,演示了生命的随机进化和优胜劣汰。

2019-3-18, Commit:Brain picture!

添加了脑结构图形,用于调试用,可以显示第一个胜出的Frog的脑结构,但是运动神经元依然被短路,只能固定向一个方向运动。
有了脑结构图,就可以防止所有Frog都被淘汰掉,还不知道问题发生在哪里。可以有针对性地改进进化算法、环境的参数改进。

2019-03-20, 1.0.1版, Commit:Add a button

添加了一个按钮,可以显示、隐藏第一个胜出的Frog的脑结构图,但是运动神经元依然被短路

2019-03-21, 1.0.2版, Commit:I'm hungry

在脑区添加Hungry,删除随机运动的硬编码,改成由Hungry区来驱动,一旦frog能量小于10000,hungry区的所有脑神经元的input区激活,如果这些神经元的输出区位于move区,则作相应的移动。这是一个更随机一点的运动,不再总是固定向一个方向。

2019-03-27, 1.0.3版, Commit:Shrink & Sperm

添加了"卵+精子->受精卵"的模拟,这是为了实现生物多样性。添加了每次添加一批随机神经元,但是只保留激活过的,如果某组神经元从没被用到(激活过),则有很大的可能不会将这组神经元添加到蛋中(用进废退规则)。

2019-03-29, Commit:Rainbow

更正一个小Bug,BrainStructure的zone显示的半径是实际的一半,用彩虹色而不是随机数来表示CellGroup的细胞数量,色彩越靠后表示细胞数越多。

2019-04-01, Commit:Cleanup

做一些debug清理,每个Frog不再保留egg的副本,“卵+精子->受精卵”算法改进一下,不能简单两两相加,而是随机取一个精子的cellgroup。

2019-04-06, Commit:Windows align

还是做一些清理, 可以自由调整虚拟环境、脑图的显示大小。下面的打算是将mouth、leg、hungry等区移到蛋里去,允许进化,而不是作为Frog的硬编码存在。

2019-04-07, Commit:Organ

引入Organ类,将mouth、leg、hungry等作为Organ器官移到蛋里去,而不是作为Frog的硬编码存在,这样架构更清晰,而且便于以后将Organ参与遗传、变异、进化。

2019-04-08, Commit:Eye shortcut

添加眼睛,能够看到四个正方向的食物,但是自然选择的结果是眼睛和移动区短路了,眼睛起的作用并不大,因为如果有两个方向同时出现食物,目前青蛙是不能判断的。 下面要考虑逻辑了,也就是思考判断能力(后天条件反射的建立)。

2019-04-12, Commit:Random frog

没做大改动,只是将青蛙改成按整个地图随机分布,看起来眼睛的作用就比较明显了,比起随机运动,明显食物被吃掉更多。

2019-05-23, Commit:2 eyes no helps

没做大改动,只是演示添加两个眼睛后,对它的进化没有帮助,到此为此,逐渐看出问题了,没有记忆能力和模式识别能力。目前存在两个比较大的硬编码,导致它不能进一步进化:1.用CellGroup这种硬编码方式,导致在Frog的生存期不能产生记忆功能,而需要多次淘汰,这不符合现实中青蛙从小学到大这样的实际过程,它不需要死很多次。另一个问题是眼睛部分存在硬编码,因此只能起到感光作用,但是不具备根据外在图像进行模式识别能力。所以下面要开始进行非常大的结构改进,。将把CellGroup作为器官引入,但是它的内部细胞是动态生成的,而且不是随机生成的,而是任两个细胞在它的区内活跃就生成新的细胞(将来也可以参与新建细胞)。CellGroup的数量、大小、网格密度(直接影响到神经元生成多少和算法快慢)会参与遗传和进化,快乐和痛苦器官会对新细胞生成的类型有影响。fat参数用来指示它的肥胖度。Fat高的遗传时会保留,并可能变大、变小、内部允行连接数更多、分化成更多CellGroup,但是它的内部连接(新建的细胞)不会参与遗传,这样每个个体都出生时都是一张白纸,虽然也许CellGroup已经进化得很多层很复杂。同一个位置可以存在多个CellGroup,这样由多层大小、位置不同的Layer就同时具备了模式识别和记忆功能,而且这个算法比较简单,很好理解。大范围的Cellgroup可以解释条件反射的形成(两件不相干的事之间形成联系),小范围的Cellgroup可以解释模式识别(相邻感光细胞同时激活,经过层层处理后,汇总到最上层的某个Cellgroup的激活)。而所有这些CellGroup的形成(结构和层级)都可以用非常简单的"用进废退"规则(Fat值控制遗传、随机变异和适者生存来探索最优解)来最终进化出来。

2019-06-13, Commit: Happy & Pain

主要做了一些清理,将所有器官移到单独的类里,删除OrganDesc类。将一些类(如Applicaton移到根包下)移到不同的包下。这个版本是比较大的一个重构,最大的进步是将算法当成一个器官引入,当然,这个版本只存在一个随机连接两端的算法,以后会扩充。 另外,顺手加上了Happy和Pain两个器官,分别对应进食愉快感和痛苦感,后者在靠近边界时激发。观查它的表现,果然不出所料,痛苦感立即生效,有一些Frog移动到边界后就不再前进,而是顺着边界溜下去了,不傻,但是Happy器官没有生效,这也很显然,因为Happy属于进食反射链的一部分,在没有记忆器官(算法)引入之前,是没有途径使用上进食奖励信号的。

Java
1
https://gitee.com/boobor/frog.git
git@gitee.com:boobor/frog.git
boobor
frog
人工生命
master

搜索帮助