进化计算之遗传算法的简单介绍
来源:互联网 发布:java读取xml字符串 编辑:程序博客网 时间:2024/06/10 03:24
作为一个算法的初学者,最近看了一下计算智能(人工智能的一个重要领域)的相关内容。。。在这里简单介绍一下进化计算中的遗传算法吧大概吧。。。这种综述性的暂且看看吧。。。
遗传算法(Genetic Algorithm, GA)是一种随机自适应的全局搜索算法,这种算法正是通过模拟自然界中生物的遗传进化过程,对优化问题的最优解进行搜索。 这种搜索全局最优解的过程是一个不断迭代的过程(每次迭代相当于生物进化中的一次循环),直到满足算法的终止条件为止。
基本思想:从一初始化的群体出发,通过一系列的遗传操作,包括随机的选择(使群体中优秀的个体有更多的机会传给下一代),交叉(群体内个体之间的信息交换),和变异(引入新的变种来确保信息的多样性),使最具有生存能力的染色体以最大可能生存,群体一代一代地进化到搜索空间中越来越好的区域。(”人的好多灵感真的是来自大自然耶。。。“)
生物遗传进化的基本生物要素和遗传算法的基本要素定义的对照关系:
遗传算法的流程结构:
1. 染色体编码
两种常用的较简单的编码方法:二进制编码方法和浮点数编码方法。
二进制编码方法中,产生的染色体是一个二进制符号序列,染色体的每一个基因只能取值0或1。例如,假设
浮点数编码方法中,染色体的长度等于问题定义的解的变量个数,染色体的每一个基因等于解的每一维变量。例如,待求解问题的一个有效解为
2. 群体的初始化
一般情况下,遗传算法在群体初始化阶段采用的是随机数初始方法。采用生成随机数的方法,对染色体的每一维变量进行初始化赋值。初始化染色体时必须注意是否满足优化问题对有效解的定义。
3. 适应值评价
评估函数用于评估各个染色体的的适应值,进而区分优劣。评估函数常常根据问题的优化目标来确定。
4. 选择算子
轮盘赌选择算法是遗传算法最经常使用的选择算法,其基本思想是基于概率的随机选择。轮盘赌选择算法首先根据群体中每个染色体的适应值得到群体所有染色体的适应值总和,并分别计算每个染色体适应值与群体适应值总和的比
5. 交配算子
在染色体交配阶段,每个染色体能否进行交配由交配概率
交配的具体操作是随机产生一个有效的交配位置,染色体交换位于交配位置后的所有基因。
交配操作应该注意产生的子代染色体应满足问题对有效解的定义。同时,参与交配的父代染色体个数与产生的子代染色体个数一样,因此新种群的规模依然为N。
6. 变异算子
对于交配后新种群中染色体的每一位基因,根据变异概率
7. 算法流程
流程图:
伪代码:
/* P(t)表示某一代的群体,t为当前进化代数 Best表示目前已找到的最优解*/Procedure GAbegin t=0; initialize(P(t)); //初始化群体 evaluate(P(t)); //适应值评价 keep_best(P(t)); //保存最优染色体 while(不满足终止条件)do begin P(t)=selection(P(t)); //选择算子 P(t)=crossover(P(t)); //交配算子 P(t)=mutation(P(t)); //变异算子 t=t+1; P(t)=P(t-1); evaluate(P(t)); if(P(t)的最优适应值大于Best的适应值) //以P(t)的最优染色体替代Best replace(Best); end if endend
基本遗传算法
现在用一个简单的函数优化的例子,来说明遗传算法的执行过程。。。
例如:用遗传算法求在
1. 编码
将变量x编码为5位长的二进制无符号整数表示形式:以
2. 初始群体的生成
为了简化,可取群体大小为4。初始群体称作为进化的初始代,即第1代。初始群体的每个个体都是通过随机方法产生的,例如,产生的初始种群为01101(13)、11000(24)、01000(8)和10011(19)。
3. 适应度函数
这里可简单地根据
4. 选择
首先计算群体中所有个体适应度的总和:
为了从初始种群中选择4个个体进行下一步的选择操作,产生4个
5. 交叉操作
交叉操作(交配操作)可以说是遗传算法中最主要的遗传操作。由于交叉概率
在上述的选择操作中选择的4个个体{1,2,2,4}形成两对个体{(1,2),(2,4)}来进行交叉操作。由于交配方式是交换指定位置后的全部基因,故对于长度为L的个体,存在长度为L-1种交叉位置。
在这里,L=5,故有4种交叉位置。交叉位置也是随机产生的。假设上述两对个体的交叉位置分别为4和2,则:
(1)个体1(0110|1)与个体2(1100|0)交叉后得到新一代个体1(01100)与新一代个体2(11001);
(2)个体2(11|000)与个体2(10|011)交叉后得到新一代个体1(11011)与新一代个体2(10000)。
可以看出,新群体中个体适应度的平均值和最大值都有了明显提高,新群体的个体的确朝着我们所期望的方向进化了。
计算流程:
然而,这只是个简单的单变量函数,不足以说明遗传算法的优点。。。其实对于由几十个到几百个变量组成的函数,遗传算法照样能够不依靠任何搜索空间的外部知识而仅用适应度函数来指导和优化搜索的方向。
6. 变异
变异操作是按位进行的,即把某一位的内容进行变异,这也是随机进行的。对于二进制编码的个体来说,个体的每一位按变异概率
变异操作是非常微妙的遗传操作,需要与交叉操作妥善配合使用,目的是挖掘群体中个体的多样性,克服有可能限于局部解的弊病。
在这里只讲了一些很基础的东西,之后有机会的话可以再谈谈遗传算法的数学理论基础(模式理论)和遗传算法的实现技术(对于技术层面的东西。。额。。我要花多点工夫才行。。)
参考文献:
【1】计算智能. 夏定纯 徐涛. 科学出版社
【2】计算智能导论. Andries.P.Engelbrecht. 清华大学出版社
【3】计算智能. 张军 詹志辉. 清华大学出版社
- 进化计算之遗传算法的简单介绍
- 遗传算法之花朵进化
- 简单遗传算法介绍
- 群智能优化算法之遗传、粒子群、进化算法
- 简单的遗传算法
- 进化计算的简单例子
- 遗传算法:内存中的进化
- Java遗传算法(JGAP)简单介绍
- 简单的遗传算法源代码
- 遗传算法的简单实现
- 最简单的遗传算法
- 简单的遗传算法实例
- 简单的遗传算法问题之实数编码(二)
- 遗传算法:内存中的进化【转】
- 使用遗传算法计算方程的最大值
- 遗传算法的手工模拟计算示例
- 进化算法、遗传算法与粒子群算法之间的比较
- 进化算法 遗传算法与粒子群算法之间的比较
- HDU 1069Monkey and Banana
- 解决APT-GET更新源报错:W: UNKNOWN MULTI-ARCH TYPE ‘NO’ FOR PACKAGE ‘COMPIZ-GNOME’
- 博客第一天
- 时间问题
- Xen-Server 6.5 虚拟机安装Linux系统
- 进化计算之遗传算法的简单介绍
- java 大数
- php之错误 Error
- 杭电2123
- 修炼成C++高手必看的C++书单
- Tomcat 7.0.68安装配置过程
- 6.4趣味逻辑之抓小偷
- 求因子(1405)
- 3.27 三二 B POJ 1611 SARS 并查集