遗传算法(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的更多相关文章

  1. 用遗传算法GA改进CloudSim自带的资源调度策略(2)

    遗传算法GA的核心代码实现: 最核心: private static ArrayList<int[]> GA(ArrayList<int[]> pop,int gmax,dou ...

  2. 机器学习笔记之遗传算法(GA)

    遗传算法是一种大致基于模拟进化的学习方法,假设常被描述为二进制串.在遗传算法中,每一步都根据给定的适应度评估准则去评估当前的假设,然后用概率的方法选择适应度最高的假设作为产生下一代的种子.产生下一代的 ...

  3. 【比较】遗传算法GA和遗传编程GP有什么不同?

    遗传算法GA 本质上有一个固定的长度,这意味着所产生的功能有限的复杂性 通常会产生无效状态,因此需要以非破坏性方式处理这些状态 通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可 ...

  4. 【比较】粒子群算法PSO 和 遗传算法GA 的相同点和不同点

    目录 PSO和GA的相同点 PSO和GA不同点 粒子群算法(PSO)和遗传算法(GA)都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解. PSO和G ...

  5. 【优化算法】遗传算法GA求解混合流水车间调度问题(附C++代码)

    00 前言 各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵.于是,今天我们带来了一个神奇的优化算法--遗传算法! 它的优点包括但不限于: 遗传算法对所求解的优化问题没有太多的 ...

  6. 用遗传算法GA改进CloudSim自带的资源调度策略

    首先理解云计算里,资源调度的含义: 看了很多云计算资源调度和任务调度方面的论文,发现很多情况下这两者的意义是相同的,不知道这两者是同一件事的不同表述还是我没分清吧,任务调度或者资源调度大概就是讲这样一 ...

  7. 遗传算法的C语言实现(二)-----以求解TSP问题为例

    上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而 ...

  8. 遗传算法的C语言实现(一):以非线性函数求极值为例

    以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得 ...

  9. 遗传算法入门C1

    遗传算法入门C1 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 遗传算法历史 遗传算法(GA)是从生物进化的角度考虑提出来的方法,19世纪达尔文在大量观察基础上总结了大自然进化规律 ...

随机推荐

  1. RTC-高效率实现TimerTicker编解码

    源:RTC-高效率实现TimerTicker编解码 嵌入式系统中时间是很重要的,在以往的系统中设计者常常使用一种叫RTC的专用芯片来维持时间,这种芯片种类很多接口形式也很多,如常用的DS1302.PC ...

  2. STM32片上Flash内存映射、页面大小、寄存器映射

    STM32片上Flash内存映射.页面大小.寄存器映射 STM32有4种Flash module organization,分别是:low-density devices(32KB,1KB/page) ...

  3. C++ Builder string相互转换(转)

    源:http://www.cnblogs.com/zhcncn/archive/2013/05/20/3089084.html 1. char*->string (1)直接转换 const ch ...

  4. OpenGL学习-------绘制简单的几何图形

    本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的 ...

  5. POJ 2240 Arbitrage Bellman_ford 判读是否存在正环

    和POJ1860差不多,就是用bellmanford判读是否存在正环,注意的是同种货币之间也可以交换,就是说:A货币换A货币汇率是2的情况也是存在的. #include<stdio.h> ...

  6. 设置div,td失去焦点

    $(downobj).attr({"tabindex":"0"});还需要设置css样式outline:none;

  7. sql server 修改表结构

    文章来自http://blog.csdn.net/huwei2003/article/details/6076051 --修改数据库名称.表名称.字段名 --修改数据库名 sp_renamedb 'o ...

  8. 计算机学院大学生程序设计竞赛(2015’12) 1006 01 Matrix

    #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> ...

  9. 让MySQL数据库支持Emoji表情

    问题:Emoji 表情是按照4个字节存储的,所以传统 mysql utf-8编码只能最大存储3字节. 解决:修改MySQL(5.5.3以上版本) 编码为utf8mb4 即可存储Emoji表,同时设置 ...

  10. Hadoop详解一:Hadoop简介

    从数据爆炸开始... 一. 第三次工业革命        第一次:18世纪60年代,手工工厂向机器大生产过渡,以蒸汽机的发明和使用为标志.      第二次:19世纪70年代,各种新技术新发明不断被应 ...