python遗传算法代码
时间: 2023-09-03 20:12:16 浏览: 34
以下是一个简单的Python遗传算法代码的例子,用于优化一个简单的函数:
```python
import random
# 定义适应度函数
def fitness(individual):
x = individual[0]
y = individual[1]
return x**2 + y**2
# 定义交叉函数
def crossover(individual1, individual2):
crossover_point = random.randint(1, len(individual1) - 1)
child1 = individual1[:crossover_point] + individual2[crossover_point:]
child2 = individual2[:crossover_point] + individual1[crossover_point:]
return child1, child2
# 定义变异函数
def mutate(individual, mutation_probability):
for i in range(len(individual)):
if random.random() < mutation_probability:
individual[i] = random.uniform(-5, 5)
return individual
# 定义遗传算法函数
def genetic_algorithm(population_size, fitness_function, crossover_function, mutation_function, mutation_probability, num_generations):
# 初始化种群
population = []
for i in range(population_size):
individual = [random.uniform(-5, 5), random.uniform(-5, 5)]
population.append(individual)
# 进化
for generation in range(num_generations):
# 计算适应度
fitness_values = [fitness_function(individual) for individual in population]
# 选择
total_fitness = sum(fitness_values)
selection_probabilities = [fitness_value / total_fitness for fitness_value in fitness_values]
selected_indices = random.choices(range(population_size), weights=selection_probabilities, k=population_size)
selected_population = [population[i] for i in selected_indices]
# 交叉
children = []
for i in range(0, population_size, 2):
child1, child2 = crossover_function(selected_population[i], selected_population[i+1])
children.append(child1)
children.append(child2)
# 变异
mutated_children = [mutation_function(child, mutation_probability) for child in children]
# 更新种群
population = mutated_children
# 返回最佳个体
fitness_values = [fitness_function(individual) for individual in population]
best_index = fitness_values.index(min(fitness_values))
return population[best_index]
# 测试
best_individual = genetic_algorithm(100, fitness, crossover, mutate, 0.1, 100)
print("最佳个体:", best_individual)
print("最佳适应度:", fitness(best_individual))
```
在这个例子中,我们尝试寻找一个函数的最小值。我们使用遗传算法来优化函数 $f(x, y) = x^2 + y^2$,其中 $x$ 和 $y$ 的值在 $[-5, 5]$ 范围内。我们使用随机初始化种群,并通过适应度函数计算每个个体的适应度。在每一代,我们选择最适应的个体,并使用交叉和变异操作来生成新个体。在这个例子中,我们使用单点交叉和随机均匀变异。遗传算法运行 100 代,然后返回最适应的个体。