遗传算法类OX交叉选择算法的python实现

与背包问题不同,在求解TSP问题时,染色体编码采用整数编码而不是二进制编码,对于每个城市用一个整数来编号,一个路径就是一条染色体编码。在进行选择运算时,常采用类OX交叉算法,其思路为:
假设
父代 A 1250|436|798
父代 B 3097|654|281
对染色体切片后随机选择一个片段,比如父代B的中间片段654,作为子代的一个片段,在父代A中选择A中存在而父代B中选择的片段不存在的基因,将其作为子代的基因,由此得到子代染色体编码为1203|654|798实现代码为:

def cross(self, parent1, parent2):
            index1 = random.randint(0, self.geneLenght - 1)
            index2 = random.randint(index1, self.geneLenght - 1)
            tempGene = parent2.gene[index1:index2] #交叉的基因片段
            newGene = []
            len = 0
            for g in parent1.gene:
                  if len == index1:
                        newGene.extend(tempGene)# 插入基因片段
                        len += 1
                  if g not in tempGene:
                        newGene.append(g)
                        len += 1
            self.crossCount += 1
            return newGene
    原文作者:遗传算法
    原文地址: https://blog.csdn.net/iqqiqqiqqiqq/article/details/52263578
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞