示例#1
0
 def cross(self, parent1: Life, parent2: Life):
     """
                     交叉:两染色体相同位置的片段之间的部分交叉
                     输入:父代染色体(Life类)
                     输出:交叉后的子代染色体(Life类)
         """
     index1 = np.random.randint(len(origincoor))
     index2 = np.random.randint(index1 + 1, len(origincoor) + 1)
     tempGene1 = [[], []]
     tempGene2 = [[], []]
     tempGene1[0] = parent1.gene[0][index1 * 3:index2 * 3]  # 交叉的基因片段
     tempGene1[1] = parent1.gene[1][index1 * 3:index2 * 3]
     tempGene2[0] = parent2.gene[0][index1 * 3:index2 * 3]  # 交叉的基因片段
     tempGene2[1] = parent2.gene[1][index1 * 3:index2 * 3]
     parent1.gene[0][index1 * 3:index2 * 3] = tempGene2[0]
     parent1.gene[1][index1 * 3:index2 * 3] = tempGene2[1]
     parent2.gene[0][index1 * 3:index2 * 3] = tempGene1[0]
     parent2.gene[1][index1 * 3:index2 * 3] = tempGene1[1]
     if checklegal(parent1.gene[0], len(targetcoor[0])) == False:
         parent1.gene = wipe(parent1.gene, index1 * 3, index2 * 3)
         parent1.gene = correctchrome(parent1.gene, index1, index2,
                                      TargetNum, ReconNum, UnionNum,
                                      CombatNum)
     if checklegal(parent2.gene[0], len(targetcoor[0])) == False:
         parent2.gene = wipe(parent2.gene, index1 * 3, index2 * 3)
         parent2.gene = correctchrome(parent2.gene, index1, index2,
                                      TargetNum, ReconNum, UnionNum,
                                      CombatNum)
     parent1.score = totaldis(parent1.gene, origincoor, targetcoor,
                              ThreatRadius, TurnRadius, ReconTime, Velocity)
     parent2.score = totaldis(parent2.gene, origincoor, targetcoor,
                              ThreatRadius, TurnRadius, ReconTime, Velocity)
     self.crossCount += 1
     return parent1, parent2
     '''
示例#2
0
 def AngleMutation(self, parent: Life):
     flag = 0
     '''
         角度突变:某一个任务的角度变化
         输入:要突变的染色体(Life类)
         输出:突变后的染色体(Life类)
         '''
     ###############################待修改突变函数##################################
     while flag == 0:
         index = np.random.randint(len(parent.gene[0]) + 1)
         if parent.gene[0][index] != 0:
             flag = 1
     parent.gene[1][index] = np.random.randint(1, 361)
     parent.score = totaldis(parent.gene, origincoor, targetcoor,
                             ThreatRadius, TurnRadius, ReconTime, Velocity)
     self.mutationCount += 1
     return parent
     '''