diff --git a/README.md b/README.md index 710cd50..16fc203 100644 --- a/README.md +++ b/README.md @@ -195,6 +195,13 @@ Frog: 这是人工生命的主体,目前起名叫青蛙(Frog),其实叫什 ![result18](result18_yinyan_eatfood.gif) 这个版本的目的是验证阴阳无极八卦阵算法的实用性和搭建初步框架。后面的任务将是进一步复杂化,生成有模式识别功能的神经网络三维结构。 +2022-10-18 继续纸上谈兵,谈谈脑结构 +细胞分裂算法可以解释神经网络生成的原因,但是完全依靠它来生成复杂神经网络,也是有问题的,就是资源不够,电脑模拟不像大自然一样有无限的时间和样本,随机试错不知要试到猴年马月去。 +为了加快模拟脑的生成,可以走一点捷径,这个我想到的就是,如果已知生物脑的大致结构,就可以先把细胞空间位置先固定下来,然后再利用细胞分裂算法来微调细胞参数即可。对的,分裂算法不光可以用来生成结构,也可以用来调整参数,因为参数的空间分布也是一种结构。 +大脑的结构是怎样的呢,下面就是我最近的一个构想,类似于机械中的总装图,从总体上先勾勒出脑的结构和运行机制,这个仅供参考。所以这次更新内容是篇软文,不过虽然没有什么实际的进展,但是也很重要,因为如果总体上猜对了脑结构,会对今后的编程开发带来很大便利。 +见下图,其要点是脑核只处理少量精简后的信息,这个图每个部分都有注释,大家应该能看懂我的意思。这个脑结构并不完全符合生物脑结构,而是从脑的功能出发倒推猜测出来的: +![brainstructure](brainstructure.png) + ## 运行方式 | Run 运行core或history各个子目录下的run.bat批处理文件即可启动运行,history下有多个子目录,按版本号顺序排列,存放着这个项目演化过程中的主要历史版本供演示。 diff --git a/brainstructure.png b/brainstructure.png new file mode 100644 index 0000000..1aa7cb6 Binary files /dev/null and b/brainstructure.png differ diff --git a/core/README.md b/core/README.md index 198623c..9952f3f 100644 --- a/core/README.md +++ b/core/README.md @@ -1,5 +1,7 @@ ## core目录简介 core目录是当前工作目录,如果跑出什么结果就会拷贝一份放到history目录里存档。 -原来core分为bottom_up和top_down两个目录,从这版起,还是恢复成一个目录,以集中精力,不管是手工算法试验,还是用细胞分裂自动生成脑结构,都放在core一个目录里,切换时从history里拷贝一份来接着工作即可。 -当前目标是大方向是由遗传算法来自动排列脑细胞和触突参数,以实现模式识别功能,并与上下左右运动细胞、进食奖罚感觉细胞结合起来,实现吃掉无毒蘑菇,避开有毒蘑菇这个任务。当前小目标是要利用阴阳无极八卦阵算法进化出第一个可以工作(向食物运动)的神经网络。 \ No newline at end of file +当前目标是大方向是由遗传算法来自动排列脑细胞和触突参数,以实现模式识别功能,并与上下左右运动细胞、进食奖罚感觉细胞结合起来,实现吃掉无毒蘑菇,避开有毒蘑菇这个任务。 +当前小目标: +1)是要利用阴阳无极八卦阵算法进化出第一个可以工作(向食物运动)的神经网络。(已完成) +2)利用阴阳无极八卦阵算法来进化出第一个具备模式识别功能的神经网络。比如,识别1,2,3,4 数字 \ No newline at end of file diff --git a/core/pom.xml b/core/pom.xml index 10ff0f3..67deb00 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -2,12 +2,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.gitee.drinkjava2 - frog011 + frog012 jar - 11.0 + 12.0 frog - 当前目标是由分裂算法来自动排列脑细胞和触突参数,以实现模式识别功能 + 当前目标是用分裂算法来实现第一个具备模式识别功能的神经网络 https://gitee.com/drinkjava2/jsqlbox/frog diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/Animal.java b/core/src/main/java/com/gitee/drinkjava2/frog/Animal.java index 76fc3e1..354b3b8 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/Animal.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/Animal.java @@ -23,6 +23,7 @@ import javax.imageio.ImageIO; import com.gitee.drinkjava2.frog.brain.Cells; import com.gitee.drinkjava2.frog.brain.Eye; +import com.gitee.drinkjava2.frog.brain.Eye2; import com.gitee.drinkjava2.frog.egg.Egg; import com.gitee.drinkjava2.frog.objects.Food; import com.gitee.drinkjava2.frog.objects.Material; @@ -139,6 +140,7 @@ public abstract class Animal {// 这个程序大量用到public变量而不是ge // energys[0][0][0]=10; Eye.active(this); //如看到食物,给顶层细胞赋能量 + Eye2.active(this); //Eye2是看到每个像素点,用来以后作模式识别信号输入 Cells.active(this); //细胞之间互相传递能量 if (Food.foundAndAteFood(this.x, this.y)) { //如当前位置有食物就吃掉,并获得奖励 diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java b/core/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java index f2f3d53..a87b3a7 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java @@ -397,9 +397,9 @@ public class BrainPicture extends JPanel { drawCuboid(brain);// 把脑的框架画出来 setPicColor(BLACK); //把x,y,z坐标画出来 - drawText(Env.BRAIN_CUBE_SIZE, 0, 0, "x", 2); - drawText(0, Env.BRAIN_CUBE_SIZE, 0, "y", 2); - drawText(0, 0, Env.BRAIN_CUBE_SIZE, "z", 2); + drawText(Env.BRAIN_CUBE_SIZE, 0, 0, "x", 0.2f*Env.BRAIN_CUBE_SIZE); + drawText(0, Env.BRAIN_CUBE_SIZE, 0, "y", 0.2f*Env.BRAIN_CUBE_SIZE); + drawText(0, 0, Env.BRAIN_CUBE_SIZE, "z", 0.2f*Env.BRAIN_CUBE_SIZE); setPicColor(RED); drawLine(0, 0, 0, Env.BRAIN_CUBE_SIZE, 0, 0); drawLine(0, 0, 0, 0, Env.BRAIN_CUBE_SIZE, 0); diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java b/core/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java index 9b0024d..42fa326 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java @@ -84,7 +84,7 @@ public class Cells { continue; // if ((cell & RANDOM_ACTIVE) > 0) //随机产生细胞能量,会让青蛙颤抖 -// if (RandomUtils.percent(5)) +// if (RandomUtils.percent(2)) // a.energys[x][y][z] = 1; float e = a.energys[x][y][z]; diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/brain/Eye2.java b/core/src/main/java/com/gitee/drinkjava2/frog/brain/Eye2.java new file mode 100644 index 0000000..b4892c0 --- /dev/null +++ b/core/src/main/java/com/gitee/drinkjava2/frog/brain/Eye2.java @@ -0,0 +1,36 @@ +/* + * Copyright 2018 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.brain; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Env; + +/** + * Eye2 + * 这个眼睛能看到青蛙四周的nxn个像素点,作为模式识别的信号输入窗口 + * + * @author Yong Zhu + * @since 1.0 + */ +public class Eye2 { + + /** First eye can only see if food nearby at 4 directions */ + public static void active(Animal a) {// 眼睛如发现任何物体,就将最上层对应像素点的细胞激活成1能量 + int r=Env.BRAIN_CUBE_SIZE / 2; + for (int x = -r; x < r; x++) + for (int y = -r; y < r; y++) { + if(Env.foundAnyThingOrOutEdge(a.x+x, a.y+y)) { + a.cells[x+r][y+r][Env.BRAIN_ZSIZE-1]=1; + } + } + } + +} diff --git a/brain.gif b/other/brain.gif similarity index 100% rename from brain.gif rename to other/brain.gif diff --git a/other/brainstructure.dwg b/other/brainstructure.dwg new file mode 100644 index 0000000..942967f Binary files /dev/null and b/other/brainstructure.dwg differ