MATLAB神经网络43个案例——非线性函数极值寻优

        本章案例是在第三章案例(遗传算法优化BP神经网络)的基础上进行的,相对较为简单。需要注意的是:问题导向是找到最小值对应的坐标点。与第三章中优化神经网络的权值阈值不同。

目标函数:y=x1.^2+x2.^2

寻优:y最小的情况下,找出(x1,x2)的坐标

从下图可以直观体现本案例寻优点:

一、主函数代码

clear;close;clc
%% bp神经网络初始化
%载入原始数据
load data1 input output

%训练集与测试集
k=randperm(length(input));
input_train=input(k(1:3900),:)';
output_train=output(k(1:3900),:)';
input_test=input(k(3901:end),:)';
output_test=output(k(3901:end),:)';

%归一化
[Input_train,inputps]=mapminmax(input_train);
[Output_train,outputps]=mapminmax(output_train);

%% 构建bp神经网络
%设置网络参数
net=newff(Input_train,Output_train,5);
net.trainParam.lr=0.1;
net.trainParam.goal=0.0000004;
net.trainParam.epochs=100;

%训练网络
net=train(net,Input_train,Output_train);

%% 遗传算法
%参数初始化
maxgen=100;         %迭代次数
sizepop=20;         %种群数目
pcross=0.4;         %交叉概率
pmutation=0.2;      %突变概率

lenchrom=[1,1];     %染色体长度 2
bound=[-5 5;-5 5];  %染色体编码范围 -5~5

%种群信息初始化
individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);
bestfitness=[];     %最优适应度(最小)
bestchrom=[];       %最优染色体(对应最小值的坐标)

%初代适应度与染色体编码
for i=1:sizepop
    individuals.chrom(i,:)=Code(lenchrom,bound);%对20个种群依次进行染色体编码
    x=individuals.chrom(i,:);%编码后的染色体
    individuals.fitness(i)=fun(x);%求染色体的适应度(即bp神经网络的y预测值)
end
[bestfitness,bestindex]=min(individuals.fitness);%适应度最小即为最优适应度
bestchrom=individuals.chrom(bestindex,:);%对应的最优染色体

%% 迭代进化(都是对染色体进行操作)
for i=1:maxgen
    %选择(适应度越好选中概率越大)
    individuals=Select(individuals,sizepop);
    %交叉
    individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
    %突变
    individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[i maxgen],bound);
    
    %计算进化后染色体的适应度
    for j=1:sizepop
        x=individuals.chrom(j,:);
        individuals.fitness(j)=fun(x);
    end
    %找出这一代中 最优适应度及下标
    [newbestfitness,newbestindex]=min(individuals.fitness);
    [worsefitness,worseindex]=max(individuals.fitness);
    
    %这一代最优适应度与初代最优适应度比较
    %进行最优适应度与染色体更新
    if newbestfitness<bestfitness
        bestfitness=newbestfitness;
        bestchrom=individuals.chrom(newbestindex,:);
    end
    
    %将最差适应度的染色体淘汰(用最优的替代)
    individuals.fitness(worseindex)=bestfitness;
    individuals.chrom(worseindex,:)=bestchrom;
    
end
%迭代的结果(最小值的坐标)
x=bestchrom
round(x)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值