遗传算法PYthon代码
时间: 2023-09-26 08:11:11 浏览: 41
遗传算法的 Python 代码实现如下:
```python
import random
# 定义适应度函数,此处以求解 x^2 的最大值为例
def fitness_func(x):
return x ** 2
# 定义遗传算法函数
def genetic_algorithm(population_size, gene_size, crossover_rate, mutation_rate, generations):
# 初始化种群
population = [[random.randint(0, 1) for _ in range(gene_size)] for _ in range(population_size)]
for generation in range(generations):
# 计算适应度
fitness_scores = [fitness_func(int(''.join(str(gene) for gene in chromosome), 2)) for chromosome in population]
# 选择
total_fitness = sum(fitness_scores)
selection_probabilities = [fitness_score / total_fitness for fitness_score in fitness_scores]
cumulative_probabilities = [sum(selection_probabilities[:i+1]) for i in range(population_size)]
selected_population = []
for _ in range(population_size):
random_number = random.random()
for i in range(population_size):
if random_number <= cumulative_probabilities[i]:
selected_population.append(population[i])
break
# 交叉
for i in range(0, population_size, 2):
if random.random() < crossover_rate:
crossover_point = random.randint(1, gene_size-1)
selected_population[i][:crossover_point], selected_population[i+1][:crossover_point] = \
selected_population[i+1][:crossover_point], selected_population[i][:crossover_point]
# 变异
for i in range(population_size):
for j in range(gene_size):
if random.random() < mutation_rate:
selected_population[i][j] = 1 - selected_population[i][j]
population = selected_population
# 返回最优解
best_chromosome = max(population, key=lambda chromosome: fitness_func(int(''.join(str(gene) for gene in chromosome), 2)))
return int(''.join(str(gene) for gene in best_chromosome), 2)
```
其中,`population_size` 表示种群大小,`gene_size` 表示基因的长度,`crossover_rate` 表示交叉概率,`mutation_rate` 表示变异概率,`generations` 表示迭代次数。适应度函数 `fitness_func` 可根据具体问题进行定义。