一、布谷鸟算法简介

布谷鸟算法,英文叫做Cuckoo search (CS algorithm)。首先还是同样,介绍一下这个算法的英文含义, Cuckoo是布谷鸟的意思,啥是布谷鸟呢,是一种叫做布谷的鸟,o(∩_∩)o ,这种鸟她妈很懒,自己生蛋自己不养,一般把它的宝宝扔到别的种类鸟的鸟巢去。但是呢,当孵化后,遇到聪明的鸟妈妈,一看就知道不是亲生的,直接就被鸟妈妈给杀了。于是这群布谷鸟宝宝为了保命,它们就模仿别的种类的鸟叫,让智商或者情商极低的鸟妈妈误认为是自己的亲宝宝,这样它就活下来了。
布谷鸟搜索算法(Cuckoo Search, CS)是2009年Xin-She Yang 与Suash Deb在《Cuckoo Search via Levy Flights》一文中提出的一种优化算法。布谷鸟算法是一种集合了布谷鸟巢寄生性和莱维飞行(Levy Flights)模式的群体智能搜索技术,通过随机游走的方式搜索得到一个最优的鸟巢来孵化自己的鸟蛋。这种方式可以达到一种高效的寻优模式。

1 布谷鸟的巢寄生性

2 莱维飞行

图1.模拟莱维飞行轨迹示意图

3 布谷鸟搜索算法的实现过程

二、部分源代码

function s=simplebounds(s,Lb,Ub)% Apply the lower boundns_tmp=s;I=ns_tmp<Lb;ns_tmp(I)=Lb(I);% Apply the upper bounds J=ns_tmp>Ub;ns_tmp(J)=Ub(J);% Update this new move s=ns_tmp;
end
function errorn = fun(x)
%该函数用来计算适应度值
load data X
[n,m]=size(X);
for i=1:ny(i,1)=sum(X(1:i,1));y(i,2)=sum(X(1:i,2));y(i,3)=sum(X(1:i,3));y(i,4)=sum(X(1:i,4));y(i,5)=sum(X(1:i,5));y(i,6)=sum(X(1:i,6));
end%% 网络参数初始化
a=0.2+x(1)/2;
b1=0.2+x(2)/2;
b2=0.2+x(3)/2;
b3=0.2+x(4)/2;
b4=0.2+x(5)/2;
b5=0.2+x(6)/2;%% 学习速率初始化
u1=0.0015;
u2=0.0015;
u3=0.0015;
u4=0.0015;
u5=0.0015;%% 权值阀值初始化
t=1;
w11=a;
w21=-y(1,1);
w22=2*b1/a;
w23=2*b2/a;
w24=2*b3/a;
w25=2*b4/a;
w26=2*b5/a;
w31=1+exp(-a*t);
w32=1+exp(-a*t);
w33=1+exp(-a*t);
w34=1+exp(-a*t);
w35=1+exp(-a*t);
w36=1+exp(-a*t);
theta=(1+exp(-a*t))*(b1*y(1,2)/a+b2*y(1,3)/a+b3*y(1,4)/a+b4*y(1,5)/a+b5*y(1,6)/a-y(1,1));kk=1;%% 循环迭代
for j=1:10
%循环迭代
E(j)=0;
for i=1:30%% 网络输出计算t=i;LB_b=1/(1+exp(-w11*t));   %LB层输出LC_c1=LB_b*w21;           %LC层输出LC_c2=y(i,2)*LB_b*w22;    %LC层输出LC_c3=y(i,3)*LB_b*w23;    %LC层输出LC_c4=y(i,4)*LB_b*w24;    %LC层输出LC_c5=y(i,5)*LB_b*w25;    %LC层输出LC_c6=y(i,6)*LB_b*w26;    %LC层输出 LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6;    %LD层输出theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1));   %阀值ym=LD_d-theta;   %网络输出值yc(i)=ym;  %拟合值%% 权值修正error=ym-y(i,1);      %计算误差E(j)=E(j)+abs(error);    %误差求和       error1=error*(1+exp(-w11*t));     %计算误差error2=error*(1+exp(-w11*t));     %计算误差error3=error*(1+exp(-w11*t));error4=error*(1+exp(-w11*t));error5=error*(1+exp(-w11*t));error6=error*(1+exp(-w11*t));error7=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*(w21*error1+w22*error2+w23*error3+w24*error4+w25*error5+w26*error6);%修改权值w22=w22-u1*error2*LB_b;w23=w23-u2*error3*LB_b;w24=w24-u3*error4*LB_b;w25=w25-u4*error5*LB_b;w26=w26-u5*error6*LB_b;w11=w11+a*t*error7;
end
end
%根据训出的灰色神经网络进行预测
for i=1:10t=i;LB_b=1/(1+exp(-w11*t));   %LB层输出LC_c1=LB_b*w21;           %LC层输出LC_c2=y(i,2)*LB_b*w22;    %LC层输出LC_c3=y(i,3)*LB_b*w23;    %LC层输出LC_c4=y(i,4)*LB_b*w24;    %LC层输出LC_c5=y(i,5)*LB_b*w25;LC_c6=y(i,6)*LB_b*w26;LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6;    %LD层输出theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1));   %阀值ym=LD_d-theta;   %网络输出值yc(i)=ym;
end
yc=yc*10000;
y(:,1)=y(:,1)*10000;%计算预测的每月需求量
for j=30:-1:2ys(j)=(yc(j)-yc(j-1));
end
errorn=sum(abs(ys(2:30)-X(2:30,1)'*10000));
end
function nest=get_cuckoos(nest,best,Lb,Ub)
% Levy flights
n=size(nest,1);
beta=3/2;
sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);for j=1:n,s=nest(j,:);% This is a simple way of implementing Levy flights% For standard random walks, use step=1;%% Levy flights by Mantegna's algorithmu=randn(size(s))*sigma;v=randn(size(s));step=u./abs(v).^(1/beta);% In the next equation, the difference factor (s-best) means that % when the solution is the best solution, it remains unchanged.     stepsize=0.01*step.*(s-best);% Here the factor 0.01 comes from the fact that L/100 should the typical% step size of walks/flights where L is the typical lenghtscale; % otherwise, Levy flights may become too aggresive/efficient, % which makes new solutions (even) jump out side of the design domain % (and thus wasting evaluations).% Now the actual random walks or flightss=s+stepsize.*randn(size(s));% Apply simple bounds/limitsnest(j,:)=simplebounds(s,Lb,Ub);fitness(j)=fun(nest(j,:));
end% Find the current best
[fmin,K]=min(fitness) ;
best=nest(K,:);

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.

【优化预测】基于matlab布谷鸟算法优化灰色模型预测【含Matlab源码 1244期】相关推荐

  1. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  2. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

    一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...

  3. 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】

    一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  4. 【Matlab语音处理】声音信号频谱分析仪【含GUI源码 325期】

    一.代码运行视频(哔哩哔哩) [Matlab语音处理]声音信号频谱分析仪[含GUI源码 325期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  5. 【Matlab条形码识别】二维条形码识别【含GUI源码 607期】

    一.代码运行视频(哔哩哔哩) [Matlab条形码识别]二维条形码识别[含GUI源码 607期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  6. 【Matlab优化预测】布谷鸟算法优化灰色模型预测【含源码 1244期】

    一.代码运行视频(哔哩哔哩) [Matlab优化预测]布谷鸟算法优化灰色模型预测[含源码 1244期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]屈迟文,傅 ...

  7. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  8. 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...

  9. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  10. 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像增强]基于matlab萤火虫算法图像对比度增强[含Matlab源码 2142期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

最新文章

  1. 谈谈Python那些不为人知的冷知识(二)
  2. Oracle RAC环境下如何更新patch(Rolling Patch)
  3. HTML中DOM对象的属性和方法的层级关系是怎样的?(目录即层次)
  4. CentOS7 通过 YUM 升级 VIM8
  5. 北京达内python价格_记录在北京达内学Python-day07
  6. 双模sa_七句话讲清NSA单模与SA+NSA双模手机的真实区别
  7. numpy产生一个大于0的随机数_Numpy中常用随机函数的总结
  8. uniapp中利用监视vuex中state数据配合uview实现登录消息提示
  9. HoloLens1开发(三):Trilib插件动态加载模型-Part2
  10. python 初始化数组_Python里面这些点,据说90%的新手都会一脸懵逼
  11. 宇信易诚网银客户端安全控件存在远程拒绝服务漏洞
  12. Python打印杨辉三角
  13. HONOR荣耀50/荣耀50Pro怎么解锁huawei 荣耀50pro屏幕锁开机锁激活设备锁了应该如何强制解除鸿蒙系统刷机解锁方法流程步骤不开机跳过锁屏移除锁定进系统方法经验
  14. Linux下修改MTU值
  15. 如果当初......
  16. 两招彻底驯服Vista任务管理器这头倔驴
  17. 生产者和消费者问题详解
  18. 使用nvm管理node版本,nvm常用命令,nvm换源
  19. ad用户文件服务器登录过程初始化失败,域用户无法登录域故障处理(AD问题).docx...
  20. 计算机网络mask是什么意思,计算机网络-mask答案.ppt

热门文章

  1. day_4 Selenium请求库
  2. 【2018.9.26】K-D Tree详解
  3. [更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能、BUG、细节说明,以及升级思考过程!...
  4. JavaScript -- Window-Resize
  5. cx_Oracle库导入失败引起crontab中python程序运行失败,并且无错误提示
  6. 添加数据要顺着来,删除数据要反着去。
  7. PCL1.8.0 error C4996: 'pcl::SAC_SAMPLE_SIZE'编译错误
  8. unity常用的引用赋值一个GameObject的三种方法
  9. Atitit 团队远景规划与目标总结 v4 目录 1. 使命和组织宗旨 1 1.1. 组织使命 1 1.2. 核心价值观 1 2. 行政目标体系 2 2.1. 打造体系齐全的复合体 2 2.2. 人
  10. Atitit 软件体系重要理论学科 v2 s67.docx Atitit 软件重要理论学科 目录 1. 计算理论这门学问 2 1.1. 学科的产生 2 1.2. 在这些领域中,自动机理论和形式语言理论