别再硬啃课本了!用Python+NumPy手搓一个遗传算法,5分钟搞定函数最大值求解

用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值