add brainstructure picture

This commit is contained in:
yong 2022-10-18 17:33:19 -06:00
parent b8733661b7
commit ff593f4f84
10 changed files with 56 additions and 9 deletions

View File

@ -195,6 +195,13 @@ Frog: 这是人工生命的主体,目前起名叫青蛙(Frog),其实叫什
![result18](result18_yinyan_eatfood.gif)
这个版本的目的是验证阴阳无极八卦阵算法的实用性和搭建初步框架。后面的任务将是进一步复杂化,生成有模式识别功能的神经网络三维结构。
2022-10-18 继续纸上谈兵,谈谈脑结构
细胞分裂算法可以解释神经网络生成的原因,但是完全依靠它来生成复杂神经网络,也是有问题的,就是资源不够,电脑模拟不像大自然一样有无限的时间和样本,随机试错不知要试到猴年马月去。
为了加快模拟脑的生成,可以走一点捷径,这个我想到的就是,如果已知生物脑的大致结构,就可以先把细胞空间位置先固定下来,然后再利用细胞分裂算法来微调细胞参数即可。对的,分裂算法不光可以用来生成结构,也可以用来调整参数,因为参数的空间分布也是一种结构。
大脑的结构是怎样的呢,下面就是我最近的一个构想,类似于机械中的总装图,从总体上先勾勒出脑的结构和运行机制,这个仅供参考。所以这次更新内容是篇软文,不过虽然没有什么实际的进展,但是也很重要,因为如果总体上猜对了脑结构,会对今后的编程开发带来很大便利。
见下图,其要点是脑核只处理少量精简后的信息,这个图每个部分都有注释,大家应该能看懂我的意思。这个脑结构并不完全符合生物脑结构,而是从脑的功能出发倒推猜测出来的:
![brainstructure](brainstructure.png)
## 运行方式 | Run
运行core或history各个子目录下的run.bat批处理文件即可启动运行history下有多个子目录按版本号顺序排列存放着这个项目演化过程中的主要历史版本供演示。

BIN
brainstructure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

View File

@ -1,5 +1,7 @@
## core目录简介
core目录是当前工作目录如果跑出什么结果就会拷贝一份放到history目录里存档。
原来core分为bottom_up和top_down两个目录从这版起还是恢复成一个目录以集中精力不管是手工算法试验还是用细胞分裂自动生成脑结构都放在core一个目录里切换时从history里拷贝一份来接着工作即可。
当前目标是大方向是由遗传算法来自动排列脑细胞和触突参数,以实现模式识别功能,并与上下左右运动细胞、进食奖罚感觉细胞结合起来,实现吃掉无毒蘑菇,避开有毒蘑菇这个任务。当前小目标是要利用阴阳无极八卦阵算法进化出第一个可以工作(向食物运动)的神经网络。
当前目标是大方向是由遗传算法来自动排列脑细胞和触突参数,以实现模式识别功能,并与上下左右运动细胞、进食奖罚感觉细胞结合起来,实现吃掉无毒蘑菇,避开有毒蘑菇这个任务。
当前小目标:
1)是要利用阴阳无极八卦阵算法进化出第一个可以工作(向食物运动)的神经网络。(已完成)
2)利用阴阳无极八卦阵算法来进化出第一个具备模式识别功能的神经网络。比如识别1,2,3,4 数字

View File

@ -2,12 +2,12 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gitee.drinkjava2</groupId>
<artifactId>frog011</artifactId>
<artifactId>frog012</artifactId>
<packaging>jar</packaging>
<version>11.0</version>
<version>12.0</version>
<name>frog</name>
<description>当前目标是由分裂算法来自动排列脑细胞和触突参数,以实现模式识别功能</description>
<description>当前目标是用分裂算法来实现第一个具备模式识别功能的神经网络</description>
<url>https://gitee.com/drinkjava2/jsqlbox/frog</url>
<issueManagement>

View File

@ -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)) { //如当前位置有食物就吃掉并获得奖励

View File

@ -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);

View File

@ -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];

View File

@ -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;
}
}
}
}

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

BIN
other/brainstructure.dwg Normal file

Binary file not shown.