天天看点

Python实现遗传算法的示例

作者:溪头卧剥莲蓬2023

下面是一个使用Python实现遗传算法的简单示例:

Python实现遗传算法的示例

import random

# 定义适应度函数(目标函数)

def fitness_function(chromosome):

x = chromosome[0]

return x**2 + 4*x - 10

# 创建种群

def create_population(population_size, chromosome_size):

population = []

for _ in range(population_size):

chromosome = [random.randint(0, 1) for _ in range(chromosome_size)]

population.append(chromosome)

return population

# 选择操作

def selection(population):

# 使用轮盘赌选择

total_fitness = sum(fitness_function(chromosome) for chromosome in population)

probabilities = [fitness_function(chromosome) / total_fitness for chromosome in population]

selected_chromosomes = random.choices(population, probabilities, k=len(population))

return selected_chromosomes

# 交叉操作

def crossover(parent1, parent2):

# 单点交叉

crossover_point = random.randint(1, len(parent1)-1)

offspring1 = parent1[:crossover_point] + parent2[crossover_point:]

offspring2 = parent2[:crossover_point] + parent1[crossover_point:]

return offspring1, offspring2

# 变异操作

def mutation(chromosome, mutation_rate):

# 位翻转变异

mutated_chromosome = chromosome.copy()

for i in range(len(mutated_chromosome)):

if random.random() < mutation_rate:

mutated_chromosome[i] = 1 - mutated_chromosome[i]

return mutated_chromosome

# 遗传算法主程序

def genetic_algorithm(population_size, chromosome_size, generations, mutation_rate):

population = create_population(population_size, chromosome_size)

for _ in range(generations):

selected_population = selection(population)

new_population = []

while len(new_population) < population_size:

parent1, parent2 = random.choices(selected_population, k=2)

offspring1, offspring2 = crossover(parent1, parent2)

mutated_offspring1 = mutation(offspring1, mutation_rate)

mutated_offspring2 = mutation(offspring2, mutation_rate)

new_population.extend([mutated_offspring1, mutated_offspring2])

population = new_population

best_chromosome = max(population, key=fitness_function)

best_fitness = fitness_function(best_chromosome)

return best_chromosome, best_fitness

# 测试遗传算法

population_size = 50

chromosome_size = 10

generations = 100

mutation_rate = 0.01

best_chromosome, best_fitness = genetic_algorithm(population_size, chromosome_size, generations, mutation_rate)

print("Best Chromosome:", best_chromosome)

print("Best Fitness:", best_fitness)

这个示例实现了一个简单的遗传算法来求解优化问题,其中适应度函数为 x**2 + 4*x - 10。遗传算法的主要步骤包括创建种群、选择、交叉和变异。通过迭代进化多代,逐渐找到更优的染色体作为解。在每一代中,使用选择操作选择优秀的个体,然后进行交叉和变异生成新的后代。

请注意,此示例是一个通用的遗传算法框架,可以根据不同的问题进行调整和扩展。您可以根据自己的优化目标和约束条件定义适应度函数,并根据需要调整其他参数和操作。

Python实现遗传算法的示例