【BP预测】基生物地理算法优化BP神经网络实现数据预附matlab代码
【BP预测】基生物地理算法优化BP神经网络实现数据预附matlab代码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
1 简介
BP神经网络算法使用非常广泛,传统的BP神经网络算法虽然具有不错的拟合非线性函数的能力,但是容易陷入局部的极小值,并且传统的算法收敛的速度慢.本篇文章详细地论述了如何使用生物地理算法优化传统的BP神经网络算法中初始的权值和阀值,通过相应的验证和比较提出了该模型的有效性.
2 部分代码
%BBO算法,主要是对消除重复样本的操作进行了改进,整理时间:2011.06.10
clear
all
close
all
G
=
200; % 进化代数
Size
=
50; % 种群规模
pmodify
=
1; % 迁移概率
NumVar
=
35; % 参数个数
Keep
=
3; % 精因个数
pmutate
=
0.05; % 变异概率
lambdaLower
=
0.0; % 对于每个基因的最小迁入率
lambdaUpper
=
1; % 对于每个基因的最大迁入率
dt
=
1; % 步长
I
=
1; % 对于每个栖息地的最大迁入率
e
=
1; % 对于每个栖息地的最大迁出率
%确定每个参数的取值范围
for
i=1:1:NumVar
MinX(i)
=
-32;
MaxX(i)
=
32;
end
%初始化种群
for
i=1:1:NumVar
E
=
MinX(i)+(MaxX(i)-MinX(i))*rand(Size,i);
end
%求适应度值
for
i=1:1:Size
Population(i).chrom
=
E(i,:);
p
=
Population(i).chrom;
Population(i).cost
=
Ackley(p);
end
%排序
Population
=
PopSort(Population);
%初始化种群概率
for
j = 1 : Size
Prob(j)
=
1 / Size;
end
%进化开始
for
kg = 1:1:G
time(kg)
=
kg ;
%保存最优个体
for
j = 1 : Keep
chromKeep(j,
:
) = Population(j).chrom;
costKeep(j)
=
Population(j).cost;
end
for
i = 1 : length(Population)
%求种群数量
if
Population(i).cost < inf
Population(i).SpeciesCount
=
Size - i;
else
Population(i).SpeciesCount
=
0;
end
%计算每个栖息地的移入移出率
%余弦模型
lambda(i)
=
0.5 * I * (cos(pi*Population(i).SpeciesCount / Size)+1);
mu(i)
=
0.5 * e * (-cos(pi*Population(i).SpeciesCount / Size)+1);
%二次模型
%
lambda(i) = I * (Population(i).SpeciesCount / Size -1)^2;
%
mu(i) = e * (Population(i).SpeciesCount / Size )^2;
%指数模型
%
lambda(i) = I * exp(-Population(i).SpeciesCount / Size);
%
mu(i) = e * exp(Population(i).SpeciesCount / Size - 1) ;
%线性模型
%
lambda(i) = I * (1 - Population(i).SpeciesCount / Size);
%
mu(i) = e * Population(i).SpeciesCount / Size;
end
lambdaMin
=
min(lambda);
lambdaMax
=
max(lambda);
for
k = 1:1 : Size
if
rand > pmodify
continue;
end
%标准化移入率
lambdaScale
=
lambdaLower + (lambdaUpper - lambdaLower) * (lambda(k) - lambdaMin) / (lambdaMax - lambdaMin);
%迁移操作,概率的输入新的信息到栖息地i
for
j = 1 : NumVar
if
rand < lambdaScale
RandomNum
=
rand * sum(mu);
Select
=
mu(1);
SelectIndex
=
1;
while
(RandomNum > Select) & (SelectIndex < Size)
SelectIndex
=
SelectIndex + 1;
Select
=
Select + mu(SelectIndex);
end
Island(k,j)
=
Population(SelectIndex).chrom(j);
else
Island(k,j)
=
Population(k).chrom(j);
end
end
end
for
j = 1 : 1 :Size
%余弦模型
lambdaMinus
=
0.5 * I * (cos(pi*(Population(j).SpeciesCount-1) / Size)+1);
muPlus
=
0.5 * e * (-cos(pi*(Population(j).SpeciesCount+1) / Size)+1);
%二次模型
%
lambdaMinus = I * ((Population(j).SpeciesCount-1) / Size -1)^2;
%
muPlus = e * ((Population(j).SpeciesCount+1) / Size )^2;
%指数模型
%
lambdaMinus = I * exp(-(Population(j).SpeciesCount-1) / Size);
%
muPlus = e * exp((Population(j).SpeciesCount+1) / Size - 1) ;
%线性模型
%
lambdaMinus = I * (1 - (Population(j).SpeciesCount-1) / Size);
%
muPlus = e * (Population(j).SpeciesCount+1) / Size;
if
j < Size
ProbMinus
=
Prob(j+1);
else
ProbMinus
=
0;
end
if
j > 1
ProbPlus
=
Prob(j-1);
else
ProbPlus
=
0;
end
ProbDot(j)
=
-(lambda(j) + mu(j)) * Prob(j) + lambdaMinus * ProbMinus + muPlus * ProbPlus;
end
%
计算每个栖息地的种群数量概率P(si)
Prob
=
Prob + ProbDot * dt;
Prob
=
max(Prob, 0);
Prob
=
Prob / sum(Prob);
%变异操作
Pmax
=
max(Prob);
MutationRate
=
pmutate * (1 - Prob / Pmax);
for
k = (Size/2): 1: Size
for
parnum = 1 : NumVar
if
MutationRate(k) > rand
Island(k,parnum)
=
MinX(parnum)+(MaxX(parnum)-MinX(parnum))*rand;
end
end
end
for
i=1:1:Size
Q(i)
=
Ackley(Island(i,:));
if
Q(i)<Population(i).cost
Population(i).cost
=
Q(i);
Population(i).chrom
=
Island(i,:);
end
end
%排序
Population
=
PopSort(Population);
for
k = 1 : Keep
Population(Size-k+1).chrom
=
chromKeep(k,:);
Population(Size-k+1).cost
=
costKeep(k);
end
%对超出取值范围的样本进行重新赋值
for
i = 1 : Size
for
k = 1 : NumVar
Population(i).chrom(k)
=
max(Population(i).chrom(k), MinX(k));
Population(i).chrom(k)
=
min(Population(i).chrom(k), MaxX(k));
end
end
%对相同的样本进行重新赋值
for
i = 1 : length(Population)
Chrom1
=
sort(Population(i).chrom);
for
j = i+1 : length(Population)
Chrom2
=
sort(Population(j).chrom);
if
isequal(Chrom1, Chrom2)
parnum
=
ceil(length(Population(j).chrom) * rand);
Population(j).chrom(parnum)
=
min(Chrom1)+(max(Chrom2)-min(Chrom1))*rand;
end
end
end
BestJ(kg)
=
Population(1).cost;
kg
%进化次数
BestJ(kg)
end
b
=
Population(1).chrom;
figure(1);
plot(time,BestJ);
title(’最小误差进化过程’)
xlabel(’进化次数’);
ylabel(’最小误差’);
save
BBO b;
3 仿真结果
4 参考文献
[1]肖雄. PSO优化BP神经网络岩爆预测的Matlab实现[J]. 中国房地产业, 2018(17):1.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
