遗传算法python实例
时间: 2023-06-29 18:14:34 浏览: 51
以下是一个简单的遗传算法 Python 实现示例:
```python
import random
# 定义问题
def fitness(sequence):
return sum(sequence)
# 初始化种群
def init_population(population_size, sequence_length):
population = []
for i in range(population_size):
population.append([random.randint(0, 1) for j in range(sequence_length)])
return population
# 选择
def selection(population, fitness):
fitness_sum = sum(fitness)
probability = [f/fitness_sum for f in fitness]
cum_probability = [sum(probability[:i+1]) for i in range(len(probability))]
new_population = []
for i in range(len(population)):
r = random.random()
for j in range(len(cum_probability)):
if r < cum_probability[j]:
new_population.append(population[j])
break
return new_population
# 交叉
def crossover(population):
new_population = []
for i in range(0, len(population), 2):
if i+1 < len(population):
crossover_point = random.randint(1, len(population[i])-1)
new_population.append(population[i][:crossover_point] + population[i+1][crossover_point:])
new_population.append(population[i+1][:crossover_point] + population[i][crossover_point:])
return new_population
# 变异
def mutation(population, mutation_rate):
for i in range(len(population)):
for j in range(len(population[i])):
if random.random() < mutation_rate:
population[i][j] = 1 - population[i][j]
return population
# 优化
def optimize(sequence_length, population_size, iterations, mutation_rate):
population = init_population(population_size, sequence_length)
for i in range(iterations):
fitness_values = [fitness(sequence) for sequence in population]
population = selection(population, fitness_values)
population = crossover(population)
population = mutation(population, mutation_rate)
return max(population, key=fitness)
# 使用示例
sequence_length = 10
population_size = 100
iterations = 100
mutation_rate = 0.01
result = optimize(sequence_length, population_size, iterations, mutation_rate)
print(result)
```
在上面的示例中,我们首先定义了一个适应度函数(fitness),这个函数将一个二进制序列作为输入,并返回其求和。然后,我们使用 init_population 函数初始化一个种群,并对其进行选择、交叉和变异操作,以优化适应度函数。最后,我们使用 optimize 函数来执行该过程,并返回具有最大适应度的序列。
请注意,这只是一个简单的遗传算法实现示例,你可以根据自己的需求进行修改和优化。