改进遗传算法之CHC算法简要介绍
简要介绍:
CHC算法是Eshelman于1991年提出的一种改进的遗传算法的缩称,第一个C代表跨世代精英选择(Cross generational elitist selection)策略, H代表异物种重组(Heterogeneous recom-bination),第二个C代表大变异(Cataclysmic mutation)。CHC算法与基本遗传算法SGA不同点在于:SGA的遗传操作比较单纯,简单地实现并行处理;而CHC算法牺牲这种单纯性,换取遗传操作的较好效果,并强调优良个体的保留。
1.选择
通常,遗传算法是依据个体的适应度复制个体完成选择操作的,而在CHC算法中,上世代种群与通过新的交叉方法产生的个体群混合起来,从中按一定概率选择较优的个体。这一策略称为跨世代精英选择。其明显的特征表现在:
(1)健壮性。由于这一选择策略,即使当交叉操作产生较劣个体偏多时,由于原种群大多数个体残留,不会引起个体的评价值降低。
(2)遗传多样性。保持由于大个体群操作,可以更好地保持进化过程中的遗传多样性。
(3)排序方法克服了比例适应度计算的尺度问题。
2.交叉
CHC算法使用的重组操作是对均匀交叉的一种改进。均匀交叉对父个体位值的各位位置以相同的概率实行交叉操作,这里改进之处是:当两个父个体位值相异的位数为m时,从中随机选取m/2个位置,实行父个体位值的互换。显然, 这样的操作对模式具有很强的破坏性,因此,确定阀值,当个体间的海明距离( Hamming distance)低于该阀值时,不进行交叉操作。并且,与种群进化收敛的同时,逐渐地减小该阀值。
3.变异
CHC算法在进化前期不采取变异操作,当种群进化到一定的收敛时期,从优秀个体中选择一部分个体进行初始化。初始化的方法是选择一定比例的基因座,随机地决定它们的位值。这个比例值称为扩散率, 一般取 0.35。
CHC算法描述:N为种群大小,L为个体长, k为世代数, d为海明距离阀值,r为扩散率。 begin
k= 0;
d=L/4;
P(k)初始化;
P(k)的评价;
直到满足终止条件终止 begin
k=k + 1;
复制P(k-1),与P(k)混合后产生混合种群C(k);
C(k)中实行交叉,形成新种群C'(k);
C'(k)的评价;
从C'(k)和P(k- 1)中实行选择;
if P(k)= =P(k- 1)
d=d-1;
if d<0 begin
P(k)的-部分个体实行初始化;
d=r(1-r)L;
end end
end
procedure交叉
begin
C(k)中个体分别配对;
begin
求配对个体间的海明距离;
if 海明距离> 2d
实行改进的均匀交叉;
else
将该配对个体从种群中消除;
end
end
end
procedure选择
begin
C' (k)按评价值优劣顺序排列;
while P(k)中的最差者<C'(k)中的最优者
两者替换;
end
procedure部分个体初始化
begin
P(k- 1)中挑选较优秀的N个个体生成P(k);
对P(k)中N-1个个体
begin
随机选择rL位,其位值随机地决定;
个体评价;
end
end
参考资料:[遗传算法:理论、应用与软件实现].王小平.曹立明.
改进遗传算法之CHC算法简要介绍的更多相关文章
- JVM G1垃圾回收算法简要介绍
JVM G1垃圾回收算法简要介绍 G1的特点 能够像CMS垃圾回收算法一样并发操作应用线程(潜台词:多核) 无需太长时间即可压缩空闲内存空间(潜台词:不会引起太多的GC停顿时间) 尽可能地让GC时长可 ...
- 简要介绍BASE64、MD5、SHA、HMAC几种方法。
加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了. 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书. ...
- 【学】常用hash算法的介绍
基本知识 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映 ...
- [转] Android资源管理框架(Asset Manager)简要介绍和学习计划
转自:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分内容组成:代码和资源.资源主要就是指那些与U ...
- Dalvik虚拟机简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...
- Android资源管理框架(Asset Manager)简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分 ...
- Android窗口管理服务WindowManagerService的简要介绍和学习计划
在前一个系列文章中,我们从个体的角度来分析了Android应用程序窗口的实现框架.事实上,如果我们从整体的角度来看,Android应用程序窗口的 实现要更复杂,因为它们的类型和作用不同,且会相互影响. ...
- [转]java加密算法简要介绍
本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法. BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密 ...
- WCF简要介绍
什么是WCF WCF的全称是:Windows Communication Foundation.从本质上来说,它是一套软件开发包,是微软公司推出的符合SOA思想的技术框架.WCF为程序员提供了丰富的功 ...
随机推荐
- Sublime Text 3.1 3170 / 3176 注册码(附降级与禁止更新方法)
3.1 3176 可用注册码 127.0.0.1 www.sublimetext.com 127.0.0.1 license.sublimehq.com ----- BEGIN LICENSE --- ...
- 逆向工程第001篇:解锁FIFA07传奇模式
FIFA07传奇难度的解锁,可以说是所有FIFA07玩家的终极目标.但是如果想以正常方式对其进行解锁,绝对是一件耗时耗力的工作.所以在这里我打算通过分析游戏存档文件的十六进制代码的方式,一步一步地找到 ...
- hdu1526 二分匹配+ floyd
题意: 有N个插座,M个用电器,和K种转换器(每种有无限个),问最少多少个用电器无法充电. 思路 : 总的电器数 减去 电器和插座的最大匹配数 我有的是map去映射每一个串,根据转换器建边,然后跑一 ...
- Fidder抓包软件的使用
Fiddler是一款强大的Web调试工具,它能记录所有客户端和服务器的HTTP和HTTPS请求.Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并且截取到数据.当然Fiddler很屌,在 ...
- UVA11991第k次出现的v的下标
题意: 给你一个有n个数的数字序列,然后有m组询问,每组询问是问第k次出现的v在序列里的小标是多少? 思路: 简单题目,直接开个二维的容器就行了,标记出现次数可以开个数组或者是一维 ...
- Windbg 字符串条件断点
0x01 前言 Windbg 作为 Windows 下的主流调试器,除了人机交互相比其他调试器略有不足外,其他功能都是十分强大的存在. 在所有的调试器中断点功能都是必不可少的,Windbg 可以使用 ...
- Pytest自动化测试-简易入门教程(03)
今天分享内容的重点,和大家来讲一下我们的测试框架--Pytest 讲到这个框架的话呢,可能有伙伴就会问老师,我在学习自动化测试过程中,我们要去学一些什么东西? 第一个肯定要学会的是一门编程语言,比如说 ...
- Java枚举类、注解和反射
本文主要介绍的是枚举类,注解和反射.还有一些基础知识:static,基本数据类型,运算符优先级放在文中,以便查阅复习. 其中牵扯到泛型的部分,可参考本人的另一篇博客:(Collection, List ...
- 【2020BUAA软件工程】个人博客作业
个人作业博客 项目 内容 北航2020软工 班级博客 作业要求 具体要求 我的课程目标 学习软件工程,掌握团队合作,锻炼自我 作业在哪个方面帮助我实现目标 通读<构建之法>,尝试理解软件工 ...
- 偷梁换柱:使用mock.patch辅助python单元测试
最近在搞软工项目的后端测试,重新复习了一下python的mock.patch,并用它简化了对一些复杂逻辑的测试,在此记录 问题描述 本组的项目比较特殊,设计对教务网站的模拟登陆与信息爬取,同时不少接口 ...