生活随笔
收集整理的這篇文章主要介紹了
利用神经网络 遗传算法求得函数极小极大值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
<span style="font-size:18px;">clc
cleartic
%% 訓練數(shù)據(jù)預測數(shù)據(jù)提取及歸一化
%下載輸入輸出數(shù)據(jù)
load data1 input output%從1到2000間隨機排序
k=rand(1,4000);
[m,n]=sort(k);%找出訓練數(shù)據(jù)和預測數(shù)據(jù)
input_train=input(n(1:3900),:)';
output_train=output(n(1:3900),:)';
input_test=input(n(3901:4000),:)';
output_test=output(n(3901:4000),:)';%選連樣本輸入輸出數(shù)據(jù)歸一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);%% BP網(wǎng)絡訓練
% %初始化網(wǎng)絡結(jié)構(gòu)
net=newff(inputn,outputn,5);net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.goal=0.0000004;%網(wǎng)絡訓練
net=train(net,inputn,outputn);%% BP網(wǎng)絡預測
%預測數(shù)據(jù)歸一化
inputn_test=mapminmax('apply',input_test,inputps);%網(wǎng)絡預測輸出
an=sim(net,inputn_test);%網(wǎng)絡輸出反歸一化
BPoutput=mapminmax('reverse',an,outputps);%% 結(jié)果分析figure(1)
plot(BPoutput,':og')
hold on
plot(output_test,'-*');
legend('預測輸出','期望輸出','fontsize',12)
title('BP網(wǎng)絡預測輸出','fontsize',12)
xlabel('樣本','fontsize',12)
ylabel('輸出','fontsize',12)%預測誤差
error=BPoutput-output_test;figure(2)
plot(error,'-*')
title('神經(jīng)網(wǎng)絡預測誤差')figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神經(jīng)網(wǎng)絡預測誤差百分比')errorsum=sum(abs(error))tocsave data net inputps outputps</span>
遺傳算法部分:
<span style="font-size:18px;">%% 該代碼為基于神經(jīng)網(wǎng)絡遺傳算法的系統(tǒng)極值尋優(yōu)
%% 清空環(huán)境變量
clc
clear%% 初始化遺傳算法參數(shù)
%初始化參數(shù)
maxgen=100; %進化代數(shù),即迭代次數(shù)
sizepop=20; %種群規(guī)模
pcross=[0.4]; %交叉概率選擇,0和1之間
pmutation=[0.2]; %變異概率選擇,0和1之間lenchrom=[1 1]; %每個變量的字串長度,如果是浮點變量,則長度都為1
bound=[-5 5;-5 5]; %數(shù)據(jù)范圍individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); %將種群信息定義為一個結(jié)構(gòu)體
avgfitness=[]; %每一代種群的平均適應度
bestfitness=[]; %每一代種群的最佳適應度
bestchrom=[]; %適應度最好的染色體%% 初始化種群計算適應度值
% 初始化種群
for i=1:sizepop%隨機產(chǎn)生一個種群individuals.chrom(i,:)=Code(lenchrom,bound); x=individuals.chrom(i,:);%計算適應度individuals.fitness(i)=fun(x); %染色體的適應度
end
%找最好的染色體
[bestfitness bestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:); %最好的染色體
avgfitness=sum(individuals.fitness)/sizepop; %染色體的平均適應度
% 記錄每一代進化中最好的適應度和平均適應度
trace=[avgfitness bestfitness]; %% 迭代尋優(yōu)
% 進化開始
for i=1:maxgeni% 選擇individuals=Select(individuals,sizepop); avgfitness=sum(individuals.fitness)/sizepop;%交叉individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);% 變異individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[i maxgen],bound);% 計算適應度 for j=1:sizepopx=individuals.chrom(j,:); %解碼individuals.fitness(j)=fun(x); end%找到最小和最大適應度的染色體及它們在種群中的位置[newbestfitness,newbestindex]=min(individuals.fitness);[worestfitness,worestindex]=max(individuals.fitness);% 代替上一次進化中最好的染色體if bestfitness>newbestfitnessbestfitness=newbestfitness;bestchrom=individuals.chrom(newbestindex,:);endindividuals.chrom(worestindex,:)=bestchrom;individuals.fitness(worestindex)=bestfitness;avgfitness=sum(individuals.fitness)/sizepop;trace=[trace;avgfitness bestfitness]; %記錄每一代進化中最好的適應度和平均適應度
end
%進化結(jié)束%% 結(jié)果分析
[r c]=size(trace);
plot([1:r]',trace(:,2),'r-');
title('適應度曲線','fontsize',12);
xlabel('進化代數(shù)','fontsize',12);ylabel('適應度','fontsize',12);
axis([0,100,0,1])
disp('適應度 變量');
x=bestchrom;
% 窗口顯示
disp([bestfitness x]);
</span>
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的利用神经网络 遗传算法求得函数极小极大值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。