29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
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 |