遗传算法GA
遗传算法(Genetic Algorithms,GA)是一种全局优化方法,它借用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制,实现种群中个体适应性的提高,体现了自然界中“物竞天择、适者生存”的进化过程。
遗传算法是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法,它模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选种群,并重复此过程,直到满足某种收敛指标为止。
基本遗传算法(Simple Genetic Algorithms,简称SGA,又称简单遗传算法或标准遗传算法),其遗传进化操作过程简单,容易理解,是其他一些遗传算法的雏形和基础。基本遗传算法由编码(产生初始种群)、适应度函数、遗传算子(选择、交叉、变异)和运行参数组成。
1.编码问题是遗传算法有别于其他进化类算法的重要标志。
编码:由问题空间向遗传算法空间的映射。
解码:有遗传算法空间向问题空间的映射。
遗传算法通过某种编码机制把对象抽象为由特定符号按一定顺序排成的串。基本遗传算法则使用二进制串进行编码,它采用随机方法生成若干个体的集合,该集合称为初始种群,初始种群中个体的数量称为种群规模。个体也可称为染色体,用二进制串表示,二进制串中的每一位则称为基因。
2.遗传算法对个体的好坏用适应度函数值来评价,适应度函数值越大,个体的质量也就越好。适应度函数是遗传算法进化过程的驱动力,也是进行自然选择的唯一标准。
适应度函数的设计直接影响到遗传算法的性能。设计适应度函数的总体原则应使解的优劣性与适应度之间具有严格单调升的函数关系。一般应将目标函数映射成求最大值形式,且适应度函数的值为非负数。
还可以对适应度函数进行定标处理。主要方法有线性定标,sigma截断和乘幂标。对于约束条件可采取惩罚操作,即把约束问题转化为一个附带考虑代价或惩罚的非约束优化问题。
3.有三种基本遗传算子控制着染色体的遗传复制过程,它们时选择算子、交叉算子和变异算子。
选择(复制)算子从种群中按某一概率选择个体,某个体被选择的概率与其适应度值成正比。最常用的实现方法是轮盘赌模型。选择算子的任务就是按照某种方法从父代群体中选取一些个体遗传到下一代群体。遗传算法使用选择算子来实现对群体中的个体进行优胜劣汰操作。
交叉算子是指依据交叉概率,对两个相互配对的染色体按照某种方式相互交换其部分基因,从而形成两个新的个体,其中交叉概率是一个系统参数。交叉能把两个父代个体中的部分结构加以替换重组,生成新个体。对于二值编码问题,各种交叉算子都包括两个基本内容:父本配对选择和交叉点选择。种群的多样性和个体的相似性影响着交叉算子的结果。
变异运算是指依据变异概率将个体编码串中的某些基因值用其他基因值来替换,从而形成一个新的个体。遗传算法中的变异运算时产生新个体的辅助方法,它决定了遗传算法的局部搜索能力,同时保持种群的多样性。变异算子操作包括两个基本步骤:一是随机确定群体中个体待变异的某些基本因素;二是以事先设定或自适应的变异概率对所选定的基因位上的等位基因进行变异。
基本位变异算子:对个体编码串随机指定的某一位或某几位基因做变异运算。
交叉运算和变异运算相互配合,共同完成对搜索空间的全局搜索和局部搜索。
在特殊情况下使用逆转算子,在个体基串中随机挑选两个点,这两个点成为逆转点,然后将这两个逆转点之间的基因反向排列。基因逆转操作的真正目的是实现基因的重新排序操作。
4.遗传算法涉及的主要参数有3个:群体规模n、交叉概率Pc和变异概率Pm。实际应用中,通常可取30《n《60,0.25《Pc《0.75,0.01《Pm《0.2。
遗传算法的数学基础:模式定理和建筑块假设。
模式定理:适应值在群体平均适应值之上的、长度较短的、低阶的模式在GA的迭代过程中将按指数增长率被采样。(模式定理告诉我们,GA根据模式的适应值、长度和阶次来为模式分配搜索次数)
建筑块:短的、低阶的、具有较高适应值的模式。
建筑块混合:建筑块通过遗传算子的作用集合在一起的过程。
当那些构成最优点(或近似最优点)的“建筑块”结合在一起时,就得到了最优点。
模式定理保证了较优模式的样本数呈指数增长,从而使遗传算法找到全局最优解的可能性存在;而建筑块假设则指出了在遗传算子的作用下,能生成全局最优解。
遗传算法的收敛性分析:遗传算法要实现全局收敛,首先要求任意初始种群经有限步都能到达全局最优解;其次,算法必须由保优操作来防止最优解的遗失。与算法收敛性有关的因素主要包括种群规模、选择操作、交叉概率和变异概率。
遗传算法的局限性:在解决某些问题时速度很慢,而且算法对编码方案的依赖性很强,算法的鲁棒性比较差。可归结为:上位效应、编码方案、建筑块假设、早熟收敛。
多基因性:个体的单个表现型特征可能决定于许多基因的相互作用。
基因多效性:单个基因可以同时影响若干个表现型特征。
上位效应:多基因性和基因多效性统称为上位效应。
建筑块假设:指辨识出好的建筑块,并且把这些建筑块组合成更大的建筑块这个思想。
早熟收敛:当通过染色体的交叉和变异,种群已经很难产生优于亲本的子代个体时,就会发生早熟收敛。所有标准形式的交叉简单地重复产生当前亲本,进一步优化将完全依赖于变异,而且可能非常缓慢。
遗传算法的改进措施:对编码方式的改进、对遗传算子的改进、对控制参数的改进、对执行策略的改进。
二进制编码的优点在于编码、解码操作简单,交叉、变异等操作便于实现,缺点在于精度要求较高时,个体编码串较长,使算法的搜索空间急剧扩大,导致遗传算法的性能降低。浮点编码能很好地解决这一问题,浮点编码采用浮点数组来表示解向量。与二进制编码相比,采用浮点编码不仅结果更稳定,收敛时间也更短。
遗传算法的特点:搜索面广、适应性强、容错力高、具有随机性。
遗传规划(Genetic Programming,GP)是一种进化符合一些客观标准程序的方法,与遗传算法有密切联系。它试图研究计算机怎样在没有明显编程的情况下来解决问题。它把不同领域的问题都归结为寻找满足给定约束的计算机程序发现问题,也就是在可能的程序空间中寻找最优或满意的计算机程序。
遗传规划与基本遗传算法具有同样的算法结构,但是编码采用了由数学运算符和变量构成的计算机代码片段。4种基本的遗传规划算子为复制、交叉、变异和插入。
遗传算法GA的更多相关文章
- 用遗传算法GA改进CloudSim自带的资源调度策略(2)
遗传算法GA的核心代码实现: 最核心: private static ArrayList<int[]> GA(ArrayList<int[]> pop,int gmax,dou ...
- 机器学习笔记之遗传算法(GA)
遗传算法是一种大致基于模拟进化的学习方法,假设常被描述为二进制串.在遗传算法中,每一步都根据给定的适应度评估准则去评估当前的假设,然后用概率的方法选择适应度最高的假设作为产生下一代的种子.产生下一代的 ...
- 【比较】遗传算法GA和遗传编程GP有什么不同?
遗传算法GA 本质上有一个固定的长度,这意味着所产生的功能有限的复杂性 通常会产生无效状态,因此需要以非破坏性方式处理这些状态 通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可 ...
- 【比较】粒子群算法PSO 和 遗传算法GA 的相同点和不同点
目录 PSO和GA的相同点 PSO和GA不同点 粒子群算法(PSO)和遗传算法(GA)都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解. PSO和G ...
- 【优化算法】遗传算法GA求解混合流水车间调度问题(附C++代码)
00 前言 各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵.于是,今天我们带来了一个神奇的优化算法--遗传算法! 它的优点包括但不限于: 遗传算法对所求解的优化问题没有太多的 ...
- 用遗传算法GA改进CloudSim自带的资源调度策略
首先理解云计算里,资源调度的含义: 看了很多云计算资源调度和任务调度方面的论文,发现很多情况下这两者的意义是相同的,不知道这两者是同一件事的不同表述还是我没分清吧,任务调度或者资源调度大概就是讲这样一 ...
- 遗传算法的C语言实现(二)-----以求解TSP问题为例
上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而 ...
- 遗传算法的C语言实现(一):以非线性函数求极值为例
以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得 ...
- 遗传算法入门C1
遗传算法入门C1 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 遗传算法历史 遗传算法(GA)是从生物进化的角度考虑提出来的方法,19世纪达尔文在大量观察基础上总结了大自然进化规律 ...
随机推荐
- Changing a remote's URL
原文: https://help.github.com/articles/changing-a-remote-s-url/ Changing a remote's URL MAC WINDOWS LI ...
- Quartz 2D 初步
转载自:http://www.cofcool.net/development/2015/06/17/ios-study-note-six-Quartz2D/ Quartz 2D是一个二维绘图引擎,同时 ...
- USACO Section 1.3 Barn Repair 解题报告
题目 题目描述 某农夫有一个养牛场,所有的牛圈都相邻的排成一排(共有S个牛圈),每个牛圈里面最多只圈养一头牛.有一天狂风卷积着乌云,电闪雷鸣,把牛圈的门给刮走了.幸运的是,有些牛因为放假,所以没在自己 ...
- mysql触发器之姓名转姓名拼音
人员表people 字段:id,peopleNumber,name,namePinyin,sex,birthday,nation. namePinyin不用填写,根据name自动生成. wordlib ...
- 关于go的不爽
这里想记录下,自己学习.使用go语言,对于go语言不爽的地方. 1. 函数返回类型接在参数类型后面,不容易一眼看清楚函数的返回类型 如下,是不是有种很花的感觉. func NewReader(s st ...
- CodeForces 614B Gena's Code
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm& ...
- 生成R文件
aapt package -f -m -J H:/workspaces/java_android/Test2/gen -S H:/workspaces/java_android/Test2/res - ...
- php的命名空间层级与目录层级是一致的吗?
php的命名空间和目录的层级之间并不是说一定 要一致,两者之间没有必然的联系.并没有直接的关联,当然了,推荐关联起来,不然管理会非常混乱,但你确实可以自己实现一个Autoload来管理“混乱”的nam ...
- compass scss blueprint
[转载] 今天在执行compass create my-grid –using blueprint 命令时发现报错 google了一下,说是新版compass已经不包括compass-bluprint ...
- 系统管理员必须掌握的20个Linux监控工具
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用 作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成 ...