(图片例子来自上课时老师的PPT,不过老师说PPT是他从网上组合的,所以没有出处)

1、Partial-Mapped Crossover (PMX)
  过程:
    第一步,随机选择一对染色体(父代)中几个基因的起止位置(两染色体被选位置相同):

    第二步,交换这两组基因的位置:
    第三步,做冲突检测,根据交换的两组基因建立一个映射关系,如图所示,以1-6-3这一映射关系为例,可以看到第二步结果中子代1存在两个基因1,这时将其通过映射关系转变为基因3,以此类推至没有冲突为止。最后所有冲突的基因都会经过映射,保证形成的新一对子代基因无冲突:
    最终结果:

   
2、Order Crossover (OX)
  过程:
    第一步,与PMX相同,随机选择一对染色体(父代)中几个基因的起止位置(两染色体被选位置相同):

     第二步,生成一个子代,并保证子代中被选中的基因的位置与父代相同:

    第三步(可再分两小步),先找出第一步选中的基因在另一个父代中的位置,再将其余基因按顺序放入上一步生成的子代中:
  需要注意的是,这种算法同样会生成两个子代,另一个子代生成过程完全相同,只需要将两个父代染色体交换位置,第一步选中的基因型位置相同,本例中的另一个子代为:254913678
  与PMX不同的是,不用进行冲突检测工作(实际上也只有PMX需要做冲突检测)。
 
3、Position-based Crossover (PBX)
  过程:
    第一步,随机选择一对染色体(父代)中几个基因,位置可不连续,但两染色体被选位置相同:

    第二步,与OX的第二步相同,生成一个子代,并保证子代中被选中的基因的位置与父代相同:

    第三步,也与OX的第三步相同,先找出第一步选中的基因在另一个父代中的位置,再将其余基因按顺序放入上一步生成的子代中:

  与上俩个算法不同的是,选择的基因型位置可以不连续,出来这一点外与OX基本一致,同样有两个子代,本例的另一个为:243519678。 
 
4、Order-Based Crossover (OBX)
  过程:
    第一步,随机选择一对染色体(父代)中几个基因,位置可不连续,但两染色体被选位置相同:

    第二步(分为两小步),先在父代2中找到父代1被选中基因的位置,再用父代2中其余的基因生成子代,并保证位置对应:

   第三步,将父代1中被选择的基因按顺序放入子代剩余位置中:

  同理,交换父代1、2可得到另一个子代(被选择基因的位置不变),本例结果为:423156798。
  OBX与PBX相比生成子代的“基础”基因来源不同一个来自被选中基因,一个来自剩余的,此外思想基本相似。 

5、Cycle Crossover (CX)
  过程:
    第一步,在某个父代上随机选择1个基因,然后找到另一个父代相应位置上的基因编号,再回到第一个父代找到同编号的基因的位置,重复先前工作,直至形成一个环,环中的所有基因的位置即为最后选中的位置:

    第二步,用父代1中选中的基因生成子代,并保证位置对应:

    第三步,将父代2中剩余基因放入子代中:
  与上述算法不同的是,仅需要在一个染色体上随机选择一个位置;本例另一个子代结果为:543926781。
6、Subtour Exchange Crossover
  过程:
    第一步,在某个父代上选择1组基因,在另一父代上找到这些基因的位置:

    第二步,保持未选中基因不变,按选中基因的出现顺序,交换两父代染色体中基因的位置,一次生成两个子代:

  与上述算法不同的是,只在一个染色体上选择基因的位置。

遗传算法中几种交叉算子小结相关推荐

  1. 【算法】遗传算法GA中几种交叉算子小结

    (图片例子来自上课时老师的PPT,不过老师说PPT是他从网上组合的,所以没有出处) 1.Partial-Mapped Crossover (PMX)   过程:     第一步,随机选择一对染色体(父 ...

  2. html页面刷新回到顶部_HTMl页面中返回顶部的几种实现小结

    这篇文章我们来讲一下在网站建设中,HTMl页面中返回顶部的几种实现小结.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 最近在开发网站需要制作返回顶部按钮,但是我主要为后端开 ...

  3. c++语言定义排序函数,关于C++中定义比较函数的三种方法小结

    C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必 ...

  4. python字典取值_python 字典中取值的两种方法小结

    python 字典中取值的两种方法小结 如下所示: a={'name':'tony','sex':'male'} 获得name的值的方式有两种 print a['name'],type(a['name ...

  5. Android中的13种Drawable小结

    本节引言: 从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种 ...

  6. python取整的几种方法,Python中取整的几种方法小结

    Python中取整的几种方法小结 前言 对每位程序员来说,在编程过程中数据处理是不可避免的,很多时候都需要根据需求把获取到的数据进行处理,取整则是最基本的数据处理.取整的方式则包括向下取整.四舍五入. ...

  7. python中矩阵的转置怎么写_Python 矩阵转置的几种方法小结

    我就废话不多说了,直接上代码吧! #Python的matrix转置 matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] def printmatrix(m): fo ...

  8. 遗传算法中常见遗传算子

    遗传算法中常见遗传算子 常见选择算子 轮盘选择(roulette wheel selection) 随机遍历抽样(Stochastic universal sampling,SUS) 排序选择(ran ...

  9. 在遗传算法中出现等式约束_排序算法中的稳定性-等式的处理

    在遗传算法中出现等式约束 by Onel Harrison 通过Onel Harrison 排序算法中的稳定性-等式的处理 (Stability in Sorting Algorithms - A T ...

最新文章

  1. 获取本年、本月、本周时间范围_为什么“增值税期末留抵税额本年累计数”很快就被废止了...
  2. 【Alpha】开发日志Day4-0715
  3. 移动Web开发实践——解决position:fixed自适应BUG
  4. 学习Python必会内容:print函数、赋值与代码块
  5. neo4j springboot 日志_Springboot2.3集成neo4j的过程和踩坑记
  6. boost::stl_interfaces模块实现互操作性的测试程序
  7. 单链表式并查集应用举例
  8. 微软发布Azure Storage不可变存储功能的正式版本
  9. 黑马程序员——关于static关键字
  10. 张雪峰考研计算机怎么选学校,考研该如何选择学校?张雪峰老师妙语连珠
  11. 地大计算机学院保研华科人数,2020年华中科技大学保研率是多少
  12. WCF 第二章 契约 数据契约等效
  13. 利用DiskGenius对硬盘无损分区大小调整+无损分割新分区。
  14. OpenWrt路由器WIFI开启13信道
  15. android 反编译 签名,Android反编译及重签名命令
  16. 运算放大器节点电压方程_区分运算放大器和电压比较器
  17. Linux系统打印机打印乱码,Linux输入中文乱码问题(亲测有效)
  18. 原生小程序开发优化方案
  19. 汉语拼音拼读的小技巧
  20. 月结6 - AR和AP重分类(Regroup)[FAGLF101/OBBU/OBBV]

热门文章

  1. Mac的代理proxies配置Bypass proxy settings for these Hosts Domains 无法写多个,逗号自动变顿号
  2. 04 | 数学归纳法:如何用数学归纳提升代码的运行效率?
  3. 微信小程序canvas生成头像图片空白问题
  4. 2018年的我是怎么活下来的,过于真实了哈哈哈哈
  5. struts2 action方法上加 @Token
  6. CkEditor 4.1.3 + CkFinder 2.4
  7. eclipse怎么编写java程序_简单使用Eclipse编写第一个Java程序
  8. 制作漂亮的Word组织结构图(转)
  9. 龙珠觉醒手游怎么用电脑玩 龙珠觉醒安卓模拟器教程
  10. 不同类型的磁盘存储在Ubuntu下的性能测试