使用Python实现遗传算法通常遵循以下步骤:
定义问题:
明确要解决的问题,例如优化问题、寻找最佳解等。
初始化种群:
创建一个初始的种群,每个个体代表问题的一个解决方案。
评估适应度:
为每个个体计算适应度评分,以评估其解决问题的能力。
选择:
根据适应度评分选择一定数量的个体作为父代进行繁殖。
交叉:
对选出的父代个体进行交叉操作,生成新的个体。
变异:
对新生成的个体进行变异操作,以增加种群的多样性。
替换:
将新生成的个体替换掉原来的个体,形成新的种群。
终止条件:
设定终止条件,如达到最大迭代次数、找到满意的解等。
重复:
重复步骤3到8,直到满足终止条件。
import random
定义遗传算法的参数
POPULATION_SIZE = 10
CROSSOVER_RATE = 0.8
MUTATION_RATE = 0.1
GENERATION = 100
初始化种群
def init_population(size):
return [random.randint(0, 100) for _ in range(size)]
计算适应度
def fitness(individual):
return sum(individual)
选择操作
def selection(population):
return random.choice(population)
交叉操作
def crossover(parent1, parent2):
pos = random.randint(0, len(parent1) - 1)
child1 = parent1[:pos] + parent2[pos:]
child2 = parent2[:pos] + parent1[pos:]
return child1, child2
变异操作
def mutate(individual, mutation_rate):
for i in range(len(individual)):
if random.random() < mutation_rate:
individual[i] = 1 - individual[i]
return individual
遗传算法主循环
def genetic_algorithm():
population = init_population(POPULATION_SIZE)
for generation in range(GENERATION):
评估适应度
fitness_scores = [fitness(individual) for individual in population]
选择
parents = [population[i] for i in range(POPULATION_SIZE) if fitness_scores[i] == max(fitness_scores)]
交叉
offspring = []
while len(offspring) < POPULATION_SIZE:
parent1, parent2 = random.sample(parents, 2)
if random.random() < CROSSOVER_RATE:
child1, child2 = crossover(parent1, parent2)
offspring.extend([mutate(child1, MUTATION_RATE), mutate(child2, MUTATION_RATE)])
替换
population = offspring
返回最优解
return max(population, key=fitness)
运行遗传算法
best_solution = genetic_algorithm()
print("最优解:", best_solution)
这个示例代码展示了如何实现一个基本的遗传算法,用于寻找一组数字中的最大值。你可以根据具体问题调整适应度函数、遗传算法的参数等。