人工生命 2.0.4 更新:语言的诞生和细胞分裂画小蛇

栏目: 软件资讯 · 发布时间: 3年前

内容简介:Frog | 人工生命 (https://gitee.com/drinkjava2/frog) 码云上唯一个一个把往生咒写在源码里的开源项目又更新啦,这次更新主要是完成了两个小开发任务,有兴趣的同学们可以看一看。 2.0.4版更新内容一:语言的诞生...

Frog | 人工生命 (https://gitee.com/drinkjava2/frog)  

码云上唯一个一个把往生咒写在源码里的开源项目又更新啦,这次更新主要是完成了两个小开发任务,有兴趣的同学们可以看一看。


2.0.4版更新内容一:语言的诞生

2020-09-13任务发布和描述:见下图,如果有兴趣的同学可以尝试一下看能不能做出来:
人工生命 2.0.4 更新:语言的诞生和细胞分裂画小蛇
说明:详见图片,通过模拟一个虚拟的环境来淘汰青蛙,只有当青蛙进化出能够在震心的位置发出叫声,其它的青蛙能听到这个叫声跳在空中躲避震波时,青蛙的生存机率才会变高,但是跳起来也会消耗能量,只有听到报警后跳起来才正好。如果这个实验能做成功,就可以证明生物即使脑神经元随机排列,也会进化出发音和听力器官,这是挺有意义的,因为这是一个群体进化,对于单个青蛙来说,进化出能叫,或是能听到声音对它自己是意义不大的,但是对于群体的生存有利,这个进化相当于是语言和听力的萌芽。整个虚拟环境的设定,就是要逼迫这种群体进化现象产生出来,个人认为是有大概率能做出来的。这里说进化出器官,不是变出来,而是模拟生物体偶然变异出了听力细胞和发音器官,这个是没问题的,问题的重点在于听力细胞和发音器官是如何在进化过程演变成脑神经网络的一个组成部分的。  
2021-01-23 语言的诞生。好不容易,告别漫长的2020,去年出的题目我自己解出来了,下面是答案,运行根目录或core目录下的run.bat,可能看到类似下面的运行画面:
人工生命 2.0.4 更新:语言的诞生和细胞分裂画小蛇
详细解说:这个题目的模拟环境被简化成左右两个区,设定地震发生时(用红框表示)会扣除所有青蛙的能量,但是只有位于左侧的青蛙可以看到地震发生和停止,右区的青蛙不能看到地震发生和停止,但是青蛙有发音器官和听音器官,如果左侧的青蛙发出叫声是可以被右侧的青蛙听到的。看到地震发生、看到地震停止、发出叫声、听到叫声、跳起、落地这6个器官分别对应6种器官并都偶然进化出来(这个无需证明),这个实验的目的是要验证青蛙会不会在环境逼迫下,在这6种器官对应的脑细胞间形成神经关联。结果可以看到,左侧的青蛙看到地震后,跳在空中(用黄色表示),并发出叫声,然后右侧的青蛙听到叫声后也跳在空中。左侧的青蛙通过叫声信号传递了信息给右侧的青蛙,从而让右侧的青蛙避开了它看不见的地震伤害。这是一个成功的群体进化的演示,它证明了即使是随机生成神经细胞连线,也可以进化出生物的发音-听力功能,也就是说进化出初步的语言功能。
另外说一下,这个运行结果可能要运行多次才有可能遇到,这个可以用群友"背叛的细胞膜"提到的自然界的“顶端优势”来解释,生物进化有可能陷入局部最优解而绕不出来,对自然界来说就是没找到最优解的生物种群可能会被汰淘,存在即合理。

2.0.4版更新内容二: 细胞分裂的演示
这是我在微信群里发布的一个小任务, 还没来及更新到这里,群里的pama_1234就做出来了,编程速度不是一般的快,顺便说一下,他现在还只是高一,现在的后浪都这么历害了。  
任务很简单,就是画出类似下图小蛇形状的就赢了。要求:
1.小蛇至少30x30象素,有眼睛和舌头,反正一眼看上去要象一条蛇的样子,最好不要画脚(注:于是最终结果是没有画出脚 ,便是画出了角)。
2.要求使用遗传算法和分裂算法,遗传算法大家都了解了。分裂算法我现在只有一个大致的思路,就是模仿细胞分裂,来演化出不同的形状。分裂可以是把别的细胞推开,也可以是只在边沿分裂以减少运算量,这个不限。
3.画出“蛇”、“青蛙”的汉字也可以
奖品暂时没想好,但肯定会放在项目主页上的。这个任务看起来和神经网络关系不大,但我觉得有可能利用这个算法来进行器官自动排布,所以还是有一定的意义的,任意复杂的形状生成,今后三维脑的细胞结构,都有可能从这个任务演化出来。
输出结果((pama_1234编写):
人工生命 2.0.4 更新:语言的诞生和细胞分裂画小蛇
他的项目位于这里:细胞画蛇, 有兴趣研究源码的可以看一看,是基于processing软件编写的。
顺便我把我的构思也写在这里,我没有仔细研究他的代码,但估计思路应该大体一致:
1.与形状表达相关的基因采用多叉树结构数据结构,树结构是单例,只保存1份在内存中,每个细胞分裂后,端粒酶减一,相当于从树结构往下走一级。
2.每个细胞分裂后,为了获得当前细胞的位置,但是又不能复制整个子树,所以要保存一个指针,指向树的当前节点,即子树的顶点。不再分裂的节点可以不保存节点指针。
3.基因树总体稳定,但有大概率小变化,小概率大变化,基因树变化包括数量重复、分叉方向、分叉数量。
4.因为是多叉树,可以从任意一点开始作为受精卵开始分裂,最后都可以形成指定的图形。

画小蛇本身任务很简单,就是个填充色块的任务,用window里的画图笔刷不到半秒就可以搞定,之所以要把它当成一个任务来做,并限定用细胞分裂的方式,是因为大自然的解决方案不是用什么人为设计的算法,而是只有一招就是细胞随机的分裂、遗传和变异,现在看起来这个分裂模拟还是比较容易实现的,大致上解释了自然界生物各种形态生成的原因。

2021-05-15 顺便发布下一个开发任务:青蛙吃蘑菇 

  1. 青蛙要根据不同的画案区分有毒无毒的蘑菇。蘑菇用随机生成十种不同蘑菇图案来表示,这些蘑菇中有一半无毒,另一半有毒。
  2. 要利用体全息存储或面全息存储方案来进行蘑姑图案识别。体全息存储参见005_letter_test示例;面全息存储方案可以参考激光全息存储方案,和体全息的区别是信息是保存在一个平面上,而不是一个立体间里,相同点是利用入射光和出射光位置信息进行存储和读取,入射光和出射光互为参考信号。
  3. 要在现有的 Java 项目界面下进行,也就是说,要显示虚拟环境和脑图,源文件名必须为.java后缀。这个和细胞分裂的演示不一样,这个任务是项目的主线任务了。
  4. 蘑茹有毒还是无毒是与图案相关的,但是有毒还是无毒必须由青蛙在进化过程中自动判断出来,不能由人为来设一个有毒的信号告诉青蛙(青蛙之间互传信号不在这个限制)。任务完成的标志是青蛙们要能进化成吃掉虚拟环境里的所有无毒蘑茹,避开所有有毒蘑菇。 

    另外说明一下,本项目是外行根据自已的理解进行的神经网络探索试验项目,学术性和严谨性不够,项目思路仅供参考,欢迎指出问题或参与项目开发,谢谢!   

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高效前端:Web高效编程与优化实践

高效前端:Web高效编程与优化实践

李银城 著 / 机械工业出版社 / 2018-3-15 / 89.00元

这不是一本单纯讲解前端编程技巧的书,而是一本注重思想提升和内功修炼的书。 全书以问题为导向,精选了前端开发中的34个疑难问题,从分析问题的原因入手,逐步给出解决方案,并分析各种方案的优劣,最后针对每个问题总结出高效编程的最佳实践和各种性能优化的方法。 全书共7章,内容从逻辑上大致可以分为两大类: 第一类,偏向实践,围绕HTML、CSS、JavaScript等传统前端技术,以及PW......一起来看看 《高效前端:Web高效编程与优化实践》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具