DAY12打卡 启发式算法
超参数调整专题2
- 三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法
- 学习优化算法的思路(避免浪费无效时间)
作业:今天以自由探索的思路为主,尝试检索资料、视频、文档,用尽可能简短但是清晰的语言看是否能说清楚这三种算法每种算法的实现逻辑,帮助更深入的理解。
一.简述
启发式算法不是一步到位地找最优解,而是靠一些聪明的“试试看”的策略去找还不错的解决方案。
它就像我们考试时不会做题,也会根据经验、直觉或者试探一步步尝试答案。
元启发式算法 = 从自然界学来的“找答案的策略模板”【例如火焰冷却(模拟退火)、生物进化(遗传算法)、鸟群觅食(粒子群)】
启发式算法 = 元启发式算法 + 针对问题的特征设计
二.启发式算法
1. 遗传算法 GA
模拟自然界中“优胜劣汰”和“基因遗传”的进化机制。每一代保留优质基因,通过“选择-交叉-变异”,不断优化解。
1)方法介绍:
1. 初始化一个种群(随机产生多个解)
2. 对每个个体计算适应度 f(x)
3. 选择适应度高的个体作为父母
4. 交叉父母,生成新个体
5. 可能发生变异(改变一部分基因)
6. 更新种群并迭代,直到满足停止条件
2)算法概述:
-
适应度函数:评价每个解的优劣
f(x)=x2f(x) = x^2f(x)=x2 本例中,x 越大,f(x) 越好,表示越优解。 -
交叉操作:
将两个父母基因平均组合 -
变异操作:
添加一个小的高斯随机数def fitness(x): return x**2 # 目标函数,越大越好 def crossover(p1, p2): return (p1 + p2) / 2 # 简单均值交叉 def mutation(x): return x + np.random.normal(0, 1) # 加入正态扰动变异pop = np.random.uniform(-10, 10, 10) # 初始种群10个个体#主循环,每代执行 for gen in range(50):scores = [fitness(x) for x in pop] # 计算每个个体的适应度parents = sorted(zip(scores, pop), reverse=True)[:2] # 选出最优两个父母child = crossover(parents[0][1], parents[1][1]) # 交叉child = mutation(child) # 变异pop[np.argmin(scores)] = child # 用最差的个体替换为新生成的子代
2.粒子群算法PSO:
模拟鸟群觅食行为,每个“鸟”根据自己经验和群体经验调整方向,逐渐趋近最优食物点。
1)方法介绍
1. 初始化粒子位置和速度
2. 每个粒子记录:
- 自己历史最优位置 p_best
- 群体中最优位置 g_best
3. 更新粒子的速度和位置:
4. 更新个体最优和全局最优
5. 重复迭代
2)算法概述
x = np.random.uniform(-5, 5, n_particles) # 粒子初始位置
v = np.zeros(n_particles) # 初始速度为 0
p_best = x.copy() # 每个粒子自身最优位置
g_best = x[np.argmax(f(x))] # 全局最优位置#每代更新
v = 0.5 * v + 0.8 * (p_best - x) + 0.9 * (g_best - x) # 速度更新
x += v # 位置更新for i in range(n_particles):if f(x[i]) > f(p_best[i]): # 更新个体最优p_best[i] = x[i]g_best = p_best[np.argmax([f(p) for p in p_best])] # 更新全局最优
3.退火算法SA
模拟金属退火冷却过程,初期接受坏解(跳出局部最优),温度降低后只接受更优解。
1)方法介绍
1. 初始化当前解 x 和温度 T
2. 随机生成新解 x_new(邻域扰动)
3. 计算目标函数差值 ΔE = f(new) - f(old)
4. 若更优则接受新解;若更差则以概率 P = exp(-ΔE/T) 接受
5. 降低温度,重复
2)算法概述
x = np.random.uniform(-10, 10) # 初始解
T = 100 # 初始温度#每次迭代
new_x = x + np.random.normal(0, 1) # 邻域扰动
delta = f(new_x) - f(x) # 解变差了多少
if delta < 0 or np.random.rand() < np.exp(-delta / T):x = new_x # 根据概率接受
T *= 0.99 # 降低温度
@浙大疏锦行