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

article/2025/10/5 7:56:04

目录

  • 一、布谷鸟算法理论
  • 二、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
在这里插入图片描述


http://chatgpt.dhexx.cn/article/MOMAtXgI.shtml

相关文章

智能优化算法——布谷鸟搜索算法原理(附代码)

目录 基本概念 算法具体流程 算法流程图 测试函数 优化结果 visual studio2017C代码 基本概念 布谷鸟搜索算法&#xff08;Cuckoo Search&#xff0c;缩写 CS&#xff09;是由剑桥大学杨新社教授和S.戴布于2009年提出的一种新兴启发算法。根据昆虫学家的长期观察研究发现&#…

布谷鸟算法

布谷鸟算法是将布谷鸟育雏行为与Levy飞行算法相结合的一种算法。 在布谷鸟算法中&#xff0c;有两个算法或者说两个位置更新是关键&#xff1a; 第一个是布谷鸟寻找最优解时的算法&#xff1a; 一个是布谷鸟寻找鸟窝下蛋的寻找路径是采用早已就有的萊维飞行3&#xff0c;如上…

布谷鸟算法浅谈与简单应用

简介 布谷鸟算法是由剑桥大学Xin-She Yang教授和S.Deb于2009年提出的一种新兴的启发算法&#xff0c;是一种通过模拟自然界当中布谷鸟&#xff08;也就是杜鹃&#xff0c;故该算法也称为杜鹃算法&#xff09;在繁育后代的行为而提出的一种搜索算法。 本文章将以在工程实践当中…

布谷鸟搜索算法学习

0、引言 布谷鸟搜索算法&#xff08;Cuckoo Search, CS&#xff09;是2009年Xin-She Yang 与Suash Deb在《Cuckoo Search via Levy Flights》一文中提出的一种优化算法。布谷鸟算法是一种集合了布谷鸟巢寄生性和莱维飞行&#xff08;Levy Flights&#xff09;模式的群体智能搜索…

布谷鸟搜索算法

布谷鸟搜索&#xff08;Cuckoo Search&#xff0c;缩写 CS&#xff09;&#xff0c;也叫杜鹃搜索&#xff0c;是由剑桥大学杨新社&#xff08;音译自&#xff1a;Xin-She Yang&#xff09;教授和S.戴布&#xff08;S.Deb&#xff09;于2009年提出的一种新兴启发算法。 1.定义 …

优化算法|布谷鸟算法原理及实现

布谷鸟算法 一、布谷鸟算法背景知识二、布谷鸟算法思想简介三、布谷鸟算法流程四、布谷鸟算法的Python实现五、布谷鸟算法matlab实现 一、布谷鸟算法背景知识 2009年&#xff0c;Xin-She Yang 与Suash Deb在《Cuckoo Search via Levy Flights》一文中提出了布谷鸟算法(简称CS)…

CS_2022_01

2022-1-3 08:33:52 用OBS录完之后的视频是mkv格式的&#xff0c;PR不支持mkv格式的视频&#xff0c;于是需要转码&#xff0c;一开始用FFmpeg&#xff0c;有点不方便&#xff0c;但是也能用。后来一看OBS原本自带转码工具。 发现过程&#xff1a; 打开OBS&#xff0c;点击左下角…

CSP-S 2020

[CSP-S2020] 动物园 题目描述 动物园里饲养了很多动物&#xff0c;饲养员小 A 会根据饲养动物的情况&#xff0c;按照《饲养指南》购买不同种类的饲料&#xff0c;并将购买清单发给采购员小 B。 具体而言&#xff0c;动物世界里存在 2 k 2^k 2k 种不同的动物&#xff0c;它…

cs231n(1)

图像分类 目标&#xff1a;已有固定的分类标签集合&#xff0c;然后对于输入的图像&#xff0c;从分类标签集合中找出一个分类标签&#xff0c;最后把分类标签分配给该输入图像。 图像分类流程 输入&#xff1a;输入是包含N个图像的集合&#xff0c;每个图像的标签是K种分类标…

CS61A 02

Control Expressions evaluate to values Statements perform actions print(print(1), print(2))1 2 None None Boolean Expressions T and F False values: False, None, 0, ‘’ True values: everything else Operators and, or, not True and 5 2 and 88 False …

CS224N 2019 Assignment 2

Written: Understanding word2vec Let’s have a quick refresher on the word2vec algorithm. The key insight behind word2vec is that ‘a word is known by the company it keeps’. Concretely, suppose we have a ‘center’ word c c c and a contextual window surr…

【CS231N】

损失函数和后向传播 铰链损失函数&#xff1a;SVM常用&#xff0c;打击和正确结果相似度高的错误答案 正则化&#xff1a;获得更简单的模型&#xff0c;获得更平均的模型&#xff0c;避免过拟合&#xff08;绿色线&#xff09; Softmax&#xff1a;先指数计算&#xff08;去除负…

Stanford CS230深度学习(一)

斯坦福CS230可以作为深度学习的入门课&#xff0c;最近我也在跟着看视频、完成编程作业。首先列出使用的资源链接&#xff0c;然后给出第一课的理解和编程作业的代码。 所有资料如下&#xff1a; 一、课程连接&#xff1a; b站课堂讲授版&#xff1a;Stanford CS230(吴恩达 …

csp-202206

202206 题目一&#xff1a;归一化处理【100分】题目二&#xff1a;寻宝&#xff01;大冒险&#xff01;【100分】题目三&#xff1a;角色授权【100分】题目四&#xff1a;光线追踪【15分】 题目一&#xff1a;归一化处理【100分】 水题&#xff0c;直接上 AC代码&#xff1a; …

cs229-1

本文全部参考自https://blog.csdn.net/stdcoutzyx?typeblog&#xff0c;仅作学习使用 文章目录 监督学习supervised learning线性回归局部加权回归LWR,Locally/Loess Weighted Regression最小二乘法的概率解释逻辑斯蒂回归logistic regression感知器算法牛顿方法NewTons Metho…

CS231n_learn

CS231n CS 程序&#xff1a;https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html CS 课件http://cs231n.stanford.edu/slides/2017/&#xff1a; CS 课程首页&#xff1a;http://cs231n.stanford.edu/ CS 附带教程网页版&#xff1a;https://cs.stanford…

csp-202203

202203 题目一&#xff1a;未初始化警告【100分】题目二&#xff1a;出行计划【100分】题目三&#xff1a;计算资源调度器 【100分】 题目一&#xff1a;未初始化警告【100分】 简单数组操作题 #include<iostream> using namespace std; int n,k; bool ready[10000000]…

【CS231n系列】

Stanford-cs231n课程学习笔记&#xff08;一&#xff09; Stanford课程原版是英文&#xff0c;奈何本人英语菜的一批。原版网站放在下面&#xff0c;xdm可以多多学习。BUT&#xff01; B站up<同济子豪兄>yyds好吧&#xff01;&#xff01;&#xff01; Stanford231n 文章…

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447; 机器学习AI算法工程 公众号&#xff1a; datayx 作为全球计算机四大名校之一&#xff0c;斯坦福大学的CS230《深度学习》课程一直受到全球计算机学子和从业人员的热烈欢迎。 CS230授课人为全球著名计算…

CS230学习笔记(一)

CS230学习笔记(一) 1.前言 ok&#xff0c;前思后想&#xff0c;左思右想&#xff0c;我还是觉得自己得督促一下自己&#xff0c;所以&#xff0c;我觉得开始更新cs230的笔记&#xff0c;当然&#xff0c;我前面的六篇pytorch学习笔记我是不会放着不管的&#xff0c;后面肯定会…