mirror of
https://gitee.com/drinkjava2/frog.git
synced 2024-11-25 16:04:06 +08:00
Done add snake
This commit is contained in:
parent
18b52aaeea
commit
447efca67b
@ -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命令回复到以前任一个版本,例如用:
|
||||
|
@ -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>
|
||||
|
@ -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;// 每轮测试步数,可调
|
||||
|
@ -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
BIN
result7_legs.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 211 KiB |
BIN
result8_snake.gif
Normal file
BIN
result8_snake.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 260 KiB |
@ -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. 下一步的工作将移回到体全息存贮的模式识别,因为青蛙需要这个模式识别功能来更好地分辨出蛇和食物的区别,而体全息存贮个人感觉有很多潜力可挖,它有两个最大的优点:一是可以小样本学习,二是可以同时处理多维的信息输入输出。
|
Loading…
Reference in New Issue
Block a user