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 '''
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 '''