【BP預(yù)測(cè)】基生物地理算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)預(yù)附matlab代碼
1 簡(jiǎn)介
BP神經(jīng)網(wǎng)絡(luò)算法使用非常廣泛,傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)算法雖然具有不錯(cuò)的擬合非線性函數(shù)的能力,但是容易陷入局部的極小值,并且傳統(tǒng)的算法收斂的速度慢.本篇文章詳細(xì)地論述了如何使用生物地理算法優(yōu)化傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)算法中初始的權(quán)值和閥值,通過(guò)相應(yīng)的驗(yàn)證和比較提出了該模型的有效性.



2 部分代碼
%BBO算法,主要是對(duì)消除重復(fù)樣本的操作進(jìn)行了改進(jìn),整理時(shí)間:2011.06.10
clear all
close all
G = 200; ? ? ? ? ? ? ? ? ? ? ? ? % 進(jìn)化代數(shù)
Size = 50; ? ? ? ? ? ? ? ? ? ? ? % 種群規(guī)模
pmodify = 1; ? ? ? ? ? ? ? ? ? ? % 遷移概率
NumVar = 35; ? ? ? ? ? ? ? ? ? ? % 參數(shù)個(gè)數(shù)
Keep = 3; ? ? ? ? ? ? ? ? ? ? ? ?% 精因個(gè)數(shù)
pmutate = 0.05; ? ? ? ? ? ? ? ? ?% 變異概率
lambdaLower = 0.0; ? ? ? ? ? ? ? % 對(duì)于每個(gè)基因的最小遷入率
lambdaUpper = 1; ? ? ? ? ? ? ? ? % 對(duì)于每個(gè)基因的最大遷入率
dt = 1; ? ? ? ? ? ? ? ? ? ? ? ? ?% 步長(zhǎng)
I = 1; ? ? ? ? ? ? ? ? ? ? ? ? ? % 對(duì)于每個(gè)棲息地的最大遷入率
e = 1; ? ? ? ? ? ? ? ? ? ? ? ? ? % 對(duì)于每個(gè)棲息地的最大遷出率
%確定每個(gè)參數(shù)的取值范圍
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
%求適應(yīng)度值
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
%進(jìn)化開(kāi)始
for kg = 1:1:G
? ?time(kg) = kg ; ?
? ?%保存最優(yōu)個(gè)體
? ?for j = 1 : Keep
? ? ? ?chromKeep(j,:) = Population(j).chrom;
? ? ? ?costKeep(j) = Population(j).cost;
? ?end
? ?for i = 1 : length(Population)
? ? ? ?%求種群數(shù)量
? ? ? ?if Population(i).cost < inf
? ? ? ? ? ?Population(i).SpeciesCount = Size - i;
? ? ? ?else
? ? ? ? ? ?Population(i).SpeciesCount = 0;
? ? ? ?end
? ? ? ?%計(jì)算每個(gè)棲息地的移入移出率
? ? ? ?%余弦模型
? ? ? ?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;
? ? ? ?%指數(shù)模型
? ?% ? ? 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
? ? ? ?%標(biāo)準(zhǔn)化移入率
? ? ? ?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;
? ? ? ?%指數(shù)模型
% ? ? ? ? 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
? ?% 計(jì)算每個(gè)棲息地的種群數(shù)量概率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
? ?%對(duì)超出取值范圍的樣本進(jìn)行重新賦值
? ?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
? ?%對(duì)相同的樣本進(jìn)行重新賦值
? ?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 ?%進(jìn)化次數(shù)
? ?BestJ(kg)
end
b=Population(1).chrom;
figure(1);
plot(time,BestJ);
title('最小誤差進(jìn)化過(guò)程')
xlabel('進(jìn)化次數(shù)');
ylabel('最小誤差');
save BBO b;
3 仿真結(jié)果


4 參考文獻(xiàn)
[1]肖雄. PSO優(yōu)化BP神經(jīng)網(wǎng)絡(luò)巖爆預(yù)測(cè)的Matlab實(shí)現(xiàn)[J]. 中國(guó)房地產(chǎn)業(yè), 2018(17):1.
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無(wú)人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問(wèn)題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
