基于思维进化算法优化BP神经网络(Matlab代码实现)

时间:2022-11-06 20:57:42

文献来源,代码复现之:

基于思维进化算法优化BP神经网络(Matlab代码实现)

????1 概述

1.1 思维进化算法概述

      进化算法(EC)是学者们利用优胜劣汰的进化规律将计算机科学与生物演变进化相结合,渐渐发展形成的一种在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标的随机启发式搜索算法。与普通算法不同的是,它有着群体搜索的能力。因此,进化算法现如今在人工智能、影像处理、组合问题的可行解集中求出最优解问题、机器学习等方面都有了大范围运用。但在关注其优势的同时,也不能漠视它自身存在的一些缺陷与不足,例如,在工程应用中,进化算法表现出的早熟、收敛速度缓慢等缺陷都需不断加以改进,使其变得更加完善。

1.2 思维进化算法优化BP神经网络

       基于BP神经网络的自我学习能力不强,并且其搜索性能较差,这样很容易导致结果的准确度不高。因此,论文从BP神经网络的初始权重和临界值入手,依据思维进化算法有比较强搜索功能这一特性对它进行改进。首先,按照BP神经网络的拓扑结构,为网络各层的权重和临界值进行随机编码;然后,利用思维进化算法根据所选得分函数寻找出原解,通过一直迭代,寻找出理想的最优解;最终,把最优解代入BP神经网络的初始权重和临界值,让其模拟学习。

1.3 思维进化算法优化 BP神经网络的步骤

优化的设计步骤流程图如图所示。

基于思维进化算法优化BP神经网络(Matlab代码实现)

????2 运行结果

基于思维进化算法优化BP神经网络(Matlab代码实现)

基于思维进化算法优化BP神经网络(Matlab代码实现)

基于思维进化算法优化BP神经网络(Matlab代码实现)

部分代码:

for itr=1:iter
itr
%% 优胜子群体趋同操作并计算各子群体得分
best_score = zeros(1,bestsize);
best_mature = cell(bestsize,1);
for i = 1:bestsize
best_mature{i} = bestpop{i}(1,:);
best_flag = 0; % 优胜子群体成熟标志(1表示成熟,0表示未成熟)
while best_flag == 0
% 判断优胜子群体是否成熟
[best_flag,best_index] = ismature(bestpop{i});
% 若优胜子群体尚未成熟,则以新的中心产生子种群
if best_flag == 0
best_newcenter = bestpop{i}(best_index,:);
best_mature{i} = [best_mature{i};best_newcenter];
bestpop{i} = subpop_generate(best_newcenter,SG,S1,S2,S3,S4,Pn_train,Tn_train,Pn_test,Tn_test);
end
end
% 计算成熟优胜子群体的得分
best_score(i) = max(bestpop{i}(:,end));
end
% 绘图(优胜子群体趋同过程)
if itr==1
figure
temp_x = 1:length(best_mature{1}(:,end))+5;
temp_y = [best_mature{1}(:,end);repmat(best_mature{1}(end),5,1)];
plot(temp_x,temp_y,'b-o')
hold on
temp_x = 1:length(best_mature{2}(:,end))+5;
temp_y = [best_mature{2}(:,end);repmat(best_mature{2}(end),5,1)];
plot(temp_x,temp_y,'r-^')
hold on
temp_x = 1:length(best_mature{3}(:,end))+5;
temp_y = [best_mature{3}(:,end);repmat(best_mature{3}(end),5,1)];
plot(temp_x,temp_y,'k-s')
hold on
temp_x = 1:length(best_mature{4}(:,end))+5;
temp_y = [best_mature{4}(:,end);repmat(best_mature{4}(end),5,1)];
plot(temp_x,temp_y,'g-d')
hold on
temp_x = 1:length(best_mature{5}(:,end))+5;
temp_y = [best_mature{5}(:,end);repmat(best_mature{5}(end),5,1)];
plot(temp_x,temp_y,'m-*')
legend('子种群1','子种群2','子种群3','子种群4','子种群5')
xlim([1 10])
xlabel('趋同次数')

????3 参考文献

[1]王永亮.思维进化算法优化BP神经网络在非线性函数拟合中的应用[J].忻州师范学院学报,2021,37(5):35-41

[2]刘俊.思维进化算法在BP神经网络拟合非线性函数中的应用研究[J].绵阳师范学院学报,2015,0(2):79-83

​????​​4 Matlab代码实现