(一)DE的基本原理

主要操作:变异 - 交叉 - 选择

(二)DE优化BPNN

%载入数据
data = csvread('D:\matlab2016a\OA\sample.csv');

%划分数据集
rv = rand(1,size(data,1));
[value,index] = sort(rv);
x_train = data(index(1:150),1:2);y_train = data(index(1:150),end);
x_test = data(index(151:end),1:2);y_test = data(index(151:end),end);

%归一化处理
[train_input,inputps] = mapminmax(x_train');
test_input = mapminmax('apply',x_test',inputps);
[train_output,outputps] = mapminmax(y_train');

%设置节点
inputnum = size(train_input,1);
hiddennum = 5;
outputnum = size(train_output,1);

%设置DE参数
sizepop = 20;
dim = inputnum*hiddennum+hiddennum++hiddennum*outputnum+outputnum;
lb = [-1];ub = [1];
mutation = 0.5;
crossover = 0.2;
maxgen = 50;

if size(lb,1) == 1
    lb = ones(dim,1).*lb;
    ub = ones(dim,1).*ub;
end

%个体初始化
net = newff(train_input,train_output,hiddennum);
Targetfitness = inf;
for i = 1:sizepop
    position(i,:) = lb'+(ub'-lb').*rand(1,dim);
    predict = DEoptimization(inputnum,hiddennum,outputnum,net,train_input,train_output,position(i,:));
    predict = mapminmax('reverse',predict,outputps);
    fit(i) = sqrt(sum((predict'-y_train).^2)/length(y_train));
    if fit(i) < Targetfitness
        Targetfitness = fit(i);
        Targetposition = position(i,:);
    end
end

%迭代寻优
converage = zeros(1,maxgen);
for L = 1:maxgen
    for j = 1:sizepop
        %变异操作
        ri = randperm(sizepop,3);
        while isempty(find(ri==j))==0
            ri = randperm(sizepop,3);
        end
        mpop = position(ri(1),:)+mutation*(position(ri(2),:)-position(ri(3),:));
        if isempty(find(mpop>ub'))== 0
            mpop(find(mpop>ub')) = (ub(find(mpop>ub')))';
        end
        if isempty(find(mpop<lb'))== 0
            mpop(find(mpop<lb')) = (lb(find(mpop<lb')))';
        end
        
        %交叉操作
        tmp = zeros(1,dim);
        for i = 1:dim
            if rand < crossover
                tmp(i) = mpop(i);
            else
                tmp(i) = position(j,i);
            end
        end
        
        %选择操作
        cpredict = DEoptimization(inputnum,hiddennum,outputnum,net,train_input,train_output,tmp);
        cpredict = mapminmax('reverse',cpredict,outputps);
        cfit = sqrt(sum((cpredict'-y_train).^2)/length(y_train));
        

        %更新
        if cfit < fit(j)
            position(j,:) = tmp;
            fit(j) = cfit;
        end
        if fit(j) < Targetfitness
            Targetposition = position(j,:);
            Targetfitness = fit(j);
        end    
    end
    converage(L) = Targetfitness;
end

w1 = Targetposition(1:inputnum*hiddennum);
b1 = Targetposition(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2 = Targetposition(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
b2 = Targetposition(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);

net.iw{1,1} = reshape(w1,hiddennum,inputnum);
net.lw{2,1} = reshape(w2,outputnum,hiddennum);
net.b{1} = reshape(b1,hiddennum,1);
net.b{2} = b2;

net.trainParam.epochs = 100;
net.trainParam.lr = 0.01;
net.trainParam.goal = 0.001;

net = train(net,train_input,train_output);
predict = sim(net,train_input);
predict_train = mapminmax('reverse',predict,outputps);
train_rmse = sqrt(sum((predict_train'-y_train).^2)/length(y_train));
predict = sim(net,test_input);
predict_test = mapminmax('reverse',predict,outputps);
test_rmse = sqrt(sum((predict_test'-y_test).^2)/length(y_test));
disp(['Train RMSE = ',num2str(train_rmse),' Test RMSE = ',num2str(test_rmse)])

Train RMSE = 0.61411 Test RMSE = 0.61139

差分进化算法DE优化BPNN相关推荐

  1. matlab实现差分进化算法DE

    ​ 类似于其它进化算法范例,DE是一种基于群体的随机搜索算法,它采用变异.交 替换等算子指导群体进化.但是,DE执行简单,在收敛速度和搜索性能方面均占 有一定的优势. 在进化过程中,DE保持一个规模为 ...

  2. 基于差分进化算法(DE)改进的jDE2 处理约束优化问题

    约束优化问题是生活中常见的问题,传统的方法解决起来比较麻烦,这里提供了一种基于差分进化算法的改进算法jDE2,整体的处理效果不错! 这里迭代1000次平均值达到-0.99809,而第三测试函数的最好值 ...

  3. 带领域变异的多模态优化差分进化算法(DE/NCDE/NSDE/)

    文献<Differential Evolution with Neighborhood Mutation for Multimodal Optimization>核心技术点总结,网上几乎没 ...

  4. 【BP预测】基于差分进化算法优化BP神经网络实现汇率数据预测matlab代码​

    1 简介 镍镉电池组作为移动电源对于现代军民用品是必不可少的.为了能够有效的提高镍镉电池寿命的预测精准度,在建立BP神经网络的电池寿命预测模型的基础上,运用差分进化算法(DE)优化BP神经网络连接的初 ...

  5. 差分进化算法_基于差分进化的水泥烧成系统动态优化算法

    基于差分进化的水泥烧成系统动态优化算法 郝晓辰, 冀亚坤, 郑立召, 史鑫, 赵彦涛 燕山大学电气工程学院,河北 秦皇岛 066004 [摘  要]针对水泥烧成过程的资源浪费以及难以建立有效数学机理模 ...

  6. 标准差分进化算法matlab程序实现(转载)

    标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...

  7. 差分进化算法原理及matlab代码实现

    差分进化算法介绍: 在自然界中,遗传,变异,选择的作用,使得生物体优胜略汰,不断由低级向高级进化,人们发现适者生存这一规律可以模式化,从而构成一些列优化算法.差分进化算法就是从这种模式中产生的一种智能 ...

  8. Python实现DE差分进化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 差分进化算法(Differential Evolution,DE ...

  9. 遗传算法 差分进化算法 粒子群优化算法区别

    一 遗传算法 遗传算法(GA)作为一种经典的进化算法,自 Holland提出之后在国际上已经形成了一个比较活跃的研究领域. 人们对 GA 进行了大量的研究,提出了各种改进算法用于提高算法的收敛速度和精 ...

  10. 差分进化算法_特邀嘉宾 | 科普差分进化算法(创新奇智运筹优化算法工程师朱小龙博士)...

    文案:段克邪 排版:随心390 hello,大家好.各位可点击此处,访问公众号官方店铺.谨防上当受骗,感谢各位支持! 今天我们有幸请到创新奇智运筹优化算法工程师朱小龙博士为大家科普差分进化算法,本次推 ...

最新文章

  1. python的socket编程_Python Socket编程详细介绍
  2. 提示“Web打印服务CLodop未安装启动”的各种原因和解决方法
  3. python中类方法与实例方法的区别-Python实例方法、静态方法和类方法详解(包含区别和用法)...
  4. dm7和mysql_【干货分享】达梦数据库DM7的新特性发布啦
  5. php微信公众号获取天气预报,【微信公众平台开发】封装获取天气预报功能
  6. Tiling Challenge
  7. 代理模式【介绍、静态代理、动态代理、入门、应用】
  8. freemarker常见语法大全
  9. 【渝粤教育】21秋期末考试市场调查与预测10243k2
  10. FreeEIM 2013 SDK 部分源码
  11. 用css3制作一个搜索框效果
  12. android系统(8)---android事件分发机制
  13. ajax通用代码,通用代码之一: 轻松使用Ajax
  14. UE4官方插件下载地址,完全免费
  15. 2022-2028全球与中国卫星地面网络科技市场现状及未来发展趋势
  16. 联阳IT6561方案设计|替代IT6561方案DP转HDMI转换|CS5218替代IT6561芯片设计
  17. 华硕主板开机提示按F1怎么办?华硕主板开机提示按F1的解决方法
  18. 使用seaborn绘制热图
  19. 部署开源软件snipe-it
  20. Web GIS多种方式发布动态地图服务及显示(2)

热门文章

  1. 项目管理表格模板/实用表格-项目启动
  2. 合并txt文件的几个方法
  3. 智能会议系统集成解决方案
  4. 好用!不用第三方工具就可以检测微信好友是否删除!
  5. python 反爬虫策略
  6. 阿里巴巴分布式服务框架HSF
  7. idea设置控制台字体大小
  8. 【Unity】Fly Bird(游戏实战)(1)
  9. 人生时间计算器_真实年龄计算器app下载-抖音珍稀时间年龄计算器下载v1.5 安卓版-西西软件下载...
  10. python直方图均衡_python 简单图像处理(8) 直方图均衡化