基因表达式编程(GEP)自学 第【3】天 Python 实现
基本基因表达式算法
- 1. 个体种群【★★★】
- 1.1. 初始种群的产生
- 2. 适应度函数与选择【★★★★】
- 2.1. 适应度函数和选择环境
- 2.2. 选择
- 3. 有修饰的复制【★★★★★】
- 3.1. 复制和选择
- 3.2. 变异
- 3.3. 转座和插入序列元素
- 3.3.1. IS转座:
- 3.3.2. RIS转座
- 3.3.3. 基因的转座
- 3.4 重组
- 3.4.1 单点重组
- 3.4.2. 两点重组
- 3.4.3. 基因重组
- 4. 参考书籍
1. 个体种群【★★★】
【PS:今天的内容会比之前都还要多。。并且有一定理解难度
注意结合前边内容:
基因表达式编程(GEP)自学 第【1】天 Python 实现
基因表达式编程(GEP)自学 第【2】天 Python 实现
】
像所有的遗传算法一样,GEP采用个体种群,而且最开始必须产生初始种群。后续的种群都是这些初始种群或者奠基种群经过遗传修饰得到的后代。我们已经看到,在基因型/表现型系统中,我们只需要产生个体染色体,然后由发展过程来控制后续工作。因此,在GEP中,只需要随机产生初始种群的简单个体染色体结构。而且这是一个非常小的任务。对每个问题而言,我们必须选择产生染色体的符号,也就是说,我们必须选择适合解决当前问题的函数集和终点集。我们还要选定每个基因的长度,每个染色体中的基因个数,以及这些染色体的表达式之间如何相互.作用。最后,我们必须提供一个选择环境(适应度样本集)来计算个体的适应度。然后,个体按照其适应度被选中,进行有修饰的复制,在下一代中产生新的成员。这个种群经历同样的发展过程,产生另一代新的群体。该过程重复若干代,直到发现一个优良解。
先大致了解下算法的流程:
【PS:献给英文不太好的】
1.1. 初始种群的产生
初始种群的染色体由解决特定问题的分别代表函数和终点的符号随机产生。
例如,假设我们想知道如何用AND,OR和 NOT来表示Majority(a,b,c)函数。这种情况下,函数集的选择并不复杂,函数集的构成为F={A,O,N},分别代表布尔函数AND,OR和 NOT。终点集的选择也不复杂,终点集的构成为T={a,b c},分别代表多数函数的三个参数。因此,对于该问题而言,基因的头部将从六个不同符号中随机生成(A,O, N,a,b, C),而基因的尾部从一个较小的字符集随机中生成,该符号集包含三个符号(a,b,c)。
(1)有:多数函数的真值表如下表所示。
对于该问题而言,所有的过渡状态集用来构成选择环境,以计算每个程序的适应度。选择环境也可以较正式地称为适应度样本集。该问题的适应度函数也不难猜测,它对应每个特定个体计算正确的适应度样本的个数。
(2)初始种群的产生
条件:
- 基因的头部将从六个不同符号中随机生成(A,O, N,a,b, c)。
- 基因的尾部从一个较小的字符集随机中生成,该符号集包含三个符号(a,b,c)。
- 每个基因的长度为7(h=3,t=4),是根据 t=h(n-1)+1。
随机生成初始种群
上图.一个用来求解Majority函数问题的较小初始种群的染色体。这些随机生成的染色体由两个基因构成,对由OR连接的子表达式树进行编码。
(3)计算个体的适应度
【PS:后边对应的就是计算出来的适应度】
Majority函数,适应度如何计算,简单的举个例子:
看第8条染色体,其对应的表达树如下:
写成布尔表达式:
【PS:想得没错,我们的目标就是寻找一个式子的适应度为8的】
(4)后续代和精英策略
假设:代与代之间,最佳个体(或者最佳个体之一)被原样复制到下一代中。如果种群中有多个个体具有最佳适应度,那么选择最后一个进行复制。
最佳个体复制操作,也称为精英策略,保证至少有一个后代是可存活的(显然,只有在代与代之间的选择环境保持不变时),同时在逐渐适应过程中保持个体的最优特性。
【PS:变异、转座、重组的细节后边在说,这伪了流程完整,我们就直接产生了新的一代】
(5)然后就是重复操作,直到符合结束的条件
【PS:幸运第二代找到了适应度为8的染色体,在第8条】
用来求解Majority 函数问题的下一代计算机程序。这一代的个体是上一代中选中的个体的直接后代。注意这里找到了一个具有最大适应度值的完美程序(8号染色体),因此该程序比起祖先要好很多。
看下其表达式树:
【PS:当然这里我再一次进行人工验证。。】
2. 适应度函数与选择【★★★★】
2.1. 适应度函数和选择环境
【PS:或许一开始看起来不太好理解,接下来我举个例子就好理解了,
2.2. 选择
我们要如何根据适应度进行选择?
在GEP中,个体通过赌盘轮采样策略根据其适应度进行选择(Goldberg 1989)。每个个体用圆形赌盘的一块来代表其适应度的比例。赌盘按照群体中个体数的值进行相应次数的旋转,从而始终保持群体的大小不变。采用这种选择策略,确实有时候会丢失一些最佳个体,而一些普通个体进入到了下一代。但是这样也不一定就不好,因为种群会一代一代地向前推进。而且,因为我们使用每一代中的最佳个体复制策略,所以最佳个体的存在和复制能够得到保证。这样,至少最优的特性从来没有丢失过,并且能够达到不断学习的目的。
3. 有修饰的复制【★★★★★】
3.1. 复制和选择
(1)这里举例一个简单复制和选择的例子(没有任何变异,运用的是赌盘策略)
轮盘赌算法:轮盘赌选择方法,轮盘赌选择又称比例选择算子,其基本思想是:各个个体被选中的概率与其适应度函数值大小成正比。
设种群个体大小为N,个体的适应度为 f(xi),则个体的选择概率为:
如图所示.复制和选择示例。仅采用复制和赌盘原理以使这些算子更容易理解。注意,例如第О代的8号染色体(最佳个体之一)没有留下后代,而6号染色体(一个中等个体〉留下的后代数量最多。
如图所示.遗传漂变示例。在这个极端的情况下,种群在第13代以后完全丧失遗传多样性,其所有成员都是一个染色体的后代,在这里,该染色体是第0代的0号染色体
3.2. 变异
变异可以发生在染色体内的任何位置。然而,染色体的结构组织必须保持完整。所以在头部中,任何符号都可以变成符号或者终点;在尾部中,终点只能够变成终点。通过这种方法,染色体的结构组织得以保持,而且由变异产生的新个体是结构上正确的程序。
如图所示 求解Majority(a,b,c)函数的一个初始种群及通过变异产生的后代。由OR连接的子表达式树编码的染色体。注意后代与其初始种群中的第0代祖先完全相同。第6代(1号染色体)发现的完美解和其假定的祖先之一用黑体标识。注意第5代的1号和3号染色体也可能成为完美解的祖先,在两种情况下,复制时出现两个点变异。
(1)变异可能带来变化,例如:
(2)变异也可能没带来变化(中性变异)
3.3. 转座和插入序列元素
GEP的转座元素是基因位的片断,它们可以被激活后跳到染色体中别的位置。在GEP中有三种转座元素(TransposableElements):
- 起始位置上是函数或终结点的短片段转座到基因的头中除根部以外的位置(Insertion Sequence Elements,IS元素)
- 起始位置上是函数的短片段转座到基因的根部(Root Insertion Sequence Elements,RIS元素)
- 整个基因转座到染色体的起始位置。
3.3.1. IS转座:
IS转座是从种群中随机选择一个染色体,然后随机从IS转座长度中选择IS长度,然后在染色体中选择IS长度的基因片段,并随机选择基因,插入到除基因首元素之外的头部部分中,如下所示:
3.3.2. RIS转座
所有的RIS元素都是从一个函数开始,因此是选自头部分中的序列。因此在头中任选一点,沿基因向后查找,直到发现一个函数为止。该函数成为RIS元素的起始位置。如果找不到任何函数,则变换不执行任何操作。该算子随机选取染色体,需要修饰的基因,RIS元素以及其长度。变化过程如图所示:
3.3.3. 基因的转座
基因转座仅仅改变基因在同一染色体中的位置,如图所示:
【PS:在基因转座中,整个基因起到转座子的作用,而且自己转座到染色体的开始位置。与其它类型的转座不同,在基因变换中原始位置上的转座子(基因)被删掉。该方法能够保证染色体的长度不变。】
3.4 重组
在GEP中有三种重组:单点重组,两点重组,基因重组。在所有的情况中,两个随机选中的父代染色体配对并相互交换部分成分。
3.4.1 单点重组
如上图 .求解Majority(a,b,c)函数的一个初始种群及通过单点重组产生的后代。由OR连接的子表达式树编码的染色体。第13代找到的完美解(1号染色体〉是前一代的6号染色体和7号染色体的一个后代(也用黑色标识)。
3.4.2. 两点重组
进行两点重组的时候,父代染色体相互配对,在染色体中随机选择两个点,将染色体切断。两个染色体相互交换重组点之间的部分,形成两个新的子代染色体。如图所示:
3.4.3. 基因重组
在 GEP 的第三种重组中,两个染色体中的整个基因相互交换,形成的两个子代染色体含有来自两个父体的基因。
3.4.4. 重组小结
见下图:
4. 参考书籍
基因表达式编程第6版
本文作者:九重!
本文链接:https://blog.csdn.net/weixin_43798572/article/details/122731903
关于博主:评论和私信会在第一时间回复。或者直接私信我。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【点赞】【收藏】一下。您的鼓励是博主的最大动力!
基因表达式编程(GEP)自学 第【3】天 Python 实现相关推荐
- 基因表达式编程gep_基因表达式编程GEP— 前言
第一次接触GEP(Gene Expression Programming,基因表达式编程)算法是五年前公司做过的一个供热优化控制项目,一接触就被它简洁精妙的设计思想所吸引.GEP由传统遗传算法进化而来 ...
- GEP基因表达式编程
GEP基因表达式编程 基因表达式编程GEP(Gene Expression Programming)其实是遗传算法的一种改进,如果对遗传算法有了解的话,对于GEP的理解也就自然而然了. 遗传算法的染色 ...
- C语言编程新手自学手册下载,C语言编程新手自学手册
C语言编程新手自学手册 出版时间:2012年01月 定 价:69.80 I S B N :9787111358343 所属分类: 计算机•网络  计算机•网络 > 编程语言与 ...
- 《自学是门手艺》— 为什么要把编程当成自学的入口
很多人误以为 "编程" 是很难的事情. -- 实则不然 -- 这恰恰是我们选择 "编程" 作为自学的第一个 "执行项目" 的原因. 一本关于 ...
- python可以自学吗-没学过编程可以自学python吗
目前在很多行业中都在越来越多的应用Python,这也是很多行业学习Python的原因. 我认为是可以的,python语法简单明了,代码可读性高,容易入门.Python的哲学是「做一件事情应该只有一种最 ...
- python编程可以自学么-风变编程的Python这么火,零基础可以自学吗?
随着人工智能技术的高速发展,简单轻快的脚本语言Python开始受到全民热捧,成为大势所趋.而对处于数字化时代的人们而言,除了基本应用外,也要通过学习基本编程调用智能科技产品的API接口.毫无疑问,Py ...
- python没基础能自学吗-没学过编程可以自学python吗
目前在很多行业中都在越来越多的应用Python,这也是很多行业学习Python的原因. 我认为是可以的,python语法简单明了,代码可读性高,容易入门.Python的哲学是「做一件事情应该只有一种最 ...
- python编程可以自学么-终于发现怎么自学python编程
随着人工智能 大数据的火热 Python成为了广大科学家和普通大众的学习语言.在学习Python的过程中 有很多人感到迷茫 不知道自己该从什么地方入手,今天我们就来说一些新手该如何学习Python编程 ...
- 电脑编程入门自学java_电脑编程入门自学Java指南
随着Java近些年来的强劲发展,想要转行学习Java的初学者也越来越多了.然而,入门自学Java并不是一件轻松的事情.众所周知,万事开头难,尤其是没有编程语言基础的学习者,不仅仅需要付出更多的心血和汗 ...
最新文章
- sql text转image_[转]故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题
- JS 事件冒泡和事件捕获
- Unity 安卓连调profile失败
- oracle有人用过fra吗,FRA(闪回恢复区)
- Beyond Compare 出现“这个许可证密钥已被撤销”的解决办法(不会删除记录)
- 29.课时29.【Django模板】url标签使用详解(Av61533158,P29)
- CCNA初认识——OSPF(开放式最短路径优先协议)配置命令
- lisp压盖_华为笔试题--LISP括号匹配 解析及源码实现
- 骑士聚会问题(PPT截取)
- Android 应用开发(50)---GridLayout(网格布局)
- 前端 JavaScript 之『防抖』的简单代码实现
- Android4.1.1_r1系统移植------TP移植篇
- VS2010 sp1 Windows SDK 7.1 正确安装步骤
- pyspider爬取tripadvisor
- 数据库查询优化-添加索引
- 10.机器学习sklearn-------手写数字识别实例
- 关于jsp跳转到servlet显示 “Served at: /JavaWebPractice”或空白页的问题
- 鼠标指针点击光圈特效_PC端手势操作神器——鼠标手势
- 关于结构光问题的总结
- 学习笔记4 环境试验箱的校准
热门文章
- Unity 【Content Size Fitter】- 聊天气泡自动适配Text文本框大小
- 分段函数的期望和方差_概率论中数学期望什么时候不存在?
- 第十一家面试(堆糖)
- Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB
- mongodb java geo_基于MongoDB位置查询GEO信息
- 2021年推土机司机(建筑特殊工种)考试及推土机司机(建筑特殊工种)找解析
- STL——SET操作与并交差
- 赚钱App研究之格式转换类app
- 打怪物小游戏,无聊打发时间
- 谁是“明日之子”?互动视频的模糊元年