day12python打卡

超参数调整专题2

  1. 三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法
  2. 学习优化算法的思路(避免浪费无效时间)

作业:今天以自由探索的思路为主,尝试检索资料、视频、文档,用尽可能简短但是清晰的语言看是否能说清楚这三种算法每种算法的实现逻辑,帮助更深入的理解。

1. 遗传算法(Genetic Algorithm, GA)

核心思想:模拟生物进化中的“自然选择,适者生存”机制,通过迭代优化种群中的个体。
关键步骤

  1. 初始化:随机生成包含多个“个体”(候选解)的初始种群,每个个体由基因编码(如参数组合)表示。
  2. 适应度评估:用目标函数(如模型准确率)计算每个个体的适应度。
  3. 选择:根据适应度选择优秀个体作为父母(如轮盘赌选择或锦标赛选择)。
  4. 交叉(Crossover):父母基因随机交换部分片段,生成新个体(如单点交叉)。
  5. 变异(Mutation):以低概率随机修改新个体的某些基因(如调整参数值)。
  6. 迭代:用新个体替换旧种群,重复步骤2-5直至收敛。

关键参数:种群大小、交叉率、变异率。
比喻:生物进化中的基因重组与突变,逐步逼近最优解。


2. 粒子群算法(Particle Swarm Optimization, PSO)

核心思想:模拟鸟群觅食行为,粒子通过跟踪个体和群体最优位置调整飞行方向。
关键步骤

  1. 初始化:随机生成粒子群,每个粒子有位置(解)和速度(解的变化方向)。
  2. 适应度评估:计算每个粒子的目标函数值。
  3. 更新最优值:记录每个粒子的历史最优位置(个体最优)和群体最优位置。
  4. 速度和位置更新
    • 速度公式新速度 = 惯性权重×原速度 + 个体学习因子×rand()×(个体最优位置-当前位置) + 群体学习因子×rand()×(群体最优位置-当前位置)
    • 位置更新新位置 = 原位置 + 新速度
  5. 迭代:重复步骤2-4直至收敛。

关键参数:惯性权重、个体/群体学习因子。
比喻:鸟群协作搜索,通过个体经验和群体智慧找到最优路径。


3. 模拟退火算法(Simulated Annealing, SA)

核心思想:模仿金属退火过程,允许以一定概率接受更差解,避免陷入局部最优。
关键步骤

  1. 初始化:随机生成初始解,设定初始高温和降温计划(如指数降温)。
  2. 生成新解:在当前解附近扰动生成新解(如随机调整参数)。
  3. 能量差计算:计算目标函数值的差异 ΔE = 当前解能量 - 新解能量
  4. 接受准则
    • 若 ΔE > 0(新解更优),直接接受。
    • 若 ΔE ≤ 0(新解更差),以概率 exp(ΔE / T) 接受(T为当前温度)。
  5. 降温:按计划降低温度(如 T = T × 冷却率)。
  6. 迭代:重复步骤2-5直至温度降至终止条件。

关键参数:初始温度、冷却率、终止温度。
比喻:金属冷却过程,早期允许“跳跃”探索全局,后期聚焦局部优化。

# 遗传算法核心伪代码
population = initialize_population()
while not converged:
    fitness = evaluate(population)
    parents = select_parents(population, fitness)
    offspring = crossover(parents)
    mutate(offspring)
    population = replace(population, offspring)

# 粒子群算法核心伪代码
particles = initialize_particles()
global_best = find_global_best(particles)
while not converged:
    for particle in particles:
        update_velocity(particle, global_best)
        update_position(particle)
        update_bests(particle, global_best)

# 模拟退火核心伪代码
current_solution = initialize()
current_energy = evaluate(current_solution)
T = initial_temperature
while T > final_temperature:
    new_solution = perturb(current_solution)
    new_energy = evaluate(new_solution)
    if accept(new_energy, current_energy, T):
        current_solution = new_solution
        current_energy = new_energy
    T = cool(T)

浙大疏锦行

你可能感兴趣的:(py打开学习,python)