Allenfenqu/select.py

29 lines
1.1 KiB
Python
Raw Normal View History

2024-03-20 12:25:06 +08:00
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