遗传算法中交叉方法简介及基于适应度的启发式多点交叉
来源:互联网 发布:在线抠图软件 编辑:程序博客网 时间:2024/06/07 01:30
作者注:本文写于三年前,今天才转到这里来。
在生物的自然进化过程中,两个同源染色体通过交配而重组,生成新的染色体,从而产生新的个体或物种。交配重组是生物遗传和进化过程中的一个主要环节。遗传算法中的交叉算子就是通过模仿这个交配重组的环节而产生的。
交叉又称重组,是指把两个父代个体的部分结构加以替换、重组而生成新个体的操作。交叉操作的作用是组合出新的个体,在串空间进行有效搜索,同时降低对有效模式的破坏概率。交叉操作是遗传算法区别于其它进化算法的重要特征,在遗传算法的运算中起核心作用。
那么,设计交叉算子需考虑如下两点:
1)需保证前一代中优秀个体的性状能够在后一代的新个体中尽可能地得到遗传和继承;
2)交叉算子设计要和编码设计协调操作。
交叉算子的设计主要包括以下两个方面的内容:
1)如何确定交叉点的位置;
2)如何进行部分基因交换。
二进制编码的主要交叉操作有:一点交叉、两点交叉、多点交叉、均匀交叉等。
一点交叉又称简单交叉,它是指在个体基因串中只随机设置一个交叉点,然后随机选择两个个体做为父代个体,相互交换它们交叉点后面的那部分基因块,然后产生两个新的子代个体。
两点交叉是指在个体基因串中随机设置了两个交叉点,然后再进行部分基因块交换。
多点交叉,是指在个体基因串中随机设置多个交叉点,然后进行基因块交换。其操作过程与一点交叉和两点交叉相类似。
均匀交叉,也称一致交叉,其具体运算是通过随机生成一个屏蔽字来决定子代个体如何从父代个体获得基因。这个屏蔽字的长度要与个体基因串长度相同,且均由0,1生成。比如说屏蔽字的第一位数是0,那么第一个子代个体基因串的第一位基因便继承父代个体A,第二个子代个体基因串的第一位基因便继承父代个体B;如果屏蔽字的第一位数是1,那么第一个子代个体基因串的第一位基因便继承父代个体B,第二个子代个体基因串的第一位基因便继承父代个体A。以此类推。
均匀交叉在开始迭代时可以加快新的较优模式的发现,在趋于收敛时可防止收敛于局部极值点,而且具有比经典交叉更好的重组能力,但比较容易破坏好的基因模式。在集合覆盖问题中,每个个体的一些优秀的基因模式都有一定的阶,都是以基因块的形式存在的,而均匀交叉只是针对每一位基因进行交换重组,容易破坏好的模式。针对这一点,本文提出基于适应度的广义多点交叉,在保留好的基因模式、减少生成重复个体方面都有很好的表现,并且加快了遗传算法的收敛速度。
基于适应度的启发式多点交叉:设A和B分别是选择出来进行交叉父代个体,它们的适应度分别为fA和fB,对它们进行交叉操作产生的子代个体记为C,每个个体的基因串长度为L。那么如何确定交叉点的位置呢?以及交叉点的个数有多少?本文记交叉点个数为Nu,交叉点的位置是随机产生的。
具体操作如下:
- 遗传算法中交叉方法简介及基于适应度的启发式多点交叉
- 遗传算法为什么要适应交叉概率和变异概率
- 遗传算法-交叉算法
- 遗传算法类OX交叉选择算法的python实现
- 【建模必备】遗传算法的基本原理与步骤(交叉)
- 遗传算法中几种交叉算子小结
- 遗传算法中几种交叉算子小结
- 交叉检验的简介
- 遗传算法(2):对适应度函数的改进
- 交叉验证方法思想简介
- 交叉验证方法思想简介
- 交叉验证方法思想简介
- 交叉验证方法思想简介
- c#写的遗传算法的交叉算子,选择算子和变异算子
- 遗传算法(4):交叉概率和变异概率的自适应化
- 【建模必备】遗传算法的基本原理与步骤(适应度函数与适应度分配)
- 适应度函数及遗传操作
- 基于启发式的分割算法
- 软件开发如同木匠做桌子
- C++ primer 读书笔记之构造函数初始化列表
- delphi之多线程编程(一)
- 安装rar详解
- Objective-C语言学习之消息和方法
- 遗传算法中交叉方法简介及基于适应度的启发式多点交叉
- 程序员学SEO系列一:SEO引论
- Magento的”导入/导出”(import/export)(
- Java的回调
- win8无线虚拟WIFI热点手机无法连接的解决方案
- 关于int main(int argc,_TCHAR*argv[])
- Vmware 9安装Ubuntu 12.10 完毕后,并不出现图形界面
- 操作系统_再识(序言)
- C++ 小测试