python遗传算法_【机器学习】遗传算法(Genetic Algorithm)的Python实现
时间: 2024-06-08 20:09:33 浏览: 84
遗传算法是一种模拟自然选择和遗传机制的优化算法,具有广泛的应用。在Python中,可以使用遗传算法来解决各种问题,例如函数最优化、机器学习等。
下面是一个简单的遗传算法的Python实现,用于寻找函数 f(x)=x^2 在区间 [0, 31] 的最大值。该算法的基本流程如下:
1. 初始化种群,即生成一些随机的个体。
2. 计算每个个体的适应度,即函数 f(x) 的值。
3. 选择若干个适应度较高的个体,作为下一代种群的父母。
4. 对父母进行交叉操作,生成新的个体。
5. 对新的个体进行变异操作,引入新的遗传信息。
6. 将新的个体加入到种群中。
7. 重复上述步骤,直到满足终止条件。
代码如下:
```python
import random
# 目标函数
def fitness_func(x):
return x ** 2
# 个体类
class Individual:
def __init__(self):
self.gene = random.uniform(0, 31)
self.fitness = fitness_func(self.gene)
def __str__(self):
return 'gene: %.2f, fitness: %.2f' % (self.gene, self.fitness)
# 种群类
class Population:
def __init__(self, size):
self.size = size
self.individuals = [Individual() for _ in range(size)]
def select(self):
# 轮盘赌选择
total_fitness = sum([i.fitness for i in self.individuals])
r = random.uniform(0, total_fitness)
s = 0
for i in range(self.size):
s += self.individuals[i].fitness
if s >= r:
return self.individuals[i]
def crossover(self, father, mother):
# 单点交叉
gene1 = (father.gene + mother.gene) / 2
gene2 = (father.gene + mother.gene) / 2
return Individual()
def mutate(self, individual):
# 随机变异
individual.gene = random.uniform(0, 31)
individual.fitness = fitness_func(individual.gene)
def evolve(self):
# 选择父母
parents = [self.select() for _ in range(self.size)]
# 交叉生成新个体
offsprings = [self.crossover(parents[i], parents[i+1]) for i in range(0, self.size, 2)]
# 变异
for i in range(self.size):
if random.random() < 0.1:
self.mutate(offsprings[i])
# 添加新个体
self.individuals = parents + offsprings
def get_best(self):
# 返回适应度最高的个体
return max(self.individuals, key=lambda x: x.fitness)
# 主程序
population = Population(50)
for i in range(1000):
population.evolve()
print('generation %d, best individual: %s' % (i+1, population.get_best()))
```
在上面的代码中,我们首先定义了一个目标函数 fitness_func(x),用于计算个体的适应度。然后定义了一个 Individual 类,表示一个个体,其中包括基因和适应度两个属性。接着定义了一个 Population 类,表示一个种群,其中包括多个个体。该类还实现了选择、交叉、变异和进化等操作。
在主程序中,我们首先创建了一个种群 population,并进行了1000代的进化。每一代进化都会执行种群的 evolve() 方法,该方法会选择父母、进行交叉和变异,并将新个体加入到种群中。每一代结束后,我们输出适应度最高的个体。
阅读全文