目录
1 概述
模拟退火算法“lSA从设定一个较高温度开始,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解的过程。
由于BP神经网络易于陷入局部极小值,收敛速度慢等问题,采用梯度下降寻优迭代次数多,效率低下,而GA和SA都是基于概率分布机制的优化算法,两者结合,使用SA可以避免GA早熟问题,从而增强全局和局部搜索能力,本文在此基础上提出模拟退火遗传算法优化的BP神经网络算法,并建立模型用于预测。
2 基于遗传模拟退火的BP神经网络
利用模拟退火算法
[3]
优化遗传算法并利用遗传算法的全局寻优搜索功能,获得每一次的最优种群(权重和阈值),接着利用BP的局部寻优特征反向寻得最优值
。
3 知识回顾
function [h,trace]=saforbp(inputnum,hiddennum,outputnum,inputn_train,label_train,net)
%% 参数设定
%%%冷却表参数%%%%%%%%%%
L=10; %马尔科夫链长度
K=0.9; %衰减因子
S=0.01; %步长因子
T=100; %初始温度
P=0; %Metroppolis过程中总接受点
max_iter=100;%最大退火次数
%% 随机产生10个初始值,并从10个初值中产生1个处置最优解
Xs=1;
Xx=0;
pop=20;
D=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
Prex=(rand(D,pop)*(Xs-Xx)+Xx);
for i=1:pop
funt(i)=fun(Prex(:,i)',inputnum,hiddennum,outputnum,inputn_train,label_train,net);
end
[sort_val,index_val] = sort(funt,'descend');
Prebestx=Prex(:,index_val(end));
Prex=Prex(:,index_val(end-1));
Bestx=Prex;
bestfit=zeros(1,max_iter);
%每迭代一次退火一次(降温),直到满足迭代条件为止
for iter=1:max_iter
iter
T=K*T;%在当前温度T下迭代次数
for i=1:L
%在附近随机选下一点
Nextx=Prex+S*(rand(D,1)*(Xs-Xx)+Xx);
%边界条件处理
for ii=1:D
if Nextx(ii)>Xs | Nextx(ii)<Xx
Nextx(ii)=rand*(Xs-Xx)+Xx;
end
end
%%是否全局最优解
a=fun(Bestx',inputnum,hiddennum,outputnum,inputn_train,label_train,net);
b=fun(Nextx',inputnum,hiddennum,outputnum,inputn_train,label_train,net);
if a<b
prebest=a;
Prebestx=Bestx;%保留上一个最优解
Bestx=Nextx;%更新最优解
a=b;
end%如果新解更好,用新解替代最优解,原最优解变为前最优解
%%%%%%%%%%%%Metropolis过程
c=fun(Prex',inputnum,hiddennum,outputnum,inputn_train,label_train,net);
if c<b
%%%接受新解
Prex=Nextx;
P=P+1;
else
changer=-1*(b-c)/T;
p1=exp(changer);
%%%以一定概率接受较差的解
if p1>rand
Prex=Nextx;
P=P+1;
end
end
trace(P+1)=a;
end
end
h=Bestx';
end
%
4 运行结果
5 参考文献
[1]蒋美云.基于模拟退火算法优化的BP神经网络预测模型[J].软件工程,2018,21(07):36-38.DOI:10.19644/j.cnki.issn2096-1472.2018.07.010.