华为Python面试真题解析遗传算法中常见遗传算子(1),Python高级开发工程师面试题

本文详细介绍了遗传算法中用于有序列表的交叉方法,如有序交叉,以及位翻转、交换、反转等突变算子。通过实例展示了这些算子如何在Python面试中应用于解决实际问题,帮助开发者准备华为Python高级开发工程师面试。
摘要由CSDN通过智能技术生成

Note: 在此示例中,第二个后代是通过对第一代后代的选择进行求补而创建的,但是,两个后代也可以彼此独立地创建。

由于这种方法不必交换染色体的全部片段,因此其后代具有更大的多样性。

用于有序列表的交叉

在前面的示例中,我们在两个基于整数的染色体上进行交叉操作,虽然0到9之间的每个值都在每个亲本上出现一次,但是每个后代都有某些值出现多次,而其他值则丢失了。

考虑到在某些任务中,基于整数的染色体可能代表有序列表的索引。例如在旅行商问题中——假设有几个城市,我们知道每个城市之间的距离,并且需要找到穿过所有城市的最短路线。

假设有四个城市,则表示此问题的可能解的简便方法是构造访问城市顺序的具有四位整数染色体的,例如(1,2,3,4)或(3,4,2,1)。具有两个相同值或缺少某些值的染色体诸如(1,2,2,4)是无效的。

对于这种情况,需要设计其他交叉方法以确保创建的后代仍然有效,如有序交叉。

有序交叉

有序交叉(OX1)方法致力于尽可能保留亲本基因的相对顺序。

第一步是具有随机切割点的两点交叉:

step.1

从第二个切割点之后开始,按原始顺序遍历所有父母的基因,开始填充每个后代中的其余基因。对于第一个双亲,6是下一个基因,但是在后代中已经存在,因此继续(环绕)到1,这也已经存在,下一个位置是2。由于后代中尚不存在2,因此将其添加到该位置,如下图所示。对于第二对亲子代,从5开始但其在子代中已经存在,然后移至4也同样存在,当移动到2时,后代中并不存在,因此将其添加到子代中:

step.2

对于第一个双亲,继续到3(已经存在于后代中),然后是4(后代中并不存在),将其添加到后代中。对于另一个亲本,下一个基因是6。由于对应的后代中不存在该基因,因此将其添加到其中:

step.3

以类似的方式继续处理后续基因,并填写下一个可用位点,如下图所示:

step.4

如下图所示,完成了产生两个有效后代染色体的过程:

前言: 本人的原创作品经典算法研究系列,自从10年12月末至11年12月,写了近一年。可以这么说,开博头俩个月一直在整理微软等公司的面试题,而后的四个月至今,则断断续续,除了继续微软面试100题系列,和程序员编程艺术系列之外,便在写这经典算法研究系列和相关算法文章。 本经典算法研究系列,涵盖A*.Dijkstra.DP.BFS/DFS.红黑树.KMP.遗传.启发式搜索.图像特征提取SIFT.傅立叶变换.Hash.快速排序.SPFA.快递选择SELECT等15个经典基础算法,共计31篇文章,包括算法理论的研究与阐述,及其编程的具体实现。很多个算法都后续写了续集,如第二个算法:Dijkstra 算法,便写了4篇文章;sift算法包括其编译及实现,写了5篇文章;而红黑树系列,则更是最后写了6篇文章,成为了国内最为经典的红黑树教程。 OK,任何人有任何问题,欢迎随时在blog上留言评论,或来信:zhoulei0907@yahoo.cn批评指正。谢谢。以下是已经写了的15个经典算法集锦,算是一个目录+索引,共计31篇文章: 十五个经典算法研究集锦+目录 一、A*搜索算法 一(续)、A*,Dijkstra,BFS算法性能比较及A*算法的应用 二、Dijkstra 算法初探 二(续)、彻底理解Dijkstra算法 二(再续)、Dijkstra 算法+fibonacci堆的逐步c实现 二(三续)、Dijkstra 算法+Heap堆的完整c实现源码 三、动态规划算法 四、BFS和DFS优先搜索算法 五、教你透彻了解红黑树 (红黑数系列六篇文章之其两篇) 五(续)、红黑树算法的实现与剖析 六、教你初步了解KMP算法、updated (KMP算法系列三篇文章) 六(续)、从KMP算法一步一步谈到BM算法 六(三续)、KMP算法之总结篇(必懂KMP) 七、遗传算法 透析GA本质 八、再谈启发式搜索算法 九、图像特征提取与匹配之SIFT算法 (SIFT算法系列五篇文章) 九(续)、sift算法的编译与实现 九(再续)、教你一步一步用c语言实现sift算法、上 九(再续)、教你一步一步用c语言实现sift算法、下 九(三续):SIFT算法的应用--目标识别之Bag-of-words模型 十、从头到尾彻底理解傅里叶变换算法、上 十、从头到尾彻底理解傅里叶变换算法、下 十一、从头到尾彻底解析Hash表算法 十一(续)、倒排索引关键词Hash不重复编码实践 十二、快速排序算法 (快速排序算法3篇文章) 十二(续)、快速排序算法的深入分析 十二(再续):快速排序算法之所有版本的c/c++实现 十三、通过浙大上机复试试题学SPFA 算法 十四、快速选择SELECT算法的深入分析与实现 十五、多项式乘法与快速傅里叶变换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值