基本遗传算法(GA)详解
遗传算法由John H.Holland教授提出,为一种全局优化算法。它模拟自然进化与遗传理论,通过将优化问题进行转移,从而成功避免了一般优化算法中需要过多考虑的动力学信息问题,在原理上突破了常规的优化算法框架,算法结构较简单、处理信息能力较强,具有很好的鲁棒性。遗传算法最大的特点就是将优化问题中的参数转换成了编码的个体,从而不需要管理优化问题中的参数问题,只需要处理进行了编码的个体,而这些个体在遗传算法优化过程中所描述的就是生物界中“物竞天择,适者生存”的生存抉择概念。正是由于遗传算法具有上述等特点,现在被广泛用于各大领域,比如在一些优化问题复杂多样以及非线性等问题上,是21世纪以来智能算法中的比较突出的技术之一。
Holland教授提出的遗传算法将优化问题转换为遗传问题,通过选择个体编码方式,定义相应的适应度函数,设定收敛条件,经过遗传操作,完成遗传过程。
目前所有改进的遗传算法参考的最原始最基本的是遗传算法框架,因而被称为基本遗传算法。
一、基本概念
1.基因(Gene):是生物界中表现生物体性状特征的一种遗传因子。在遗传算法中,基因的表示方法常常采用二进制(1 0)、整数或者某种字符来进行表达。
2.染色体(Chromosome):是生物界中的生物体表现遗传类特征的一种物质,也就是说它是基因存储的一种载体。
3.个体(Individual):个体所表现出来的是生物体带有特征的实体。在遗传算法进行遗传优化的过程中所优化的基本对象就是个体。
4.种群(Population):个体的集合称为种群。
5.群体规模(Population Size):群体规模表示的是整个种群中所有的个体数量总和。
6.适应度(Fitness):是个体优良的参考值。
7.编码(Coding):DNA中的遗传信息是按某种方式陈列在一个长链上。在遗传算法中,这实际上是一个映射过程,即先验参数到遗传参数的映射。
8.选择(Selection):描述的是“物竞天择,适者生存”的概念。在遗传算法中,参考个体适应值进行选择的过程。
9.复制(Reproduction):即DNA复制。在遗传算法中,对个体进行选择时,往往会根据群体规模来进行优良个体的复制。
10.交叉(Crossover):即杂交,是两个同源染色体在配对时,相互交换基因的过程。在遗传算法中,表示的是两个随机选择的个体进行信息互换的过程。
11.变异(Mutation):细胞在进行复制的时候,会出现很小的概率的差错,使得子染色体与母染色体不同,即发生变异。在遗传算法中,随机性的对个体中的信息进行改变的过程。
遗传算法主要有五个要素组成,分别是染色体编码、适应度函数、遗传算子、终止条件和运行参数。
1)染色体编码
是把一个具体函数优化问题转换为能够处理的搜索空间的问题。编码的设计深深影响着后续运算的有效执行,故而是一个关键。在基本遗传算法中将函数优化问题的参数转换成的个体是用符号集{0、1}来进行表示的,且长度不可变,这种方式称为二进制符号串。
2)适应度函数
是用来评价群体中的个体对环境的生存能力,并以此作为后续对个体进行选择的参考依据。由于遗传算法是概率化的操作,故在设计适应度函数的时候,要充分保证适应度必须为正或者为0,也就是说在特殊情况时需要对目标函数进行转换。
3)遗传算子
是精髓所在,描述生物界遗传机制的算子,包括选择、交叉和变异三种算子。
选择算子:是从当前种群中选择优良个体的过程,是一个优胜劣汰的过程,在基本遗传算法中,采用的是轮盘赌选择原理,即按适应值的比例选择个体。
交叉算子:交叉算子是一种改变解空间的操作,使得整个群体发生质的变化,产生多样性的子空间,具有全局搜索能力的表现形式。在基本遗传算法中,采用的是简单的交叉。
变异算子:变异指个体编码串中的某个基因发生突变,比如:0 -> 1。该算子操作会产生新的形状。
4)终止条件
是一种判断遗传算法在优化迭代过程中何时达到收敛的条件。当遗传代数达到预定的最大遗传代数或者发现种群中个体的状态保持在一个稳定的状态时,可以判定迭代终止;反之,则继续搜索。
5)运行参数
主要有群体规模(N)、最大的终止代数(T)、交叉概率()和变异概率()。这些运行参数,在实际情况下,并没有合理的相关法则去如何选定,都是根据实际应用中多次的实验取得的经验值。
二、基本遗传算法的流程
基本遗传算法的框架是最简单的,也是所有后续改进的基础,下图为流程图:
1) 编码和产生初始群体
根据优化函数的实际问题,选择好相应的编码方法,根据种群规模的需要,随机产生确定长度的n个染色体,作为初始种群。
2)计算适应度值
假设适应度函数为,则对所有的个体计算其相对应的值为:
3)终止判断
根据设定的终止条件判断是否达到收敛状态以选择下一步操作。
4)选择运算
选择适应度值大的个体进行交叉运算,则每个个体的选择概率为:
以选择概率作为新的概率分布,从当前种群中选择个体重组新的个体种群:
5)交叉运算
随机从种群中选择两个不同的个体,以概率进行交换基因,得到新的两个个体,进行次1,得到一个新的种群。
6)变异运算
从种群中随机选择个体,以变异概率进行染色体变异,得到新的种群,这个群体作为完成一次遗传操作的子种群,即,此时传到第 2)步。
三、相关问题
基本遗传算法自问世以来,由于其具有隐含并行性和全局搜索性两个主要的特点,使其很快的便应用到各个领域中,但是就在其应用广泛的同时,基本遗传算法所暴露出来的缺点也备受关注,主要有以下几点:
1.基本遗传算法采用的编码方式为二进制编码,对于一些特殊函数,很可能得不到很好的表达,达不到该有的精度。
2.基本遗传算法采用的是轮盘赌的基于适应值比例的选择策略。当在遗传进化的初期,适应度值分布杂乱,适应度值过大的个体被选中进入交叉、变异概率高,而适应度值偏小的个体不易被选中,这样的群体多样性必然下降迅速,导致算法嵌入局部最优,当进入后期时,适应度值分布均匀,从而搜索能力减弱,收敛速度将陷入停滞。
3.基本遗传算法采用单点交叉和基于位变异的遗传算子,使得不能充分发挥全局搜索的优点,容易导致“早熟”现象。
4.基本遗传算法中的运行参数交叉与变异概率保持在一个设定值不变,导致适应值大的个体染色体容易被破坏,小的则容易被保存下来,对整体遗传运算不利。
基于python实现遗传算法,可以参见本人之前的博客。
基本遗传算法(GA)详解相关推荐
- 遗传算法(GA)详解
遗传算法(GA)详解 遗传算法主要作用是求解最优解,例如求函数极值,或是飞机巡航问题中的最短巡航路线的求解等,其作用与模拟退火算法的作用较为相似.本文将从GA算法的原理,结构与两个实践应用进行比较详细 ...
- 超级详解遗传算法(GA)学习笔记(1.1) 持续更新
遗传算法入门第一式---------求解函数极值问题(附完整代码和详解) 声明:大佬请指点,小白同学一起聚聚交流~~~~ 联想到球球大作战!!!!! 以这幅图为例,可以将其看成是一个种群,当中的散点就 ...
- 机器学习中四类进化算法的详解(遗传算法、差分进化算法、协同进化算法、分布估计算法)
1.遗传算法(Genetic Algorithm,GA) GA算法原理 首先我们来介绍进化算法的先驱遗传算法,遗传算法(Genetic Algorithm,简称GA)是一种最基本的进化算法,它是模拟达 ...
- 遗传算法详解与改良遗传算法
1.遗传算法简介 遗传算法(GA)是用于解决NP难问题如JSP问题,TSP问题常用的启发式算法.上世纪70年代由美国的John holland提出,是运用计算机仿真,通过交叉变异等方式,模拟自然进化过 ...
- 数学建模——智能优化之遗传算法详解Python代码
数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...
- 深度学习经典算法 | 遗传算法详解
遗传算法生物学基础 在一定的时间内,有一群兔子,其中一些比另外一些兔子跑得快,而且更聪明,这些兔子被狐狸吃掉的可能性比较小,因此它们中的多数就存活下来并繁殖更多的兔子.当然,一些跑得慢而愚蠢的兔子也会 ...
- 遗传算法(Genetic Algorithm)详解与实现
遗传算法(Genetic Algorithm)详解与实现 遗传算法简介 类比达尔文进化论 达尔文进化理论 遗传算法对应概念 遗传算法理论 图式定理(schema theorem) 遗传算法与传统算法的 ...
- 多目标遗传算法NSGA-II原理详解及算法实现
在接触学习多目标优化的问题上,经常会被提及到多目标遗传算法NSGA-II,网上也看到了很多人对该算法的总结,但真正讲解明白的以及配套用算法实现的文章很少,这里也对该算法进行一次详解与总结.会有侧重点的 ...
- 启发式算法详解——遗传算法
启发式算法详解--遗传算法 算法原理 算法详解 算法详解 算法总结 算法原理 遗传算法(Genetic Algorithm)遵循『适者生存』.『优胜劣汰』的原则,是一类借鉴生物界自然选择和自然遗传机制 ...
- 数学建模——遗传算法步骤及程序详解
数学建模--遗传算法步骤及程序详解 文章目录 数学建模--遗传算法步骤及程序详解 前言 一.遗传算法的基础 1.编码和解码 2.适应度函数 3.交叉 4.变异 5.选择 二.遗传算法原理步骤 1.初始 ...
最新文章
- MS Sql Server 作业编辑报错以及不显示历史记录
- 暑期集训1:C++STL 练习题E:POJ-2431
- mysql sys库 oom_MySQL 5.6因为OOM导致数据库重启
- Cesar竞赛平台项目中期总结
- 内核网络中的GRO、RFS、RPS技术介绍和调优
- SAP 动态设置 GUI STATUS 灰色不可用 或者隐藏
- 什么是CRM Sales category
- MyBatis:事务回滚
- C++实现:自定义数组类型实现相关运算符重载
- android textview adapter,Android在FragmentPagerAdapter中的Fragment中设置TextView文本
- 八种常用的排序算法(转)
- 1002 写出这个数 (20 分)—PAT (Basic Level) Practice (中文)
- 微信小程序学习资料[转]
- 主流数据库之MySQL函数和MySQL数据操作基础知识及示例
- chrome python插件,珍藏版Chrome插件送给你们,不仅是程序员必备
- (Java实现) 洛谷 P1605 迷宫
- Python使用turtle画一朵美丽的玫瑰花
- 干货 | 呆滞库存(Slow moving)产生原因分析和预防措施
- ITK系列4_ ITK访问图像像素数据
- 卡硬工具箱说系统服务器,卡硬工具箱有什么用处功能 卡硬工具箱检测电脑配置教程...
热门文章
- JADE(Java Agent Development Framework)笔记
- 安装包及教程:仿真工具Multisim12.0 简体中文汉化版 安装包及详细安装教程(含安装包和汉化包百度云盘链接)
- 基于Python的人脸识别
- ipad蓝牙键盘使用技巧_iPad提示,技巧和教程的完整列表
- 基于标签传递的重叠社区发现算法(COPRA算法)
- sou.php,phpsou RiSearchPHP是一个高效 联合开发网 - pudn.com
- 北斗卫星导航系统基础篇之(一)
- 电工电子技术知识点总结(正弦交流电路)
- 微软私有云的数据保护之神——DPM
- 如何在虚拟机下安装一个Linux操作系统?(简简单单30步,安装Linux详细教程)