布谷鸟优化算法C++
#include <iostream>
#include <vector>
#include <cmath>
#include <random>
#include <time.h>
#include <fstream>
#define pi acos(-1)
//5只布谷鸟
constexpr int NestNum = 40;
//pi值
//规定X,Y 的取值范围
constexpr double X_max = 5;
constexpr double X_min = 0;
constexpr double Y_max = 5;
constexpr double Y_min = 0;
//最大迭代次数
constexpr int MaxIterationTimes = 300;
//被宿主发现的概率
constexpr double Pa = 0.25;
//自变量结构体
struct Nest {
double x;
double y;
double fitness;
};
void fitFunc(Nest& nest);
int findBetterNest(std::vector<Nest>&);
std::vector<Nest> levy(std::vector<Nest> OldNestPop, std::size_t bestNum);
std::vector<Nest> RandomAbandonPaNestPop(std::vector<Nest> OldNestPop);
//随机数引擎
static std::default_random_engine e(time(0));
static std::uniform_real_distribution<double> u(0, 1);
int main(void)
{
bool flag_output = false;
double Xold;
double Xnew;
double Yold;
double Ynew;
std::ofstream outfileX("D:\\cuckoo\\cuckooX.txt");
std::ofstream outfileY("D:\\cuckoo\\cuckooY.txt");
std::ofstream outfileZ("D:\\cuckoo\\cuckooZ.txt");
//现在的鸟巢群
std::vector<Nest> current_nestPop;
//迭代次数
int num = 0;
//最优鸟巢
int BestNestCurrent;
//初始化
for (int i = 0; i < NestNum; ++i)
{
Nest nestinitial;
nestinitial.x = (X_max - X_min) * u(e) + X_min;
nestinitial.y = (Y_max - Y_min) * u(e) + Y_min;
fitFunc(nestinitial);
current_nestPop.push_back(nestinitial);
}
//for (auto i : nestPop)
//{
// std::cout << i.fitness << std::endl;
//}
//寻找最优个体
BestNestCurrent = findBetterNest(current_nestPop);
outfileX << current_nestPop[BestNestCurrent].x << std::endl;
outfileY << current_nestPop[BestNestCurrent].y << std::endl;
outfileZ << current_nestPop[BestNestCurrent].fitness << std::endl;
while (num < MaxIterationTimes)
{
//储存上次的最优解的X,Y
Xold = current_nestPop[BestNestCurrent].x;
Yold = current_nestPop[BestNestCurrent].y;
//levy飞行--位置更新
std::vector<Nest> NewNestPop = levy(current_nestPop, BestNestCurrent);
//用适应值较好的鸟窝位置替换适应值较差的鸟窝位置
for (decltype(NewNestPop.size()) i = 0; i < NewNestPop.size(); ++i)
{
if (i != BestNestCurrent && NewNestPop[i].fitness < current_nestPop[i].fitness)
{
current_nestPop[i] = NewNestPop[i];
}
}//此时得到更优的鸟窝位置
//存安去险 保留鸟窝中被发现概率较小的鸟窝位置,并随机改变发现概率较大的鸟窝位置
NewNestPop = RandomAbandonPaNestPop(current_nestPop);
for (decltype(NewNestPop.size()) i = 0; i < NewNestPop.size(); ++i)
{
if (i != BestNestCurrent && NewNestPop[i].fitness < current_nestPop[i].fitness)
{
current_nestPop[i] = NewNestPop[i];
}
}//此时得到更优的鸟窝位置
BestNestCurrent = findBetterNest(current_nestPop);//现在的最优鸟巢位置
Xnew = current_nestPop[BestNestCurrent].x;
Ynew = current_nestPop[BestNestCurrent].y;
if (Xnew != Xold || Ynew != Yold)
{
outfileX << current_nestPop[BestNestCurrent].x << std::endl;
outfileY << current_nestPop[BestNestCurrent].y << std::endl;
}
outfileZ << current_nestPop[BestNestCurrent].fitness << std::endl;
/*std::cout << current_nestPop[BestNestCurrent].fitness << std::endl;
std::cout << "(x,y)" << '(' << current_nestPop[BestNestCurrent].x << ',' << current_nestPop[BestNestCurrent].y << ')' << std::endl;*/
//outfileX << current_nestPop[BestNestCurrent].x << std::endl;
//outfileY << current_nestPop[BestNestCurrent].y << std::endl;
//outfileZ << current_nestPop[BestNestCurrent].fitness << std::endl;
num++;
}
std::cout << current_nestPop[BestNestCurrent].fitness << std::endl;
return 0;
}
void fitFunc(Nest& nest)
{
nest.fitness = -sin(nest.x) * pow(sin(nest.x * nest.x / pi), 20) - sin(nest.y) * pow(sin(2 * nest.y * nest.y / pi), 20);
//nest.fitness = -(nest.x - 1) * (nest.x - 1) + 1;
}
int findBetterNest(std::vector<Nest>& nestPop)
{
int BestNum = 0;
for (decltype(nestPop.size()) i = 0; i < nestPop.size(); ++i)
{
if (nestPop[i].fitness < nestPop[BestNum].fitness)
{
BestNum = i;
}
}
return BestNum;
}
std::vector<Nest> levy(std::vector<Nest> OldNestPop,std::size_t bestNum)
{
double beta = 1.5;
// double alpha = 0.01 * R(e);//有的论文写
double alpha = 0.4;
double sigma_u = pow((tgamma(1 + beta) * sin(pi * beta / 2)) / (beta * tgamma((1 + beta) / 2) * pow(2, (beta - 1) / 2)), 1 / beta);
double sigma_v = 1;
static std::normal_distribution<double> R(0, sigma_u);
static std::normal_distribution<double> R1(0, sigma_v);
for (auto& i : OldNestPop)
{
//前面的系数是保证最优鸟巢不会进行levy飞行
double stepX = (i.x - OldNestPop[bestNum].x) * R(e) / (pow(abs(R1(e)), 1 / beta));
double stepY = (i.x - OldNestPop[bestNum].x) * R(e) / (pow(abs(R1(e)), 1 / beta));
//按范围更新X
if (i.x + alpha * stepX > X_max)
{
i.x = X_max;
}
else if(i.x + alpha * stepX < X_min)
{
i.x = X_min;
}
else
{
i.x = i.x + alpha * stepX;
}
//按范围更新Y
if (i.y + alpha * stepY > Y_max)
{
i.y = Y_max;
}
else if (i.y + alpha * stepY < Y_min)
{
i.y = Y_min;
}
else
{
i.y = i.y + alpha * stepY;
}
fitFunc(i);
}
return OldNestPop;
}
std::vector<Nest> RandomAbandonPaNestPop(std::vector<Nest> OldNestPop)
{
double step_sizeX = 0;
double step_sizeY = 0;
static std::uniform_int_distribution<int> randomInt(0, OldNestPop.size() - 1);
for(decltype(OldNestPop.size()) i = 0;i < OldNestPop.size();++i)
{
if (u(e) < Pa)//被宿主发现了,要重新寻找新巢
{
step_sizeX = u(e) * (OldNestPop[randomInt(e)].x - OldNestPop[randomInt(e)].x);
step_sizeY = u(e) * (OldNestPop[randomInt(e)].y - OldNestPop[randomInt(e)].y);
if (OldNestPop[i].x + step_sizeX > X_max)
{
OldNestPop[i].x = X_max;
}
else if(OldNestPop[i].x + step_sizeX < X_min)
{
OldNestPop[i].x = X_min;
}
else
{
OldNestPop[i].x += step_sizeX;
}
if (OldNestPop[i].y + step_sizeY > Y_max)
{
OldNestPop[i].y = Y_max;
}
else if (OldNestPop[i].y + step_sizeY < Y_min)
{
OldNestPop[i].y = Y_min;
}
else
{
OldNestPop[i].y += step_sizeY;
}
fitFunc(OldNestPop[i]);
}
}
return OldNestPop;
}
相关文章:
布谷鸟优化算法C++
#include <iostream> #include <vector> #include <cmath> #include <random> #include <time.h> #include <fstream> #define pi acos(-1) //5只布谷鸟 constexpr int NestNum 40; //pi值 //规定X,Y 的取值范围 constexpr double X_…...
三体到底是啥?用Python跑一遍就明白了
文章目录拉格朗日方程推导方程组微分方程算法化求解画图动图绘制温馨提示,只想看图的画直接跳到最后一节拉格朗日方程 此前所做的一切三体和太阳系的动画,都是基于牛顿力学的,而且直接对微分进行差分化,从而精度非常感人…...
Golang-Hello world
目录 安装 Go(如果尚未安装) 编写Hello world 使用Golang的外部包 自动下载需要的外部包...
this指针C++
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章 🔥座右铭:“不要等到什么都没有了,才下定决心去做” …...
SpringBoot+WebSocket实时监控异常
# 写在前面此异常非彼异常,标题所说的异常是业务上的异常。最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理。因为…...
Baumer工业相机堡盟相机如何使用自动曝光功能(自动曝光优点和行业应用)(C++)
项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具…...
HTML、CSS学习笔记7(移动适配:rem、less)
一、移动适配 rem:目前多数企业在用的解决方案vw / vh:未来的解决方案 1.rem(单位) 1.1使用rem单位设置尺寸 px单位或百分比布局可以实现吗? ————不可以 网页的根字号——HTML标签 1.2.rem移动适配 写法&#x…...
STM32感应开关盖垃圾桶
目录 项目需求 项目框图 编辑 硬件清单 sg90舵机介绍及实战 sg90舵机介绍 角度控制 SG90舵机编程实现 超声波传感器介绍及实战 超声波传感器介绍 超声波编程实战 项目设计及实现 项目需求 检测靠近时,垃圾桶自动开盖并伴随滴一声,2秒后关盖…...
进程跟线程的区别
进程跟线程的区别 文章目录进程跟线程的区别前言一.什么线程二.线程与进程的联系三.线程与进程有什么不同前言 现代所有计算机都能同时做几件事情,当一个用户程序正在运行时,计算机还能同时读取磁盘,并向屏幕打印输出正文.在一个多道操作程序中,cpu由一道程序向另外一道程的切…...
[ICLR 2016] Unsupervised representation learning with DCGANs
目录 IntroductionModel ArchitectureReferencesIntroduction 作者提出了用 CNN 搭建 GAN,使得 GAN 训练更加稳定的一系列准则,并将满足这些设计理念的模型称为 DCGANs (Deep Convolutional GANs). 此外,作者将 trained discriminators 用于图像分类任务,相比于其他无监督算…...
QT编程从入门到精通之十五:“第五章:Qt GUI应用程序设计”之“5.1 UI文件设计与运行机制”之“5.1.2 项目管理文件”
目录 第五章:Qt GUI应用程序设计 5.1 UI文件设计与运行机制 5.1.2 项目管理文件 第五章:Qt GUI应用程序设计 在“Qt 程序创建基础”上,本章将继续深入地介绍Qt Creator设计GUI应用程序的方法...
基于Three.js和MindAR实现的网页端WebAR人脸识别追踪功能的京剧换脸Demo(含源码)
前言 近段时间一直在玩MindAR的功能,之前一直在弄图片识别追踪的功能,发现其强大的功能还有脸部识别和追踪的功能,就基于其面部网格的例子修改了一个国粹京剧的换脸程序。如果你不了解MindAR的环境配置可以先参考这篇文章:基于Mi…...
动态规划思路
拉勾教育版权所有:https://kaiwu.lagou.com/course/courseInfo.htm?courseId3 动态规划思路 1.最优子结构 2.重复计算子机构 3.依靠递归,层层向上传值,所以编程时初始化子结构很重要 动态规划步骤 1.判断动态规划的类型 1.线性规划 >&…...
HTTPS关键词语解释和简单通讯流程
1、 什么是HTTPS HTTPS是基于HTTP的上层添加了一个叫做TLS的安全层,对数据的加密等操作都是在这个安全层中进行处理的,其底层还是应用的HTTP。 2、 什么是对称加密; 加密和解密都是用同一个秘钥 3、 什么是非对称加密; 加密和…...
“前端开发中的三种定时任务及其应用“
前端定时任务是指在一定时间间隔内,自动执行指定的操作或函数。在前端开发中,定时任务被广泛应用于诸如数据更新、定时提醒、定时刷新页面等方面。在本文中,我们将介绍前端中常见的三种定时任务,分别是 setTimeout、setInterval 和…...
华为OD机试题 - 猜字谜(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:猜字谜题目输入输出描述备注示例一输入输出示例二输入输出思路C…...
python@pyside样式化
文章目录refWidget类创建样式化文件qss引用样式并启动应用ref Styling the Widgets Application - Qt for PythonQt Style Sheets Reference | Qt Widgets 5.15.12 Widget类创建 创建一个简单界面(菜单主要内容)它们是水平布局 主要内容包括一段文本和一个按钮,它们是垂直布…...
C++经典15道面试题目(文末含大题)
今天给大家找了几个C面试里很有可能被问的哦,赶紧收藏下来去背!!! 目录 1)C中有malloc/free,为什么还需要new/delete? 2)C中explicit关键字的作用? 3)C中static关键字的作用&a…...
自动计算30天内的股价最高价源代码
我可以回答这个问题。您可以使用以下代码来计算30天内股价的最高价: 复制 import pandas as pd import yfinance as yf # 设置股票代码和日期范围 symbol "AAPL" start_date "2021-01-01" end_date "2021-06-30" # 获取股票…...
国外SEO升级攻略!一看就懂!
SEO是搜索引擎优化的缩写,它是指通过优化网站内容和结构,提升网站在搜索引擎中的排名,从而获得更多的有价值的流量。 而关键词研究和选择是SEO优化中最基础也是最关键的环节,它决定了网站将面向哪些用户、哪些关键词和词组将被优…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
