遗传算法python实例
时间: 2023-10-13 10:23:54 浏览: 58
以下是一个简单的遗传算法的 Python 实现示例:
```python
import random
# 目标函数,这里使用的是一个简单的函数:f(x) = x^2
def fitness_function(x):
return x**2
# 初始化种群
def init_population(population_size, chromosome_length):
population = []
for i in range(population_size):
chromosome = [random.randint(0, 1) for j in range(chromosome_length)]
population.append(chromosome)
return population
# 计算适应度
def calculate_fitness(population):
fitness_scores = []
for chromosome in population:
x = int(''.join(map(str, chromosome)), 2)
fitness_scores.append(fitness_function(x))
return fitness_scores
# 选择
def selection(population, fitness_scores):
selected_population = []
for i in range(len(population)):
# 每次选择两个个体进行比较
parent1 = random.choice(population)
parent2 = random.choice(population)
if fitness_scores[population.index(parent1)] < fitness_scores[population.index(parent2)]:
selected_population.append(parent1)
else:
selected_population.append(parent2)
return selected_population
# 交叉
def crossover(selected_population, crossover_rate):
new_population = []
for i in range(0, len(selected_population), 2):
parent1 = selected_population[i]
parent2 = selected_population[i+1]
if random.random() < crossover_rate:
crossover_point = random.randint(1, len(parent1)-1)
child1 = parent1[:crossover_point] + parent2[crossover_point:]
child2 = parent2[:crossover_point] + parent1[crossover_point:]
new_population.append(child1)
new_population.append(child2)
else:
new_population.append(parent1)
new_population.append(parent2)
return new_population
# 变异
def mutation(new_population, mutation_rate):
for i in range(len(new_population)):
if random.random() < mutation_rate:
mutation_point = random.randint(0, len(new_population[i])-1)
if new_population[i][mutation_point] == 0:
new_population[i][mutation_point] = 1
else:
new_population[i][mutation_point] = 0
return new_population
# 运行遗传算法
def genetic_algorithm(population_size, chromosome_length, crossover_rate, mutation_rate, generations):
population = init_population(population_size, chromosome_length)
for i in range(generations):
fitness_scores = calculate_fitness(population)
selected_population = selection(population, fitness_scores)
new_population = crossover(selected_population, crossover_rate)
new_population = mutation(new_population, mutation_rate)
population = new_population
best_chromosome = max(population, key=lambda x: fitness_function(int(''.join(map(str, x)), 2)))
return int(''.join(map(str, best_chromosome)), 2)
# 测试代码
best_solution = genetic_algorithm(population_size=50, chromosome_length=10, crossover_rate=0.8, mutation_rate=0.1, generations=100)
print("最优解:", best_solution)
```
在这个示例中,我们使用一个简单的函数来作为目标函数:$f(x) = x^2$。我们将染色体表示为一个二进制字符串,并使用随机的方法初始化种群。然后我们计算种群中每个个体的适应度,并使用选择、交叉和变异操作来生成新的种群。最后,我们通过迭代多个代际来找到最优解。
这只是遗传算法的基本实现,实际应用中需要根据具体问题进行调整和优化。
阅读全文