diff --git a/README.md b/README.md index 02dec22..7271aab 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,15 @@ Frog: 这是人工生命的主体,目前起名叫青蛙(Frog),其实叫什 ![result13](result13_frog3d.gif) 生成三维形状目的是为生成三维脑结构做准备,神经网络空间上应该是三维的,这样实现模式识别会很方便,而早期随机连线结构损失了空间位置信息,三维全息演示问题则是它是手工设计的,优化困难。 +2021-11-08 成功的细胞分裂尝试 +这次的细胞分裂算法采用自顶向下的策略,也就是从单个细胞开始,一个细胞分裂成8个(因为1个正方体切三刀正好是8个小正方体)这种方式来进行。这种方案不是从目标形状的局部开始填充,而是从毛胚、从目标的粗轮廓开始利用遗传算法细化,直到细化出每个细节。这种方案的优点是更接近生物实际,符合“从总体到局部”的正常逻辑,而且有高效的基因压缩存储率,为了说明存储率这点,大家可以看看下图左面这个树结构,猜一猜要存储它最少需要多少个字节? +![depth_tree](depth_tree.png) +答案是最少只需要一个整数7就可以表达这个树结构了。说一下原理:首先所有树结构都可以用行号+深度的方式来表达,详见我的博客[基于前序遍历的无递归的树形结构](https://my.oschina.net/drinkjava2/blog/1818631),获取子树时可以避免递归访问,其次因为采用基因敲除的方式,只需要记录被敲除的树节点的行号和深度就就可以了,最后因为上例固定采用3叉树分形结构,根据行号就可以算出它的深度,所以深度值也可以省略,最后只用一个行号就可以表达这整棵树了。 +下图是这个算法的动画,可以看出它与上次的演示是不同的分裂模式,是先有总体后有细节。项目中实际采用的是8叉树,深度用细胞边长表示: +![result14](result14_wa3d.gif) +细胞分裂算法一方面可以利用来生成和优化物理形状(比方虚拟风叶、翅膀、受力结构等形状),另一方面它和神经网络的形成算法是有共通点的,因为众所周知心脏形状、血管网络、大脑神经网络都是由基因控制细胞分裂出来的。所以以后有可能利用这个算法来自动生成和优化神经网络触突三维空间分布结构。 +顺便说一下,自顶向下的问题是它一旦主分支被误敲除,就不容易补回去,实际的生物例子就是人眼结构还不如章鱼。自然界是用生物的多样化和环境的连续化来保证各种主分支都有尝试。我们电脑模拟只能尽量保持环境的连续化,从低到高一步步走。另外也可以将自顶向下和自底由上算法混合起来用,自底向上的优点是可以局部无限扩张分裂,用来打补丁不错。 + ## 运行方式 | Run 运行history各个子目录下的run.bat批处理文件即可启动运行,history下有多个子目录,按时间和版本号顺序按列,存放着这个项目演化过程中的主要历史版本供演示。 diff --git a/depth_tree.png b/depth_tree.png new file mode 100644 index 0000000..e8c2d8d Binary files /dev/null and b/depth_tree.png differ diff --git a/result14_wa3d.gif b/result14_wa3d.gif new file mode 100644 index 0000000..b0bb0ff Binary files /dev/null and b/result14_wa3d.gif differ diff --git a/捐款记录.md b/捐款记录.md index 5f3be6f..d430637 100644 --- a/捐款记录.md +++ b/捐款记录.md @@ -1,4 +1,4 @@ -这个项目的捐款将用于项目本身,如发布开发任务等。设这个捐款记录的目的是为了让收支透明化,万一项目做大了,收到码云平台外的捐款(建议走西联汇款)也可以在这里记录下来。本记录按时间顺序记录捐款人和当前总额,不记具体数额,这样即体现了不鼓励金额攀比、自愿随意的原则,也能通过历史记录查询出每笔的具体数额。在此衷心地感谢每一位捐款、点赞、及关注这个项目的同学! +这个项目的捐款将用于项目本身,如发布开发任务等。设这个捐款记录的目的是为了让收支透明化,如需捐赠请西联汇款"加拿大朱勇"收。本记录按时间顺序记录捐款人和当前总额,不记具体数额,这样即体现了不鼓励金额攀比、自愿随意的原则,也能通过历史记录查询出每笔的具体数额。在此衷心地感谢每一位捐款、点赞、及关注这个项目的同学! 捐款(按时间顺序): wangtao