人工智能遗传算法GA(GeneticAlgorithm)入门知识梳理michael翔的IT私房菜

简单说来就是:繁殖过程,会发生基因交叉(Crossover),基因突变(Mutation),适应度(Fitness)低的个体会被逐步淘汰,而适应度高的个体会越来越多。那么经过N代的自然选择后,保存下来的个体都是适应度很高的,其中很可能包含史上产生的适应度最高的那个个体。

GA的组成:

借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。

举个例子,使用遗传算法解决“0-1背包问题”的思路:0-1背包的解可以编码为一串0-1字符串(0:不取,1:取);首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高。这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。

需要将问题的解编码成字符串的形式才能使用遗传算法。最简单的一种编码方式是二进制编码,即将问题的解编码成二进制位数组的形式。例如,问题的解是整数,那么可以将其编码成二进制位数组的形式。将0-1字符串作为0-1背包问题的解就属于二进制编码。

基因在一定能够意义上包含了它所代表的问题的解。基因的编码方式有很多,这也取决于要解决的问题本身。常见的编码方式有:

如,问题:给定了很多组输入和输出。请你为这些输入输出选择一个函数,使得这个函数把每个输入尽可能近地映射为输出。编码方法:基因就是树形结构中的一些函数。

在值编码中,每个基因就是一串取值。这些取值可以是与问题有关任何值:整数,实数,字符或者其他一些更复杂的东西。

遗传算子:遗传算法有3个最基本的操作:选择,交叉,变异。

选择一些染色体来产生下一代。一种常用的选择策略是“比例选择”,也就是个体被选中的概率与其适应度函数值成正比。假设群体的个体总数是M,那么那么一个体Xi被选中的概率为f(Xi)/(f(X1)+f(X2)+……..+f(Xn))。比例选择实现算法就是所谓的“轮盘赌算法”(RouletteWheelSelection)。

轮盘赌算法/**按设定的概率,随机选中一个个体*P[i]表示第i个个体被选中的概率*/intRWS(){m=0;r=Random(0,1);//r为0至1的随机数for(i=1;i<=N;i++){/*产生的随机数在m~m+P[i]间则认为选中了i*因此i被选中的概率是P[i]*/m=m+P[i];if(r<=m)returni;2.4交叉所谓交叉运算,是指对两个相互配对的染色体依据交叉概率按某种方式相互交换其部分基因,从而形成两个新的个体。交叉运算在GA中起关键作用,是产生新个体的主要方法。

交叉前:

00000|011100000000|10000

11100|000001111110|00101

交叉后:

00000|000001111110|10000

11100|011100000000|00101

染色体交叉是以一定的概率发生的,这个概率记为Pc。

选择两个交叉点,子代基因在两个交叉点间部分来自一个父代基因,其余部分来自于另外一个父代基因.如:

01|0010|11

11|0111|01

11|0010|01

01|0111|11

对父代按位"与”逻辑运算产生一子代A;按位”或”逻辑运算产生另一子代B。该交叉策略在解背包问题中效果较好.如:

01001011

11011101

01001001

11011111

变异是指依据变异概率将个体编码串中的某些基因值用其它基因值来替换,从而形成一个新的个体。GA中的变异运算是产生新个体的辅助方法,它决定了GA的局部搜索能力,同时保持种群的多样性。交叉运算和变异运算的相互配合,共同完成对搜索空间的全局搜索和局部搜索。

注:变异概率Pm不能太小,这样降低全局搜索能力;也不能太大,Pm>0.5,这时GA退化为随机搜索。

在繁殖过程,新产生的染色体中的基因会以一定的概率出错,称为变异。变异发生的概率记为Pm。

基本位变异算子是指对个体编码串随机指定的某一位或某几位基因作变异运算。对于基本遗传算法中用二进制编码符号串所表示的个体,若需要进行变异操作的某一基因座上的原有基因值为0,则变异操作将其变为1;反之,若原有基因值为1,则变异操作将其变为0。

变异前:

000001110000000010000

变异后:

000001110000100010000

在个体中随机挑选两个逆转点,再将两个逆转点间的基因交换。如:

变异前:1346798205

变异后:1246798305

GA运行时选择的参数应该视解决的具体问题而定,到目前为止,还没有一个适用于GA所有应用领域的关于算法参数的理论。下面是一般情况下使用GA时推荐的参数:

交叉率一般来说应该比较大,推荐使用80%-95%。

变异率一般来说应该比较小,一般使用0.5%-1%最好。

种群规模指的是群体中个体的个数。实验发现,比较大的种群的规模并不能优化遗传算法的结果。种群的大小推荐使用20-30,一些研究表明,种群规模的大小取决于编码的方法,具体的说就是编码串(EncodedString)的大小。也就是说,如果说采用32位为基因编码的时候种群的规模大小最好为32的话,那么当采用16位为基因编码时种群的规模相应应变为原来的两倍。

个人的想法是,设定一个计数器,如果连续N代出现的最优个体的适应度都一样时,(严格的说应该是,连续N代子代种群的最优个体适应度都<=父代最优个性的适应度)可以终止运算。

SGA(基本遗传算法)中采用轮盘赌选择方法

基本遗传算法伪代码/**Pc:交叉发生的概率*Pm:变异发生的概率*M:种群规模*G:终止进化的代数*Tf:进化产生的任何一个个体的适应度函数超过Tf,则可以终止进化过程*/初始化Pm,Pc,M,G,Tf等参数。随机产生第一代种群Popdo{计算种群Pop中每一个体的适应度F(i)。初始化空种群newPopdo{根据适应度以比例选择算法从种群Pop中选出2个个体if(random(0,1)

遗传算法的局部搜索能力较强,但是很容易陷入局部极值。引用网上的一段原话:“那么如何解决遗传算法容易陷入局部极值的问题呢?让我们来看看大自然提供的方案。

六千五百万年以前,恐龙和灵长类动物并存,恐龙在地球上占绝对统治地位,如果恐龙没有灭绝灵长类动物是绝没有可能统治地球的。正是恐龙的灭绝才使灵长类动物有了充分进化的余地,事实上地球至少经历了5次物种大灭绝,每次物种灭绝都给更加高级的生物提供了充分进化的余地。所以要跳出局部极值就必须杀死当前所有的优秀个体,从而让远离当前极值的点有充分的进化余地。这就是灾变的思想。”

灾变就是杀掉最优秀的个体,这样才可能产生更优秀的物种。那何时进行灾变,灾变次数又如何设定?

何时进行灾变,可以采用灾变倒计数的方式。如果n代还没有出现比之前更优秀的个体时,可以发生灾变。灾变次数可以这样来确定,如果若干次灾变后产生的个体的适应度与没灾变前的一样,可停止灾变。

当利用交叉和变异产生新的一代时,我们有很大的可能把在某个中间步骤中得到的最优解丢失。

精英主义的思想是,在每一次产生新的一代时,首先把当前最优解原封不动的复制到新的一代中。然后按照前面所说的那样做就行。精英主义方法可以大幅提高运算速度,因为它可以防止丢失掉找到的最好的解。

精英主义是基本遗传算法的一种优化。为了防止进化过程中产生的最优解被交叉和变异所破坏,可以将每一代中的最优解原封不动的复制到下一代中。

由上面看来,灾变与精英主义之间似乎存在着矛盾.前者是将产生的最优个体杀掉,而后者是将最优秀个体基因直接保存到下一代.

应该辩证地看待它们之间的矛盾,两者其实是可以共存的.我们在每一代进行交叉运算时,均直接把最优秀的个体复制到下一代;但当连续N代,都没有更优秀的个体出现时,便可以猜想可能陷入局部最优解了,这样可以采用灾变的手段.可以说,精英主义是伴随的每一代的,但灾变却不需要经常发生,否则算法可能下降为随机搜索了.

当然,每个算法中不一定要用精英主义和灾变的手段,应该根据具体的问题而定

可在3个基本操作的基础上增加一个插入操作。插入操作将染色体中的某个随机的片段移位到另一个随机的位置。

将遗传算法用于解决各种实际问题后,人们发现遣传算法也会由于各种原因过早向目标函数的局部最优解收敛,从而很难找到全局最优解。其中有些是由于目标函数的特性造成的,例如函数具有欺骗性,不满足构造模块假说等等;另外一些则是由于算法设计不当。为此,不断有人对遗传算法提出各种各样的改进方案。例如:针对原先的定长二进制编码方案;提出了动态编码、实数编码等改进方案;针对按比例的选择机制,提出了竞争选择、按续挑选等改进方案;针对原先的一点交算子,提出了两点交、多点交、均匀交等算子;针对原先遗传算法各控制参数在进化过程中不变的情况,提出了退化遗传算法、自适应遗传算法等。另外,针对不同问题还出现了分布式遗传算法、并行遗传算法等等。

参考文献都是干货!!!参考文献都是干货!!!参考文献都是干货!!!

THE END
1.算法学习50例下算法学习50例下 21.整数中1出现的个数 题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的https://blog.csdn.net/fegus/article/details/125130103
2.递归算法解决经典例题因此,在编写递归代码时,需要仔细考虑算法的边界条件和递归深度等因素。 2.递归函数 递归函数是一种函数,它在其定义中调用自身。通常情况下,递归函数包含两个部分:基本情况和递归情况。 基本情况是指在递归函数中需要判断是否需要终止递归的条件。当满足这个条件时,递归就会停止。 递归情况是指在递归函数中需要调用自身https://zhuanlan.zhihu.com/p/635141199
3.人工智能学习机器学习算法原理推导与实例应用 课程简介: 第1章人工智能入门指南41分钟5节 1-1AI时代必备python[免费试看]09:20 1-2Python我该怎么学04:21 1-3人工智能的核心-机器学习10:34 1-4机器学习怎么学08:37 1-5算法推导与案例08:19 第2章K近邻算法实战1小时9分钟5节 2-1K近邻算法概述15:48 2-2模型https://edu.51cto.com/course/20469.html
4.贪心算法入门详解,经典实例分析贪心算法入门详解,经典实例分析 贪心算法的字面有本是形容人的“贪心”一词,着实有些引人注目,有人说贪心算法是世界上最简单的算法,原因很简单:所有人都很“贪心”,根本不用学,不过,算法会怎样贪心呢? “贪心”的人,事事都想要得到眼前最好的那个,看不到长远的东西,也不为将来最终结果做打算,换句话说,就是https://blog.popkx.com/2307/
5.Spark2.1.0入门:SparkGraphX算法实例Spark2.1.0入门:Spark GraphX 算法实例 【版权声明】博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载! 返回Spark教程首页 GraphX 中自带一系列图算法来简化分析任务。这些算法存在于org.apache.spark.graphx.lib包中,可以被Graph通过GraphOps直接访问。本章节主要介绍GraphX中主要的三个算法。https://dblab.xmu.edu.cn/blog/1483/
6.算法竞赛入门经典合集(pdf+随书源码)开发实例源码下载算法竞赛入门经典合集(pdf+随书源码) C/C++语言基础 下载此实例 开发语言:C/C++ 实例大小:18.57M 下载次数:57 浏览次数:402 发布时间:2020-12-24 实例类别:C/C++语言基础 发布人:hyperjojo114514 文件格式:.rar 所需积分:2 相关标签:合集算法 网友评论举报投诉收藏该页https://www.haolizi.net/example/view_151910.html
7.AppStore上的“Swift语言入门实例互动教程”在第八章我们使用Swift语言实现了栈、队列、二叉树等数据结构,还实现了常见的8种排序算法。最后一章则包含了证书的创建、项目的架构、开发、打包、上传和- 在控制台输出类的实例及其属性 - Swift的(Boolean)布尔类型 - Swift的(Int)整形类型 - Swift的(Float)和(Double)浮点类型 https://itunes.apple.com/cn/app/id1320746678
8.算法分析入门教程实战篇及应用篇天,你这哪是算法分析,整个一看雪论坛名人整盅游戏。轻松一下,休息休息。其实,我上面特意选了偶像laomms(常见自校检分析实例)中的退出事件的逆向追踪,很经典,希望新手 仔细琢磨钻研。我这就这简单的CRACE ME再演示一遍,对照阅读理解。现在的软件很少有对和错的提示是邻居的了。好,我就看错误提示信息逆向追踪:https://www.pediy.com/kssd/pediy10/59537.html
9.深度学习之神经网络(CNN/RNN/GAN)算法原理+实战本课程使用原理讲解加实战的方式学习卷积神经网络(CNN)、循环神经网络(RNN)、对抗神经网络(GAN),通过图像分类、文本分类、图像风格转换、图像文本生成、图像翻译等项目,深度掌握算法调参以及使用Tensorflow进行编程的能力。 正十七 讲师 Google资深算法工程师 https://coding.imooc.com/class/259.html
10.独家菜鸟级机器学习入门(附代码实例)现在当这些算法需要训练(Train)和校对(Calibrate)的时候, 其实是需要去找出一组点之间的最小距离。让我们看图更能说清楚。 以上图为例。这是一个经典的线性回归(Simple Linear Regression)的例子。蓝点表示想要预测的数据。红线表示“最佳拟和线”,该线是机器学习https://mp.weixin.qq.com/s?__biz=MzI1MjQ2OTQ3Ng==&mid=2247496248&idx=1&sn=ea19a9160d85b92060eafd4eeef8ce36&chksm=e9e1fbb3de9672a56e3c7c35792536e5abd1cf536d829beeeed52e1182059642c88e2b4ac4f7&scene=27
11.13《算法入门教程》贪心算法之活动选择问题本节主要学习了利用贪心算法处理活动选择问题,学习本节课程掌握贪心算法解决活动选择问题的流程,知道贪心算法在解决问题时是如何考虑最优子结构及寻找贪心选择,并且可以自己用代码实现活动选择问题的求解。在学习完本节课程之后,我们通过活动选择问题这一实例介绍了贪心算法的实际应用,帮助大家可以更好地理解贪心算法。?https://www.jianshu.com/p/2ab020fdcaca
12.《算法训练营:海量图解+竞赛刷题(入门篇)》(陈小玉)简介算法入门,以海量图解的形式,详解常用的数据结构与算法,融入大量竞赛实例和解题技巧,轻松入门算法 作者:陈小玉出版社:电子工业出版社出版时间:2021年07月 手机专享价 ¥ 当当价降价通知 ¥87.00 定价 ¥129.80 电子书价 ¥90.86 配送至 北京市东城区 http://product.dangdang.com/29267036.html
13.书单豆瓣高分&全网热评的算法神作本书结合竞赛实例,从数据结构、算法策略、时间复杂度与空间复杂度优化等多个角度,对各类经典问题进行求解,重点讲解了如何分析问题和解决问题,并提供了优化过程,引导读者进行刷题实战,进而提高算法思维能力,以更高的视角看待问题。http://www.broadview.com.cn/article/420385
14.从0到1只差这20本算法书单《算法学习与应用从入门到精通》 张玲玲 著 本书的特色是实现了入门知识、实例演示、范例演练、技术解惑、综合实战5大部分内容的融合,让读者看得懂、用得上、学得会。一本书的容量,讲解了入门类、范例类和项目实战类三类图书的内容。丰富的配套资源 ,学习更高效。 https://labs.epubit.com/articleDetails?id=N5bad5b2e-ea8e-4c9a-bfbe-8811190d4421
15.灰狼优化算法(GreyWolfOptimizer).pdf灰狼优化算法研究综述.docx 上传者:zhuzhi时间:2023-09-19 灰狼优化算法实例/灰狼优化算法入门 本资源为基于MATLAB的灰狼优化算法学习,为作者在学习过程中写的第一个灰狼优化算法的实例,本实例初始化一个单变量函数,然后求在取值区间的最小值。本资源共包括四个文件,其中main.m为主文件,将四个文件放在同一个文件https://www.iteye.com/resource/merry_hj-11449641
16.妙趣横生的算法(C语言实现第2版)epubpdfmobitxt电子书下载本书内容涵盖了算法入门的必备基础知识和大量的趣味算法题、面试题和ACM竞赛题等。通过学习本书内容,可以开阔读者的视野,帮助读者理解算法,提高编程兴趣和能力,并提高C语言编程能力,还可以让读者了解IT面试中的常见算法题及编程竞赛中的相关知识。另外,本书提供了5.5小时配套教学视频和实例源代码,以提高读者的学习效率https://book.tinynews.org/books/11651197
17.趣学Python算法100例中文PDF高清版电子书下载趣学Python算法100例从一些经典算法出发,为读者展示了100个Python趣味编程实例。本书共12章,涵盖趣味算法入门、趣味数学问题、各种趣味整数、趣味分数、趣味素数、趣味逻辑推理、趣味游戏、趣味数组、趣味函数递归、定理与猜想、趣味图形及其他趣味问题。本书取材注重趣味性与实用性,内容涵盖Python编程的基础知识和常用算法https://www.jb51.net/books/878806.html
18.数智化革命9787111701538企业即算法978711168688入门到精通 Radioss 基础理论与工程高级应用 计算思维入门 全局最优化 理论力学 理论力学 应变梯度弹性固体中的弹性波 大学物理学 大学物理教程 群星闪耀 ANSYS Workbench热力学分析实例演练 ANSYS 2020热力学有限元分析 ANSYS电磁学有限元分析从入门到精通 量子之道 半导https://whsggzy.wuhu.gov.cn/EpointWebBuilderNew/WebbuilderMIS/attach/downloadZtbAttach.jspx?attachGuid=a56a7a1a-4cd0-4103-ade6-1152439262df&appUrlFlag=ztbwh