目录

  • 一、布谷鸟算法理论
  • 二、CS算法应用于函数优化
    • 1.流程图
    • 3.代码解析
      • 3.1 主函数 Csmain.m
      • 3.2 Levy飞行 func_levy.m
      • 3.3 与上一代比较,返回较优的鸟巢 func_bestNestPop.m
      • 3.4 根据发现概率,舍弃一个鸟巢并建立一个新鸟巢 func_newBuildNest.m
      • 3.5 目标函数
      • 3.6 计算适应度函数
  • 三、输出结果
  • 四、CS案例MATLAB源码下载

一、布谷鸟算法理论

模拟退火算法(SA)、遗传算法(GA)、布谷鸟算法(CS)、人工蜂群算法(ABC)学习笔记—附MATLAB注释代码

二、CS算法应用于函数优化

1.流程图

3.代码解析

3.1 主函数 Csmain.m

% Script 布谷鸟算法,求解函数最小值
% @author zhaoyuqiang
%#ok<*SAGROW> Remove hints of syntax
%#ok<*CLALL>
%#ok<*FNDSB>
clear all ;
close all ;
clc ;
N = 25; % 鸟巢的数量Number of nests(The scale of solution)
D = 10 ; % 问题的维度,一个鸟巢鸟蛋的个数 Dimensionality of solution
T =500 ; %迭代次数的上限 Number of iterations
Xmax = pi ;%%函数上限
Xmin = -pi ;%%函数下限
Pa = 0.25 ; % Probability of building a new nest(After host bird find exotic bird eggs)nestPop = rand(N,D)*(Xmax-Xmin)+Xmin ;  % 初始化寄主的鸟巢Random initial solutions
for t=1:Tlevy_nestPop =  func_levy(nestPop,Xmax,Xmin) ; % 通过levy飞行产生一个解Generate new solutions by Levy flightsnestPop = func_bestNestPop(nestPop,levy_nestPop);  % 与上一代比较,更新适应度较优的鸟巢Choose a best nest among  new and old nests     rand_nestPop = func_newBuildNest(nestPop,Pa,Xmax,Xmin); % 根据发现概率舍弃一个鸟巢并建立一个新鸟巢Abandon(Pa) worse nests and build new nests by (Preference random walk )nestPop = func_bestNestPop(nestPop,rand_nestPop) ; %列出当前最佳的鸟巢 Choose a best nest among  new and old nests[~,index] = max(func_fitness(nestPop)) ; % Best nests更新当代最优鸟巢的位置trace(t) = func_objValue(nestPop(index,:)) ;end[~,index] = max(func_fitness(nestPop)) ; % 查找当前最优鸟巢
%%%输出这个鸟巢里的每个鸟蛋,即是每个解
nestPop(index,:)
figure
plot(trace);
xlabel('迭代次数') ;
ylabel('适应度值') ;
title('适应度进化曲线') ;

3.2 Levy飞行 func_levy.m

说白了就是实现一个随机搜索的公式来更新鸟巢的位置,

Xt+1 = Xt + α \alpha α S
S就是服从Levy分布

Levy~u = t - β \beta β ,1<= β \beta β <=3的随机步长。

具体公式解析参考:
通俗易懂的布谷鸟算法与莱维飞行,(附求解函数最小值matlab源码)

 function [ result ] = func_levy( nestPop,Xmax,Xmin)
%FUNC_LEVY : Update position of nest by using Levy flights
%@author : zhaoyuqiang
[N,D] = size(nestPop) ;
% Levy flights by Mantegna's algorithm
beta = 1.5 ;
alpha = 1 ;
sigma_u = (gamma(1+beta)*sin(pi*beta/2)/(beta*gamma((1+beta)/2)*2^((beta-1)/2)))^(1/beta) ;
sigma_v = 1 ;
u = normrnd(0,sigma_u,N,D) ;%(第一个参数代表均值,sigma参数代表标准差),生成N×D形式的正态分布的随机数矩阵。
v = normrnd(0,sigma_v,N,D) ;
step = u./(abs(v).^(1/beta)) ;
% alpha = 0.1.*(nestPop(randperm(N),:)-nestPop(randperm(N),:)); % Bad effect
nestPop = nestPop+alpha.*step ;
% Deal with bounds
nestPop(find(nestPop>Xmax)) = Xmax ; %#ok<*FNDSB>%查找大于Xmax的元素
nestPop(find(nestPop<Xmin)) = Xmin ;
result = nestPop ;
end

3.3 与上一代比较,返回较优的鸟巢 func_bestNestPop.m

function [ nestPop ] = func_bestNestPop( nestPop,new_nestPop )
%FUNC_ 此处显示有关此函数的摘要
%@author zhaoyuqiang
index = find(func_fitness(nestPop)<func_fitness(new_nestPop)) ;%与上一代比较适应度,选择一个适应度更大的更新鸟窝
nestPop(index,:) = new_nestPop(index,:) ;
%nestPop(index) = new_nestPop(index) ;
end

3.4 根据发现概率,舍弃一个鸟巢并建立一个新鸟巢 func_newBuildNest.m

function [ nestPop ] = func_newBuildNest( nestPop ,Pa ,Xmax,Xmin)
%FUNC_NEWBUILDNEST new solutions are generated by using the similarity
% between the existing eggs/solutions and the host eggs/solutions with a discovery rate pa .
%@author zhaoyuqiang
[N,D] = size(nestPop) ;
%%根据发现概率发现鸟蛋,舍弃鸟窝
nestPop = nestPop+rand.*heaviside(rand(N,D)-Pa).*(nestPop(randperm(N),:)-nestPop(randperm(N),:));
% Deal with bounds
nestPop(find(nestPop>Xmax)) = Xmax ; %#ok<*FNDSB>建立新的鸟窝
nestPop(find(nestPop<Xmin)) = Xmin ;
end

3.5 目标函数

function [ result ] = func_objValue( pop )
%FUNC_OBJVALUE 计算目标函数
objValue =  sum(pop.^2,2);
result = objValue ;
end

3.6 计算适应度函数

function [ result ] = func_fitness( pop )
%OBJFUNCTION 求适应度,最小值
%   待优化目标函数
% x: 种群或者个体
% result : 种群适应度
objValue =  func_objValue(pop);
result  = 4001 - objValue ;
end

三、输出结果

  • 适应度变化曲线
  • 打印最优解

四、CS案例MATLAB源码下载

完整代码下载或者私我:betterbench.top/#/41/detail

布谷鸟算法(Cuckoo Search,CS)MATLAB案例详细解析相关推荐

  1. 模拟退火算法(Simulated Annealing,SA)MATLAB案例详细解析

    目录 一.理论 二.模拟退火算法应用于函数优化 1.流程图 2.代码解析 3.运行计算结果 二.模拟退火算法应用于旅行商问题(TSP) 1.流程图 2.代码解析 3.运行计算结果 一.理论 模拟退火算 ...

  2. MATLAB程序详细解析,遗传算法——matlab代码解析

    遗传算法--matlab代码解析 本文为学习B站老哥数学建模课程之后的一点笔记,图片源自web,代码源自老哥程序包,侵权删. 详细的遗传算法原理不再赘述,百度即可找到. 算法定义 遗传算法(GA)是模 ...

  3. 算法-------过河经典问题,超详细解析

    算法-------过河问题 题目来源POJ 题号为1700http://poj.org/problem?id=1700 描述 有N人希望用一条船过河,这条船最多只能载两个人.因此,必须安排某种方案来回 ...

  4. 深度学习神经网络入门案例详细解析-鸢尾花案例

    神经网络设计过程 案例: 鸢尾花分类 鸢尾花三种类别: 三种: 狗尾巴 杂草 小腹肌 通过搭建一个神经网络来对鸢尾花进行分类 收集花朵 的特征值: 四种 花萼长 花萼宽 花瓣长 花瓣宽 以及: 三种输 ...

  5. [算法学习]模拟退火算法(SA)、遗传算法(GA)、布谷鸟算法(CS)、人工蜂群算法(ABC)学习笔记---附MATLAB注释代码

    目录 1.模拟退火算法(Simulated Annealing,SA) 1.1 本质: 1.2 算法思想 1.3 SA流程图 1.4 模拟退火过程 1.5 SA解决TSP问题 1.6 SA改进方向 1 ...

  6. 【灰色神经预测】基于布谷鸟算法优化灰色神经网络模型实现数据回归预测含Matlab源码

    1 简介 人工神经网络已成功应用到许多领域,如模式识别.机器学习.信号处理和信息融合等,但是,如果神经网络的学习算法或拓扑结构选择不当,可能导致出现神经网络的预测准确度低的问题.为此,许多研究者开始将 ...

  7. 【优化求解】基于布谷鸟算法结合灰狼算法求解最优目标matlab代码

    1 简介 布谷鸟搜索(Cuckoo Search, CS)算法是 2009 年 Xin-She Yang 与 Susash Deb 提出的一种新型的启发算法[61].算法灵感来源于一些布谷鸟种属(Cu ...

  8. 【SVM回归预测】布谷鸟算法优化SVM回归预测【含Matlab源码 1422期】

    ⛄一.布谷鸟算法简介 布谷鸟算法,英文叫做Cuckoo search (CS algorithm).首先还是同样,介绍一下这个算法的英文含义, Cuckoo是布谷鸟的意思,啥是布谷鸟呢,是一种叫做布谷 ...

  9. 【BP数据预测】布谷鸟算法优化BP神经网络数据预测【含Matlab源码 1121期】

    ⛄一.布谷鸟算法简介 布谷鸟算法,英文叫做Cuckoo search (CS algorithm).首先还是同样,介绍一下这个算法的英文含义, Cuckoo是布谷鸟的意思,啥是布谷鸟呢,是一种叫做布谷 ...

最新文章

  1. AI如何赋能金融行业?百度、图灵深视等同台分享技术实践
  2. java提供的4种基本控制语句结构_Java基础6-控制语句
  3. git工具tig用法
  4. 成为软件架构师的4个过程
  5. c语言源码转流程图工具_C语言学习路线 (详细)
  6. 支付宝工程师如何搞定关系数据库的“大脑”——查询优化器
  7. 收起虚拟键盘的各种方法 -- IOS
  8. Python使用更相减损术计算两个整数的最大公约数
  9. nginx ngx_http_access_module
  10. 41 岁蚂蚁金服总裁助理去世; 华为首款 5G 手机欧洲上市;库克首谈 5G iPhone | 极客头条...
  11. perl first day
  12. 解决引用flexible.js使第三方ui样式缩小的方法
  13. 优化算法--SGD,batch SGD
  14. sketch插件 android,用这个免费的Sketch插件,帮你完美还原安卓界面!
  15. 基于TI Sitara系列AM3352/AM3354/AM3359的Linux常用开发案例分享
  16. QT5 自定义窗口的详细设计方案
  17. 在docker中挂载硬盘
  18. 设计模式------享元模式和组合模式
  19. 线性代数常用名词详解1
  20. Linux 卷组逻辑卷创建管理和find高级使用 Set UID附加权限(DAY7)

热门文章

  1. 手机壳鸿蒙,手机壳后面为什么要放钱?好多人都不懂,看完我也放一张
  2. 2021互联网计算机校招薪资
  3. android dialog圆角显示及解决出现的黑色棱角.(友情提示)
  4. 使用正则表达式对输入数字进行匹配
  5. java 字符串替换中文逗号
  6. Kafka的优势有哪些?经常应用在哪些场景?
  7. Java图片扫描仪_Java扫描仪useDelimiter()方法及示例
  8. LeetCode刷题:删除有序数组的重复项详解
  9. 【VUE】vue3插槽
  10. 对API接口或H5接口做签名认证