一、理论
二、模拟退火算法应用于函数优化
1.流程图
SAToFunction流程图
2.代码解析
clear all; %清除所有变量
close all; %清图
clc ; %清屏
D = 10;
Xs = 20;%%函数上限
Xx =-20;%%函数下限
%%%%%%%%%%%%%%%%%%%%冷却表参数%%%%%%%%%%%%%%%%%%%%%%%%%%
L= 200; %马尔可夫链长度
K = 0.998; %衰减参数
S = 0.01; %步长因子,就是每次解变化的大小
T = 100; % 初始温度
YZ = 1e-8; %容差
P = 0; %Metropolis过程接受点
%%%%%%%%%%%%%%%%%随机选点初值设定%%%%%%%%%%%%%%%%%%%5
PreX = rand(D,1)*(Xs-Xx)+Xx;%初始化矩阵D × 1的解
PreBestX = PreX;%用于保存上一个最优的解
PreX = rand(D,1)*(Xs-Xx)+Xx;
BestX = PreX;%用于保存当前最优解
%%%%%%%%%%%%%%%%%每迭代一次退火一次(降温),直到满足迭代条件为止%%%%%%%%%
deta = abs(func1(BestX)-func1(PreBestX));%能量差值,适应度差值
while (deta>YZ) && (T>0.001)
T = K*T;%%降温
%%%%%%%%%%%%在当前温度T下迭代次数%%%%%%%%%%%%
for i = 1:L
%%%%%%%%%%%%在此点附近随机选择下一点%%%%%%%%%%%%%%%
%%%%%%%%%%%%根据当前条件产生一个新解%%%%%%%%%%%%%%%%%
NextX = PreX + S*(rand(D,1) * (Xs-Xx)+Xx);
%%%%%%%%%%%%%%%边界条件处理%%%%%%%%%%%%%