摘要
模拟退火(SA)算法是一种基于物理退火过程的全局优化算法,其核心思想来源于热力学中的退火过程:将材料加热到高温后再缓慢冷却,使其分子结构趋于最低能量状态,从而获得稳定结构。SA 算法利用 Metropolis 准则来决定接受新的解,以一定概率接受劣解,从而避免陷入局部最优。SA 具有收敛速度快、计算复杂度低、适用于连续优化问题等特点,被广泛应用于组合优化、函数优化、神经网络训练等领域。
算法介绍
1. 主要思想
SA 算法模拟物理退火过程,将目标函数 视为能量状态,以一定概率接受更差的解,防止陷入局部最优。
算法的核心机制如下:
- 温度控制:随着迭代次数增加,温度逐步降低,降低搜索的随机性。
- 邻域搜索:每次迭代基于当前解生成新解(小范围扰动)。
- Metropolis 准则 :
- 若新解优于当前解,则无条件接受。
- 若新解劣于当前解,则以概率 P=e−ΔfTP = e^{-\frac{\Delta f}{T}}P=e−TΔf 决定是否接受,TTT 为当前温度,Δf\Delta fΔf 为目标函数值的变化量。
该概率随温度降低而降低,意味着算法在早期具有较强的探索能力,而在后期趋向收敛。
详细代码
以下是 模拟退火优化算法(SA) 的 MATLAB 实现:
Matlab
%% 模拟退火优化算法(Simulated Annealing, SA)
% 输入:
% Mmax - 最大退火次数(降温步数)
% l - 搜索空间下界
% u - 搜索空间上界
% dim - 变量维度
% fobj - 目标优化函数
% 输出:
% Best_score - 最优适应度值(最小化目标)
% Best_pos - 最优解
% curve - 收敛曲线(记录最优值的变化)
function [Best_score, Best_pos, curve] = SA(Mmax, l, u, dim, fobj)
% 设置容忍度(用于 Metropolis 准则)
TolFun = 1e-10;
% 生成初始解,在搜索空间内随机取值
x0 = (u - l) .* rand(1, dim) + l;
% 计算初始解的适应度值
f = fobj;
x = x0;
fx = feval(f, x); % 计算当前解的适应度
f0 = fx; % 记录当前最优值
count = 1; % 记录收敛曲线索引
% 退火过程
for m = 1:Mmax
T = m / Mmax; % 计算当前温度(温度随迭代次数降低)
mu = 10^(T * 1000); % 退火步长参数
% 每个温度下执行 100 次局部搜索
for k = 0:100
% 生成扰动(新解相对当前解的偏移量)
dx = mu_inv(2 * rand(1, dim) - 1, mu) .* (u - l);
x1 = x + dx; % 生成新解
% 处理边界(防止超出搜索范围)
x1 = max(min(x1, u), l);
% 计算新解的适应度值
fx1 = feval(f, x1);
df = fx1 - fx; % 计算适应度变化量
% 按 Metropolis 准则决定是否接受新解
if (df < 0 || rand < exp(-T * df / (abs(fx) + eps) / TolFun))
x = x1; % 接受新解
fx = fx1;
end
% 更新全局最优解
if fx1 < f0
x0 = x1;
f0 = fx1;
end
end
% 记录当前最优值到收敛曲线
curve(count) = f0;
count = count + 1;
end
% 输出最终最优解
Best_pos = x0;
Best_score = f0;
end
%% 计算模拟退火产生的新位置偏移量
function x = mu_inv(y, mu)
% 计算扰动值
x = (((1 + mu) .^ abs(y) - 1) / mu) .* sign(y);
end
代码解读
-
初始化
- 设定搜索空间
l
和u
,确保解在合理范围内。 - 生成初始解
x0
,并计算其适应度fx
。 - 设定最大迭代次数
Mmax
和温度退火步长mu
。
- 设定搜索空间
-
模拟退火循环
- 温度控制 :温度随迭代次数下降,
T = m / Mmax
。 - 局部搜索 :在当前解
x
附近随机采样 100 个新解x1
。 - Metropolis 准则 :
- 若新解
x1
更优,则直接接受。 - 若
x1
更差,则以概率P = exp(-T * Δf / |f0|)
决定是否接受,避免局部最优。
- 若新解
- 全局最优更新 :如果
x1
比当前f0
更优,则更新全局最优。
- 温度控制 :温度随迭代次数下降,
-
终止条件
- 退火次数达到
Mmax
。 - 记录收敛曲线
curve
,用于绘制优化过程。
- 退火次数达到
总结
- SA 是基于概率的全局优化算法,能有效避免局部最优。
- 利用 Metropolis 准则,可接受劣解,增强全局搜索能力。
- 温度控制机制保证算法在早期探索,后期收敛。
- 适用于函数优化、旅行商问题(TSP)、神经网络权重优化等。
优点:
- 搜索范围大,易于跳出局部最优
- 适用于复杂问题
- 实现简单,参数易调整
缺点:
- 收敛速度较慢
- 过早降温可能影响搜索效果