用Python+NumPy从零构建遗传算法:5分钟实战函数优化
还记得第一次在课本上看到遗传算法时那种云里雾里的感觉吗?那些抽象的选择、交叉、变异操作,配上晦涩的数学公式,简直让人望而生畏。但当我真正用代码实现它时,才发现遗传算法就像一场数字世界的进化游戏——今天我们就用NumPy这个基础工具,亲手搭建一个完整的遗传算法框架,用它来寻找复杂函数的最大值。不需要任何现成的机器学习库,只需要Python和一点好奇心。
1. 遗传算法核心原理拆解
遗传算法的魅力在于它模拟了自然选择的过程。想象你有一群探险家(种群),他们带着不同的地图(染色体)在未知领域寻找宝藏(最优解)。每一代中,表现好的探险家有更大机会繁衍后代,他们的地图会通过"基因重组"(交叉)和随机调整(变异)传递给下一代。
关键组件解析 :
- 染色体编码 :我们用浮点数数组表示每个个体的基因。对于二维函数优化问题,每个个体就是
[x, y]这样的坐标对。 - 适应度函数 :这是我们的"寻宝雷达",计算每个坐标对应的函数值。对于求最大值问题,函数值本身就是适应度。
import numpy as np
# 示例函数:复杂多峰函数
def complex_function(x, y):
return np.sin(x)*np.cos(y) + 0.1*(x**2 + y**2)
# 适应度计算
def fitness(individual):
x, y = individual
return complex_function(x, y)
2. 构建遗传算法框架
让我们从零开始搭建算法骨架。下面的代码块展示了一个完整的遗传算法类初始化:
class GeneticAlgorithm:
def __init__(self, pop_size=50, crossover_rate=0.8,
mutation_rate=0.1, elitism=1):
self.pop_size = pop_size # 种群规模
self.crossover_rate = crossover_rate # 交叉概率
self.mutation_rate = mutation_rate # 变异概率
self.elitism = elitism # 保留的精英个体数
# 初始化种群(在search_range范围内随机生成)
self.population = np.random.uniform(
low=-10, high=10, size=(pop_size, 2))
# 记录进化历史
self.best_fitness_history = []
self.avg_fitness_hist

178

被折叠的 条评论
为什么被折叠?



