Go frog go!

pull/1/head
Yong Zhu 6 years ago
parent f0373832bd
commit 2fac4ae408

@ -31,28 +31,12 @@ Frog: 这是人工生命的主体,目前起名叫青蛙(Frog),其实叫什
* 视觉器官: 这是脑模型的一部分,在实验中先固定随意取脑中心位置(0,0)点附近的神经元区作为视觉区。
* 脑器官: 这即是程序员要解决的问题,也是我们要获取的最终目标。脑模型的生成由电脑优胜夯汰、循环迭代进化生成,但这个进化的算法还是必须由程序员来掌控,一步步探索出来,即要防止虚拟环境太复杂,也要避免脑模型不适应环境,生命体全部被淘汰,导致实验中断,无法进行下去。
## 技术细节和一些构思
## 技术细节和构思
* 通过数组来模拟神经网络用串行的循环来模拟并行芯片运作方式。用Frog的能量多少来衡量是否将它淘汰还是允许它产生后代(下蛋)参与下一轮的测试,因为这个项目的目的是获取智能体,与一般的生命游戏还是有区别的,并不是适者生存就结束了,而是必须完成一系列程序员设定好的目标,一步步进化,直到表现出自我意识现象为止。
* 脑模型的生成算法通过简单的神经元连接完成,原则上不允行出现任何形式的硬编码(除模式识别外),因为硬编码可能会破坏“随机变异”这一生命特性。
* 为简单起见暂不考虑引入GPU图形芯片进行加速, 欢迎能接触到超级计算机的同学加入,随着虚拟环境的复杂度和神经元数量增多,对电脑速度要求会越来越高。
* 暂选用Java语言实现
* 将来训练者和生物体可以对话表现形式为弹出一个24x24点阵图形每次只能弹出一种图形。训练者由人或电脑操纵生物体则可以任意自主行动和说话(输出任意图形),训练者和生物体具有相似权限的输出(开始阶段输出图形仅限于100个汉字和数字),行动仅限于说话、移动、打击、保存食物、拿出食物。
* 训练者在生物体模拟正确或行为(输出文字或图形,行走,吃,睡等)正确后,给予食物奖励。训练者在生物体说话或行为错误时,不给予奖励或给予打击惩罚。
* 人类大脑的工作机制必然是简单的它不可能拥有象现代CPU那样精密的构造一个三极管损坏将整个停摆。由一个受精卵发育成的人脑上百亿个脑细胞的形成必然遵迿一些简单的规律。
* 人类大脑的工作机制必然与规模有关,否则无活解释为何人的脑细胞为何需这么多、从不退化。(生物体活动多的细胞会影响到DNA遗传表现为用进废退并不全是100%随机的。)
* 以上简单性和规模两点决定了基因的设计体现在程序中就是Frog可以下蛋蛋就是Frog的脑结构的精简版可以存盘。蛋可以用来孵化出下一代的Frog。
* 生物体具有天生痛觉区(一种固有的神经元兴奋区,此区兴奋将导致神经元群的工作集中于将短期内形成的神经元联系与负反愧兴奋区发生强烈关联,这就是痛觉的本质)和天生愉悦区(一种固有的神经元兴奋区,此区兴奋将导致短期内形成的神经元联系获得加强)。
* 生物体具有思考区,思考区与视觉区(和将来要加入的听觉区)联系紧密,思考区可以将视觉或内部细胞区的兴奋联系起来,思考区内容是暂时的,很快由新的内容代替,思考区既属于输入区,也输于输出区,思考区的所有内容将自动被大脑的某个空闲区存贮一段时间。
* 思考区内容由天生驱动区(痛觉、愉悦区)及后天形成的驱动区驱动,工作于串行方式,相当于人类的“心无二用”现象。大脑神经网络的检索和保存机制是并行的,可以从上亿个神经元中快速并保存与当前思考区相关联的内容,但是思考区的本身的活动却是串行的。
* 思考区检索关联信息时,最近活跃过的细胞存储区优先兴奋(被检索出),既使在做梦中也是这样。
* 模拟生物体的输出细胞区有说话区(24x24点阵网格)、上下左右行走区、张嘴及吞咽区、攻击区,移动视觉聚焦区,保存物体区。
* 条件反射的建立是重点,任意两个兴奋区兴奋,都会导致位于它们中间的一个空白兴奋区形成与这两个区的联系,时间影响条件反射的建立。短期内形成的神经元联系快速消退,反复发生的神经元联系被加强。条件反射形成后,如没有复习,则随时间流逝而减弱直至消失。
* 具有一种天生的(生物体的DNA遗传信息带来的)但比较弱的本能,能够重复训练者的行动和文字输入,如果训练者从左到右写一横,它也能本能模仿写一横,输入和输出区的每个象素点对应它的一组输入和输出天生神经元兴备群。
* 有一种机制保证永远至少有一个驱动型兴奋区占优(用于驱动思考区),如果什么也没发生,“闲得无聊,要找点事干”区或做梦区兴奋。
* 有可能做梦,做梦过程的目的:
1. 节省能量,让大脑的思考区维持单线程低功耗工作(但不至于死机,可以接收各种输入信号并醒过来),生物脑是没有重启键的。
2. 给大脑一段空闲时间进行整理工作,将最近发生的事件拿出来在思考区复习一遍,并进行推演,试图与旧的存贮内容内容发生关联,以形成新的条件反射。(创造力思维的产生,来源于不相干的细胞区被联系起来。) 这个过程实际上白天也在发生,只是白天的目的性太强,不象做梦这么自由。
3. 旧的存贮内容在推演过程中得到强化,不至于被遗忘,始终得不到推演机会的存贮内容将随时间流逝被彻底遗忘(丢失)。始终得不到推演机会的存贮内容一定是无用的内容。
* 更多的杂七八拉的一些想法和构思放在“开发思路.md”、“一个人工脑模型.md”等文里。
## 项目要实现的短期和长远目标
* 脑模型和虚拟环境的初步搭建 [脑模型刚开始搭建。虚拟环境已完成点击run.bat可以查看演示]
@ -79,24 +63,24 @@ Frog: 这是人工生命的主体,目前起名叫青蛙(Frog),其实叫什
2019.03.11 虚拟环境已建好,可以模拟低等生命的遗传、繁殖、变异、进化现象,但目前只能往一个方向运动,相当于一个最简单的单细胞生物,还不具备视觉能力,不具备主动找食能力。
运行run.bat可以查看演示。Env.java中的几个重要参数说明:
* SHOW_SPEED 调整实验的速度(1~1000),值越小则越慢。
* EGG_QTY: 每次允许Frog下多少个蛋通常取值在10~1000之间。蛋保存着我们测试的结果。实验的最终目标就是获得一个蛋。
* FOOD_QTY食物的数量食物越多则Frog的生存率就越高能量排名靠前的一批Frog可以下蛋其余的被淘汰。
另外每步演示的结果(egg)会存盘在根目根目录下名为egg.ser可以删除这个文件以从头开始新的测试。下面是这个测试的屏幕截图有兴趣的可以试着自己运行一下:
[截图](result.gif)
* EGG_QTY: 每次允许Frog下多少个蛋每个蛋可以孵出4个青蛙。通常下蛋取值在10~1000之间。蛋保存着我们测试的结果。实验的最终目标就是获得一个蛋。
* FOOD_QTY食物的数量食物越多则Frog的生存率就越高能量排名靠前的一批Frog可以下蛋其余的被淘汰。
下面是这个测试的动画截图,有兴趣的可以试着自己运行一下:
![截图](https://gitee.com/drinkjava2/frog/raw/master/result.gif)
另外每步演示的结果(egg)会存盘在根目根目录下名为egg.ser可以删除这个文件以从头开始新的测试。目前万里长征刚踏上第一步因为还没涉及脑模型的搭建。可以看到有些青蛙跑得飞快这是自然选择的结果因为跑在最前面的吃得多。以后会改正这个bug要让最聪明的、会抢食的Frog胜出而不是让跑得快的胜出。
## 版权 | License
[Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0)
## 期望 | Futures
欢迎发issue提出更好的意见或加入开发组一起来玩
欢迎发issue提出更好的意见或加入开发组一起来玩撸青蛙
## 作者其它开源项目 | Other Projects
- [Java持久层工具 jSqlBox](https://gitee.com/drinkjava2/jSqlBox)
- [Java持久层工具 jSqlBox](https://gitee.com/drinkjava2/jSqlBox)
- [微型IOC/AOP工具 jBeanBox](https://gitee.com/drinkjava2/jBeanBox)
- [服务端页面布局工具 jWebBox](https://gitee.com/drinkjava2/jWebBox)
- [前端写后端SQL工具 GoSqlGo](https://gitee.com/drinkjava2/gosqlgo)
- [MyBatis增强插件 MyFat](https://gitee.com/drinkjava2/myfat)
- [数据库方言工具 jDialects](https://gitee.com/drinkjava2/jdialects)
- [前端写后端SQL工具 GoSqlGo](https://gitee.com/drinkjava2/gosqlgo)
- [MyBatis增强插件 MyFat](https://gitee.com/drinkjava2/myfat)
## 关注我 | About Me
[Github](https://github.com/drinkjava2)

@ -1,3 +1,4 @@
call mvn clean compile
cd target\classes
java -classpath ".;*" com.github.drinkjava2.frog.env.Application
@pause

Binary file not shown.

@ -0,0 +1,5 @@
cd core
call mvn clean compile
cd target\classes
java -classpath ".;*" com.github.drinkjava2.frog.env.Application
@pause

@ -1,5 +1,23 @@
### 这个文件把些杂乱的开发思路汇总,写在这里作个备份
### 这里存放一些杂乱的思路,不成系统,但是丢掉又可惜
* 将来训练者和生物体可以对话表现形式为弹出一个24x24点阵图形每次只能弹出一种图形。训练者由人或电脑操纵生物体则可以任意自主行动和说话(输出任意图形),训练者和生物体具有相似权限的输出(开始阶段输出图形仅限于100个汉字和数字),行动仅限于说话、移动、打击、保存食物、拿出食物。
* 训练者在生物体模拟正确或行为(输出文字或图形,行走,吃,睡等)正确后,给予食物奖励。训练者在生物体说话或行为错误时,不给予奖励或给予打击惩罚。
* 人类大脑的工作机制必然是简单的它不可能拥有象现代CPU那样精密的构造一个三极管损坏将整个停摆。由一个受精卵发育成的人脑上百亿个脑细胞的形成必然遵迿一些简单的规律。
* 人类大脑的工作机制必然与规模有关,否则无活解释为何人的脑细胞为何需这么多、从不退化。(生物体活动多的细胞会影响到DNA遗传表现为用进废退并不全是100%随机的。)
* 以上简单性和规模两点决定了基因的设计体现在程序中就是Frog可以下蛋蛋就是Frog的脑结构的精简版可以存盘。蛋可以用来孵化出下一代的Frog。
* 生物体具有天生痛觉区(一种固有的神经元兴奋区,此区兴奋将导致神经元群的工作集中于将短期内形成的神经元联系与负反愧兴奋区发生强烈关联,这就是痛觉的本质)和天生愉悦区(一种固有的神经元兴奋区,此区兴奋将导致短期内形成的神经元联系获得加强)。
* 生物体具有思考区,思考区与视觉区(和将来要加入的听觉区)联系紧密,思考区可以将视觉或内部细胞区的兴奋联系起来,思考区内容是暂时的,很快由新的内容代替,思考区既属于输入区,也输于输出区,思考区的所有内容将自动被大脑的某个空闲区存贮一段时间。
* 思考区内容由天生驱动区(痛觉、愉悦区)及后天形成的驱动区驱动,工作于串行方式,相当于人类的“心无二用”现象。大脑神经网络的检索和保存机制是并行的,可以从上亿个神经元中快速并保存与当前思考区相关联的内容,但是思考区的本身的活动却是串行的。
* 思考区检索关联信息时,最近活跃过的细胞存储区优先兴奋(被检索出),既使在做梦中也是这样。
* 模拟生物体的输出细胞区有说话区(24x24点阵网格)、上下左右行走区、张嘴及吞咽区、攻击区,移动视觉聚焦区,保存物体区。
* 条件反射的建立是重点,任意两个兴奋区兴奋,都会导致位于它们中间的一个空白兴奋区形成与这两个区的联系,时间影响条件反射的建立。短期内形成的神经元联系快速消退,反复发生的神经元联系被加强。条件反射形成后,如没有复习,则随时间流逝而减弱直至消失。
* 具有一种天生的(生物体的DNA遗传信息带来的)但比较弱的本能,能够重复训练者的行动和文字输入,如果训练者从左到右写一横,它也能本能模仿写一横,输入和输出区的每个象素点对应它的一组输入和输出天生神经元兴备群。
* 有一种机制保证永远至少有一个驱动型兴奋区占优(用于驱动思考区),如果什么也没发生,“闲得无聊,要找点事干”区或做梦区兴奋。
* 有可能做梦,做梦过程的目的:
1. 节省能量,让大脑的思考区维持单线程低功耗工作(但不至于死机,可以接收各种输入信号并醒过来),生物脑是没有重启键的。
2. 给大脑一段空闲时间进行整理工作,将最近发生的事件拿出来在思考区复习一遍,并进行推演,试图与旧的存贮内容内容发生关联,以形成新的条件反射。(创造力思维的产生,来源于不相干的细胞区被联系起来。) 这个过程实际上白天也在发生,只是白天的目的性太强,不象做梦这么自由。
3. 旧的存贮内容在推演过程中得到强化,不至于被遗忘,始终得不到推演机会的存贮内容将随时间流逝被彻底遗忘(丢失)。始终得不到推演机会的存贮内容一定是无用的内容。
* 先定一个基础的开发目标100x100的点阵在上面随机点一个点人工生命也必须模仿在相似的位置点一个点并具备遗传功能不能做到这一点的人工生命都被自然淘汰模仿最快、最精确的人工生命生存机率最高。
第二步开发目标: 在点阵上从左到右顺序写一横,不能模仿的人工生命全部淘汰。
第三步开发目标: 在点阵上写1、2、3....,不能模仿的人工生命全部淘汰。

Loading…
Cancel
Save