資源簡介
神經網絡BP預測算法,經過優化后的模型代碼見附件,matlab格式代碼。
代碼片段和文件信息
%2、遺傳算法優化的BP神經網絡建模
%(1)主程序
%清空環境變量
%?clc
%?clear
%讀取數據
%?load?(‘workspace.mat‘);?
%?id?=?find(grid_power?<=?50)?;%刪除功率小于50的數據
%?wind_speed_1(id:)=[];
%?grid_power(id:)=[]?;
%%%%%%%%%%%%%輸入參數%%%%%%%%%%%%%%
N=7;????????????%數據總個數
M=4;????????????%訓練數據
%%%%%%%%%%%%%訓練數據%%%%%%%%%%%%%%
input=a;
output=b;
%?save?data?input?output
%?load?data.mat
?
%節點個數
inputnum=2;
hiddennum=5;
outputnum=1;
?
%訓練數據和預測數據
input_train=input(1:M:)‘;
output_train=output((1:M):)‘;
input_test=input(((M+1):N):)‘;
output_test=output(((M+1):N):)‘;
?
%選連樣本輸入輸出數據歸一化
[inputninputps]=mapminmax(input_train);
[outputnoutputps]=mapminmax(output_train);
?
%構建網絡
net=newff(inputnoutputnhiddennum);
?
%%?遺傳算法參數初始化
maxgen=10;?????????????????????????%進化代數,即迭代次數
sizepop=30;????????????????????????%種群規模
pcross=[0.3];???????????????????????%交叉概率選擇,0和1之間
pmutation=[0.1];????????????????????%變異概率選擇,0和1之間
?
%節點總數
numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
?
lenchrom=ones(1numsum);???????
bound=[-3*ones(numsum1)?3*ones(numsum1)];????%數據范圍
?
%------------------------------------------------------種群初始化------------------------------%------------------
?
individuals=struct(‘fitness‘zeros(1sizepop)?‘chrom‘[]);??%將種群信息定義為一個結構體
%avgfitness=[];??????????????????????%每一代種群的平均適應度
bestfitness=[];?????????????????????%每一代種群的最佳適應度
bestchrom=[];???????????????????????%適應度最好的染色體
%初始化種群
for?i=1:sizepop
????%隨機產生一個種群
????individuals.chrom(i:)=Code(lenchrombound);????%編碼
????x=individuals.chrom(i:);
????%計算適應度
????individuals.fitness(i)=fun(xinputnumhiddennumoutputnumnetinputnoutputn);???%染色體的適應度
end
?
%找最好的染色體
[bestfitness?bestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex:);??%最好的染色體
%avgfitness=sum(individuals.fitness)/sizepop;?%染色體的平均適應度
%?記錄每一代進化中最好的適應度和平均適應度
%trace=[avgfitness?bestfitness];
?
%%?迭代求解最佳初始閥值和權值
%?進化開始
for?i=1:maxgen
???
????%?選擇
????individuals=Select(individualssizepop);
???%?avgfitness=sum(individuals.fitness)/sizepop;
????%交叉
????individuals.chrom=Cross(pcrosslenchromindividuals.chromsizepopbound);
????%?變異
????individuals.chrom=Mutation(pmutationlenchromindividuals.chromsizepopimaxgenbound);
???
????%?計算適應度
????for?j=1:sizepop
????????x=individuals.chrom(j:);?%解碼
????????individuals.fitness(j)=fun(xinputnumhiddennumoutputnumnetinputnoutputn);??
????end
???
??%找到最小和最大適應度的染色體及它們在種群中的位置
????[newbestfitnessnewbestindex]=min(individuals.fitness);
????[worestfitnessworestindex]=max(individuals.fitness);
????%?代替上一次進化中最好的染色體
????if?bestfitness>newbestfitness
????????bestfitness=newbestfitness;
????????bestchrom=individuals.chrom(newbestindex:);
????end
????individuals.chrom(worestindex:)=bestchrom;
????individuals.fitness(worestindex)=bestfitness;
???
????%avgfitness=sum(individuals.fitness)/sizepop;
???
???%?trace=[trace;avgfitness?bestfitness];?%記錄每一代進化中最好的適應度和平均適應度
?
end
%%?遺傳算法結果分析
?%figure(3)
評論
共有 條評論