遗传算法python代码
时间: 2023-09-04 08:11:05 浏览: 107
以下是一个简单的遗传算法的 Python 代码示例:
```python
import random
# 定义一个适应度函数,本例中为函数 f(x) = x^2
def fitness_func(x):
return x ** 2
# 初始化种群
def init_population(population_size, gene_size):
population = []
for i in range(population_size):
individual = []
for j in range(gene_size):
individual.append(random.randint(0, 1))
population.append(individual)
return population
# 获取每个个体的适应度值
def get_fitness(population):
fitness = []
for individual in population:
x = int(''.join(map(str, individual)), 2)
fitness.append(fitness_func(x))
return fitness
# 选择操作
def selection(population, fitness):
total_fitness = sum(fitness)
probability = [f / total_fitness for f in fitness]
probability_sum = [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(probability_sum)):
if r < probability_sum[j]:
new_population.append(population[j])
break
return new_population
# 交叉操作
def crossover(population):
new_population = []
for i in range(0, len(population), 2):
individual1 = population[i]
individual2 = population[i+1]
crossover_point = random.randint(1, len(individual1) - 1)
new_individual1 = individual1[:crossover_point] + individual2[crossover_point:]
new_individual2 = individual2[:crossover_point] + individual1[crossover_point:]
new_population.append(new_individual1)
new_population.append(new_individual2)
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 genetic_algorithm(population_size, gene_size, mutation_rate, max_generation):
# 初始化种群
population = init_population(population_size, gene_size)
# 迭代
for i in range(max_generation):
# 获取每个个体的适应度值
fitness = get_fitness(population)
# 选择操作
population = selection(population, fitness)
# 交叉操作
population = crossover(population)
# 变异操作
population = mutation(population, mutation_rate)
# 返回最终的种群和适应度值
fitness = get_fitness(population)
return population, fitness
```
在上面的代码中,我们定义了一个适应度函数 `fitness_func`,并且实现了初始化种群、获取每个个体的适应度值、选择操作、交叉操作和变异操作等函数。最后,我们将这些函数组合起来,实现了一个遗传算法的主函数 `genetic_algorithm`,它接受种群大小、基因长度、变异率和最大迭代次数等参数,返回最终的种群和适应度值。
阅读全文
相关推荐








