用python写一段遗传算法
时间: 2023-08-21 15:08:08 浏览: 41
当然可以!下面是一个简单的用Python编写的遗传算法示例:
```python
import random
# 定义目标函数(示例为简单的函数:f(x) = x^2)
def fitness_function(x):
return x**2
# 初始化种群
def initialize_population(population_size, chromosome_length):
population = []
for _ in range(population_size):
chromosome = [random.randint(0, 1) for _ in range(chromosome_length)]
population.append(chromosome)
return population
# 计算适应度值
def calculate_fitness(population):
fitness_values = []
for chromosome in population:
# 解码染色体
x = int("".join(map(str, chromosome)), 2)
fitness_values.append(fitness_function(x))
return fitness_values
# 选择操作(轮盘赌选择)
def selection(population, fitness_values):
total_fitness = sum(fitness_values)
probabilities = [fitness / total_fitness for fitness in fitness_values]
# 使用轮盘赌选择
selected_population = []
for _ in range(len(population)):
pick = random.uniform(0, 1)
cumulative_probability = 0
for i, probability in enumerate(probabilities):
cumulative_probability += probability
if pick <= cumulative_probability:
selected_population.append(population[i])
break
return selected_population
# 交叉操作(单点交叉)
def crossover(population):
offspring_population = []
for i in range(0, len(population), 2):
parent1 = population[i]
parent2 = population[i+1]
# 随机选择交叉点
crossover_point = random.randint(1, len(parent1)-1)
# 生成子代染色体
offspring1 = parent1[:crossover_point] + parent2[crossover_point:]
offspring2 = parent2[:crossover_point] + parent1[crossover_point:]
offspring_population.append(offspring1)
offspring_population.append(offspring2)
return offspring_population
# 变异操作(随机位变异)
def mutation(population, mutation_rate):
mutated_population = []
for chromosome in population:
mutated_chromosome = []
for gene in chromosome:
if random.random() < mutation_rate:
mutated_chromosome.append(1 - gene) # 变异位点取反
else:
mutated_chromosome.append(gene)
mutated_population.append(mutated_chromosome)
return mutated_population
# 遗传算法主函数
def genetic_algorithm(population_size, chromosome_length, generations, mutation_rate):
population = initialize_population(population_size, chromosome_length)
for _ in range(generations):
fitness_values = calculate_fitness(population)
selected_population = selection(population, fitness_values)
offspring_population = crossover(selected_population)
mutated_population = mutation(offspring_population, mutation_rate)
population = mutated_population
# 返回适应度最高的染色体
fitness_values = calculate_fitness(population)
best_chromosome = population[fitness_values.index(max(fitness_values))]
return best_chromosome
# 执行遗传算法
best_chromosome = genetic_algorithm(population_size=100, chromosome_length=8, generations=100, mutation_rate=0.01)
# 解码最优染色体并输出结果
x = int("".join(map(str, best_chromosome)), 2)
print("最优解 x =", x)
print("最优目标函数值 f(x) =", fitness_function(x))
```
请注意,这只是一个简单的遗传算法示例,可以根据实际需求进行修改和优化。