c++实现遗传算法代码
时间: 2023-05-25 11:04:21 浏览: 118
以下是一个简单的遗传算法实现的代码示例:
```python
import random
# 定义种群大小、基因长度和进化代数
POP_SIZE = 10 # 种群大小
GENE_LENGTH = 5 # 基因长度
GENERATIONS = 50 # 进化代数
# 定义适应度函数,这里使用基因中1的个数作为适应度
def fitness(individual):
return individual.count(1)
# 初始化种群
population = []
for i in range(POP_SIZE):
individual = [random.randint(0, 1) for _ in range(GENE_LENGTH)]
population.append(individual)
# 开始进化
for generation in range(GENERATIONS):
# 计算每个个体的适应度
fitnesses = [fitness(individual) for individual in population]
# 选择操作,这里使用轮盘赌选择
total_fitness = sum(fitnesses)
probabilities = [f/total_fitness for f in fitnesses]
selected = random.choices(population, weights=probabilities, k=POP_SIZE)
# 交叉操作,这里使用单点交叉
offspring = []
for i in range(0, POP_SIZE, 2):
parent1, parent2 = selected[i], selected[i+1]
crossover_point = random.randint(0, GENE_LENGTH-1)
offspring1 = parent1[:crossover_point] + parent2[crossover_point:]
offspring2 = parent2[:crossover_point] + parent1[crossover_point:]
offspring.append(offspring1)
offspring.append(offspring2)
# 变异操作,这里使用单点变异
for individual in offspring:
mutation_point = random.randint(0, GENE_LENGTH-1)
individual[mutation_point] = 1 - individual[mutation_point]
# 更新种群
population = offspring
# 输出本代最优解
best_individual = max(population, key=fitness)
print("Generation:", generation+1, "Best individual:", best_individual, "Fitness:", fitness(best_individual))
```
在这个例子中,我们定义了一个二进制基因的遗传算法,并使用基因中1的个数作为适应度函数。程序中,我们首先初始化了一个包含10个个体的种群,每个个体由5个随机生成的0和1构成。随后,我们进行了50轮迭代,每一轮进行了选择、交叉和变异等操作,最后得到最优解并输出。在选择操作中,我们使用了轮盘赌选择方法,即按照每个个体的适应度值在种群中进行有放回的采样;在交叉操作中,我们使用了单点交叉方法,即将两个父代个体中一个随机位置之后的基因拼接起来生成两个子代个体;在变异操作中,我们使用了单点变异方法,即将一个个体中一个随机位置的基因取反。
阅读全文