一、根据适应度函数选择
遗传算法是一种基于自然选择和基因重组的搜索算法。在遗传算法中,适应度函数是一种衡量个体适应程度的方法。在选择操作的过程中,适应度函数是一个非常重要的参考因素。在选择操作中,可以根据适应度得分来计算每个个体的选择概率,从而选择优秀的个体进行进一步的遗传操作。
def selection(population, fitness_values):
"""
通过轮盘赌选择算法进行选择
:param population: 种群
:param fitness_values: 适应度函数值
:return: 返回被选择的个体
"""
population_size = len(population)
selected = []
sum_of_fitness_values = sum(fitness_values)
probabilities = [fitness / sum_of_fitness_values for fitness in fitness_values]
cumulative_probabilities = [sum(probabilities[:i+1]) for i in range(population_size)]
for i in range(population_size):
r = random.random()
for j in range(population_size):
if r <= cumulative_probabilities[j]:
selected.append(population[j])
break
return selected
二、轮盘赌选择算法
轮盘赌算法是一个常用的基于选择概率进行选择的算法。它的选择原则是,每一个个体都按照其适应度值,被赋予一定的选择概率。这些选择概率按照大小关系,被放置在一个轮盘上。根据该轮盘上的概率来进行选择。
def roulette_wheel_selection(population, fitness_values):
"""
通过轮盘赌选择算法进行选择
:param population: 种群
:param fitness_values: 适应度函数值
:return: 返回被选择的个体
"""
population_size = len(population)
selected = []
sum_of_fitness_values = sum(fitness_values)
probabilities = [fitness / sum_of_fitness_values for fitness in fitness_values]
cumulative_probabilities = [sum(probabilities[:i+1]) for i in range(population_size)]
for i in range(population_size):
r = random.random()
for j in range(population_size):
if r <= cumulative_probabilities[j]:
selected.append(population[j])
break
return selected
三、竞标赛选择算法
竞标赛选择算法是一种简单有效的遗传算法选择操作方法。它的核心思想是,在所有的个体中,任选几个个体进行比较,选出适应度值最高的个体,用于遗传操作。这样,经过若干轮选择,能够有效地保留优秀个体。
def tournament_selection(population, fitness_values, tournament_size):
"""
使用竞标赛选择算法进行选择
:param population: 种群
:param fitness_values: 适应度函数值
:param tournament_size: 竞标赛的大小
:return: 返回被选择的个体
"""
population_size = len(population)
selected = []
for i in range(population_size):
competitors = random.sample(range(population_size), tournament_size)
competitors_fitnesses = [fitness_values[j] for j in competitors]
winner = max(competitors_fitnesses)
index = competitors[competitors_fitnesses.index(winner)]
selected.append(population[index])
return selected
四、随机选择算法
随机选择算法是一种简单的选择算法。它的核心思想是,随机选择种群中的一个个体,来进行遗传操作。虽然这种选择算法不会对个体进行适应程度的评估和筛选,但是通过适当的控制,可以有效地避免出现早熟现象。
def random_selection(population):
"""
使用随机选择算法进行选择
:param population: 种群
:return: 返回随机选择的个体
"""
population_size = len(population)
index = random.randint(0, population_size - 1)
return population[index]
五、Elitist选择算法
Elitist选择算法是一种选择算法,它的核心思想是,保留种群中适应度最好的若干个个体,不参与遗传操作,以便能够保持种群的优良性,避免过早的收敛。
def elitist_selection(population, fitness_values, elite_size):
"""
使用Elitist选择算法进行选择,保留适应度最好的若干个个体
:param population: 种群
:param fitness_values: 适应度函数值
:param elite_size: 保留的个体数量
:return: 返回被选择的个体
"""
population_size = len(population)
indices = sorted(range(population_size), key=lambda i: fitness_values[i], reverse=True)[:elite_size]
selected = [population[i] for i in indices]
return selected
原创文章,作者:XYTOQ,如若转载,请注明出处:https://www.506064.com/n/332473.html
微信扫一扫
支付宝扫一扫