mirror of
https://gitee.com/drinkjava2/frog.git
synced 2024-11-25 16:04:06 +08:00
add brainstructure picture
This commit is contained in:
parent
b8733661b7
commit
ff593f4f84
@ -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
BIN
brainstructure.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 153 KiB |
@ -1,5 +1,7 @@
|
||||
## core目录简介
|
||||
core目录是当前工作目录,如果跑出什么结果就会拷贝一份放到history目录里存档。
|
||||
原来core分为bottom_up和top_down两个目录,从这版起,还是恢复成一个目录,以集中精力,不管是手工算法试验,还是用细胞分裂自动生成脑结构,都放在core一个目录里,切换时从history里拷贝一份来接着工作即可。
|
||||
|
||||
当前目标是大方向是由遗传算法来自动排列脑细胞和触突参数,以实现模式识别功能,并与上下左右运动细胞、进食奖罚感觉细胞结合起来,实现吃掉无毒蘑菇,避开有毒蘑菇这个任务。当前小目标是要利用阴阳无极八卦阵算法进化出第一个可以工作(向食物运动)的神经网络。
|
||||
当前目标是大方向是由遗传算法来自动排列脑细胞和触突参数,以实现模式识别功能,并与上下左右运动细胞、进食奖罚感觉细胞结合起来,实现吃掉无毒蘑菇,避开有毒蘑菇这个任务。
|
||||
当前小目标:
|
||||
1)是要利用阴阳无极八卦阵算法进化出第一个可以工作(向食物运动)的神经网络。(已完成)
|
||||
2)利用阴阳无极八卦阵算法来进化出第一个具备模式识别功能的神经网络。比如,识别1,2,3,4 数字
|
@ -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>
|
||||
|
@ -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)) { //如当前位置有食物就吃掉,并获得奖励
|
||||
|
@ -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);
|
||||
|
@ -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];
|
||||
|
36
core/src/main/java/com/gitee/drinkjava2/frog/brain/Eye2.java
Normal file
36
core/src/main/java/com/gitee/drinkjava2/frog/brain/Eye2.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
BIN
other/brainstructure.dwg
Normal file
BIN
other/brainstructure.dwg
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user