Done add snake

This commit is contained in:
Yong Zhu 2020-06-26 20:06:50 -06:00
parent 18b52aaeea
commit 447efca67b
8 changed files with 15 additions and 8 deletions

View File

@ -90,11 +90,14 @@ Frog: 这是人工生命的主体,目前起名叫青蛙(Frog),其实叫什
另外,这次更新加强了暂停功能,可以在脑图任一时刻暂停,并加上了脑图的剖面显示。所有脑图快捷键有: T:顶视 F前视 L:左视 R:右视 X:斜视 方向键:剖视 空格:暂停 鼠标操作:缩放旋转平移
![result6](result6_letter.gif)
2019-11-26 优化了一下程序,用"对酒当歌人生几何"8个汉字来进行模式识别原理演示但容错性依然没有变形、变位后的文字识别率很差。以后要考虑借签算法中的侧抑制、卷积、分层等原理来提高它的容错性用图形化模拟的方式来实现。总体上算法和图形化模拟是两条路算法通常可以用模拟的方式来表达但不是所有模拟都可以归纳成算法因为模拟(或者说软件本身)有时会非常复杂,不容易总结出规律。也就是说模拟的表现力比算法更强,但模拟的缺点是资源消耗大。
2019-12-27 开始设立history目录给主要的版本直接在history目录下创建副本以方便运行。在history\003a_legs目录下依然是2维脑)尝试给青蛙加两条腿看它能不能自动学会走路。一条腿位于下方负责左右移动一条腿位于右侧负责上下移动每条腿有抬腿、落腿、转动和相应的感觉细胞。只有当腿落下且转动而且另一条脚抬起来时青蛙才会位移具体什么时候抬腿、什么时候转动腿完全由随机数决定。经过一段时间的生存汰淘之后青蛙会进化出会利用两条腿走路了但需要的时间非常长约几个小时之后才达到最高吃食率50%左右,走路风格也比较诡异,是小碎步而不是大踏步。但至少这是青蛙第一次利用两条腿来走路,还是有点意义的,这证明生命进化中就算神经元随机排布,进化出眼睛和腿也是非常简单自然的事。
2019-12-27 开始设立history目录给主要的版本直接在history目录下创建副本以方便运行。在history\003a_legs目录下依然是2维脑)尝试给青蛙加两条腿看它能不能自动学会走路。一条腿位于下方负责左右移动一条腿位于右侧负责上下移动每条腿有抬腿、落腿、转动和相应的感觉细胞。只有当腿落下且转动而且另一条脚抬起来时青蛙才会位移具体什么时候抬腿、什么时候转动腿完全由随机数决定。经过一段时间的生存汰淘之后青蛙会进化出会利用两条腿走路了但需要的时间非常长约几个小时之后才达到最高吃食率50%左右,走路风格也比较诡异,是小碎步而不是大踏步。但至少这是青蛙第一次利用两条腿来走路,还是有点意义的,这证明生命进化中就算神经元随机排布,进化出眼睛和腿也是非常简单自然的事。这个实验只给青蛙加了两条腿,但同理如果有四条或更多的腿它应该也是可以随机进化出来的。
![result7](result7_legs.gif)
2020-05-04 在进行3维脑改造过程中发现找食率很低发现自己也看不懂以前的程序怎么编的了所以在history目录下又添加一个003b_simple目录把2维脑简化一下去掉不重要的器官好仔细分析它的逻辑。
2020-05-07 经过一番折腾和走弯路之后最后还是原汁原味地将2维脑003b目录的逻辑搬到了3维脑core目录里了实现了同样的找食率(~50%左右)。从现在开始可以专注于改进3D脑本身了。另外README_ENG.md和开发思路.md这两个不重要的文档不再提交到码云。
2020-06-26 添加了一个小蛇到虚拟环境中吃青蛙,设定小蛇只能看到青蛙,青蛙只能看到蛇(严格说是蛇的舌头)。可以看到小蛇会追着青蛙,而青蛙会躲开小蛇,当然也有躲不开被吃掉的。除了引入负值连线用蓝色线条来表示外,技术细节上倒没有什么突破,但这个实验有趣的地方在于它证实了就算是完全随机的排列脑细胞,在长期的优胜劣汰后,生命也会进化出捕食和逃避行为。即然可以进化出捕食和逃避行为,而生命进化又会向越来越复杂的方向进化,所以这个原理可以解释为意识的萌芽了。高等生命的意识,本质上也无非就是大自然随机运动产生的一种复杂现象而已。
![result8](result8_snake.gif)
下一步的工作将移回到体全息存贮的模式识别,因为青蛙需要这个模式识别功能来更好地分辨出蛇和食物的区别,而体全息存贮个人感觉有很多潜力可挖,它有两个最大的优点:一是可以小样本学习,二是可以同时处理多维的信息输入输出。
## 运行方式 | Run
运行core或history各个子目录下的run.bat批处理文件即可启动运行history下有多个子目录按时间顺序按列存放着这个项目演化过程中的主要历史版本供演示。
另外如果想要研究这个项目的任一旧版本可以结合gitk命令和参考"版本提交记录.md"的介绍用git reset命令回复到以前任一个版本例如用:

View File

@ -4,7 +4,7 @@
<groupId>com.gitee.drinkjava2</groupId>
<artifactId>frog</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<version>2.0.3</version>
<name>frog</name>
<description>An artificial life test project</description>

View File

@ -58,7 +58,7 @@ public class Env extends JPanel {
public static final int ENV_HEIGHT = ENV_WIDTH; // 虚拟环境高度, 可调通常取正方形
/** Frog's brain display width on screen, not important */
public static final int FROG_BRAIN_DISP_WIDTH = 600; // Frog的脑图在屏幕上的显示大小,可调
public static final int FROG_BRAIN_DISP_WIDTH = 400; // Frog的脑图在屏幕上的显示大小,可调
/** Steps of one test round */
public static final int STEPS_PER_ROUND = 2000;// 每轮测试步数,可调

BIN
eggs.ser Normal file

Binary file not shown.

View File

@ -27,10 +27,10 @@ import com.github.drinkjava2.frog.util.RandomUtils;
@SuppressWarnings("all")
public class Env extends JPanel {
/** Speed of test */
public static final int SHOW_SPEED = 800; // 测试速度-1000~1000,可调, 数值越小速度越慢
public static final int SHOW_SPEED = 50; // 测试速度-1000~1000,可调, 数值越小速度越慢
/** Delete eggs at beginning of each run */
public static final boolean DELETE_EGGS = true;// 每次运行是否先删除保存的蛋
public static final boolean DELETE_EGGS = false;// 每次运行是否先删除保存的蛋
public static final int EGG_QTY = 25; // 每轮下n个蛋可调只有最优秀的前n个青蛙们才允许下蛋

BIN
result7_legs.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

BIN
result8_snake.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

View File

@ -191,7 +191,8 @@ T:顶视 F前视 L:左视 R:右视 X:斜视 方向键:剖视 空格:
### 2019-12-05 commit: add history folder
重整理了一下目录将当前工作版本放在core目录下, 比较重大的历史版本放在history目录下以方便初学者直接运行各个历史版本而不需要使用git reset命令去手工回到以前的历史版本。同时如果有未完成的子功能研究如模式识别见005_letter_test目录)也可以开一个子目录在history里以后有时间再去慢慢研究这个子功能。
### 2019-12-27 在history\003a_legs目录下尝试给青蛙加两条腿看它能不能自动学会走路。一条腿位于下方一条腿位于右侧每条腿有位置感觉细胞、抬腿、落腿运动和感觉细胞转动腿运动细胞。只有当腿落下且转动时青蛙才会位移。经过一段时间的生存汰淘之后青蛙自动进化出会利用腿走路了但效果不太理想找食效率不高往往只能朝一个方向利用单条腿前进但至少这是青蛙第一次利用腿来走路有兴趣的可以运行试试看。
2019-12-27 在history\003a_legs目录下依然是2维脑)尝试给青蛙加两条腿看它能不能自动学会走路。一条腿位于下方负责左右移动一条腿位于右侧负责上下移动每条腿有抬腿、落腿、转动和相应的感觉细胞。只有当腿落下且转动而且另一条脚抬起来时青蛙才会位移具体什么时候抬腿、什么时候转动腿完全由随机数决定。经过一段时间的生存汰淘之后青蛙会进化出会利用两条腿走路了但需要的时间非常长约几个小时之后才达到最高吃食率50%左右,走路风格也比较诡异,是小碎步而不是大踏步。但至少这是青蛙第一次利用两条腿来走路,还是有点意义的,这证明生命进化中就算神经元随机排布,进化出眼睛和腿也是非常简单自然的事。这个实验只给青蛙加了两条腿,但同理如果有四条或更多的腿它应该也是可以随机进化出来的。
![result7](result7_legs.gif)
### 2020-06-03 加入小蛇Snake进来吃青蛙未完成
基本思路是小蛇是有形状的,青蛙要能进化到看到小蛇就跑开,这样就开始正式引入了模式识别
@ -199,4 +200,7 @@ T:顶视 F前视 L:左视 R:右视 X:斜视 方向键:剖视 空格:
### 2020-06-19 正式完成加入小蛇进来有多处bug改进
蛇只能看到青蛙青蛙只能看到蛇的图形。并改core目录下项目包名从github到gitee(码云),负值连线、中间连线引入,用一条斜线来暂时代替蛇的图形,好开始模式识别。
### 2020-06-20 更正SnakeBigEye的bug,并显示为两条线代表蛙的图像(或舌头),便于简化模式别。
### 2020-06-20 更正SnakeBigEye的bug,并显示为两条线代表蛙的图像(或舌头),便于简化模式别。设定小蛇只能看到青蛙,青蛙只能看到蛇(严格说是蛇的舌头)。可以看到小蛇会追着青蛙,而青蛙会躲开小蛇,当然也有躲不开被吃掉的。除了引入负值连线用蓝色线条来表示外,技术细节上倒没有什么突破,但这个实验有趣的地方在于它证实了就算是完全随机的排列脑细胞,在长期的优胜劣汰后,生命也会进化出捕食和逃避行为。即然可以进化出捕食和逃避行为,而生命进化又会向越来越复杂的方向进化,所以这个原理可以解释为意识的萌芽了。高等生命的意识,本质上也无非就是大自然随机运动产生的一种复杂现象而已。
![result8](result8_snake.gif)
2020-06-26 更新readme.md. 下一步的工作将移回到体全息存贮的模式识别,因为青蛙需要这个模式识别功能来更好地分辨出蛇和食物的区别,而体全息存贮个人感觉有很多潜力可挖,它有两个最大的优点:一是可以小样本学习,二是可以同时处理多维的信息输入输出。