import numpy as np import random def select(individuals, sizepop): # 本函数对每一代种群中的染色体进行选择,以进行后面的交叉和变异 # individuals input : 种群信息 # sizepop input : 种群规模 # opts input : 选择方法的选择 # ret output : 经过选择后的种群 # yuan=individuals; individuals['fitness'] = 1 / individuals.get('fitness') sumfitness = np.sum(individuals.get('fitness')) sumf = individuals.get('fitness') / sumfitness index = [] for i in range(sizepop): # 转sizepop次轮盘 pick = random.random() while pick == 0: pick = random.random() for j in range(sizepop): pick = pick - sumf[j] if pick < 0: index.append(j) break # 寻找落入的区间,此次转轮盘选中了染色体i,注意:在转sizepop次轮盘的过程中,有可能会重复选择某些染色体 # index=unique(index); # individuals=yuan; individuals['chrom'] = individuals.get('chrom')[index, :] individuals['fitness'] = individuals.get('fitness')[index] ret = individuals return ret