frog/history/014_3cells
2023-09-29 08:06:17 -06:00
..
src/main/java/com/gitee/drinkjava2/frog Done 014, copy to history\014 folder 2023-08-26 11:42:58 -06:00
LICENSE Done 014, copy to history\014 folder 2023-08-26 11:42:58 -06:00
maven_clean.bat Done 014, copy to history\014 folder 2023-08-26 11:42:58 -06:00
maven_eclipse_clean.bat Done 014, copy to history\014 folder 2023-08-26 11:42:58 -06:00
maven_eclipse_eclipse.bat Done 014, copy to history\014 folder 2023-08-26 11:42:58 -06:00
pom.xml Done 014, copy to history\014 folder 2023-08-26 11:42:58 -06:00
README.md Update readme for history015_testinput3 2023-09-29 08:06:17 -06:00
run.bat Done 014, copy to history\014 folder 2023-08-26 11:42:58 -06:00
run.sh Done 014, copy to history\014 folder 2023-08-26 11:42:58 -06:00

2023-08-25 三个细胞一台戏
本次更新在目录history\014_3cells下。在上次更新里已经说过了为了实现模式识别可以先从最简单的几个细胞的场景开始做起。于是就一路简化最终简化到只剩下三个细胞分别为视细胞、咬细胞、忆细胞。 实验目的是要达到这样一个效果,当食物出现时,视细胞激活,然后视细胞在忆细胞上打个洞,咬细胞则随机激活,然后也在忆细胞上也打个洞,最终实现的效果将会是视细胞激活忆细胞,然后忆细胞在洞上反向发送能量给咬细胞,这样就实现了视细胞到咬细胞的短路,形成一个最简单的条件反射。忆细胞的作用是隔离视细胞和咬细胞,防止形成视细胞直接驱动咬细胞这种简单连接。任务看起来很简单,但做起来就不太美好了,快两个月了才有点进展,先更新上来再说。
pic1 pic2 pic3
上面从左到右三个图分别是对应三种场景下青蛙的行为1奖惩值都很大2奖励值远比惩罚值大3只有奖励没有惩罚。
奖励是当咬下时正好有食物惩罚是当咬下时食物不存在咬了个空。测试时请修改Genes.java源码第138行进行不同惩罚值的调整。可以看到根据奖罚值的不同三个细胞进化出的神经网络参数是不同的奖惩值都很大时细胞就会躺平多咬多错还不如不咬以避免惩罚奖励值远比惩罚值大时细胞就会比较活跃没有食物时也经常空咬当完全没有惩罚时细胞就会放飞自我直接在咬细胞和忆细胞之间进化出信号循环回路锁定全程都在咬而且最过分的是干脆忽略掉视觉信号把视细胞和忆细胞之间的连线直接用一个负值(蓝色)参数来掐断。

这次更新的主角不是分裂算法(因为就三个细胞,谈不上结构了)而是全局常量。本次程序中控制细胞特性的全局参数有7个分别是
视细胞激活后产生多大强度的能量?
咬细胞激活后产生多大强度的能量?
每个细胞激活后能量随时间流逝,每一步会遗失多少能量?
咬细胞激活后向记忆细胞传送多少能量?
视细胞激活后向记忆细胞传送多少能量
忆细胞激活后反向向视细胞传送多少能量?
忆细胞激活后反向向咬细胞传送多少能量?
这些全局参数是跟随青蛙终身的,一旦青蛙孵化出来就不再动了,在程序里把所有常量放在一个数组里用遗传算法来控制基本规则是小变动有大概率发生大变动有小概率发生。青蛙的参数分为两类一类是与空间位置相关的如脑细胞是否会出现在某个空间位置一类是与位置无关的如每个细胞激活后向其它细胞发送多少能量。前者要放到分裂算法里用一串8/4/2叉基因树来控制空间分布后者就没必要这么浪费了直接用一组全局数字表示即可并用遗传算法来随机变异和筛选它们。在给神经网络编程时如果碰到可以用全局常量来控制的参数尽量不要手工赋值而要用遗传算法来控制因为多变量的优化组合筛选靠人力是不可能做好的。就拿这个例子来说我压根不知道这些参数将会是多大是正还是负但是我知道应该有这些参数这就够了。人工生命项目编程不讲究精准思维模式要从传统的精细化编程转变为以概率、笼统、可能为导向的思维大方向人为确定细节交给电脑去算这和大自然用遗传算法来筛选出脑细胞的参数是一个道理。

从本次更新可以看到,青蛙是工作在一个连续的信息流下面,信息是以脉冲方式在细胞之间互相传递大小不等的能量,可以说是一个最简单的脉冲神经网络大脑了。这个实验不很实美,没有实现一个不漏地吃掉食物但是又不空咬这个目标,但是人生苦短,我不想继续和这三个细胞缠斗下去了,后面将转到多个视觉细胞和引入苦甜奖惩信号细胞来影响洞(权重)的大小,这个会更有趣、更智能,也更接近模式识别任务。我认为通用智能就是模式识别与行为输出结合起来的系统,如果奖罚细胞和行为输出细胞在一开始就做为这个模式识别系统的一个组成部分,并且由遗传算法来筛选参数,那通用人工智能就不远了。