群体优化算法---灰狼优化算法学习介绍以及在卷积神经网络训练上的应用

**长文预警**

介绍

在自然界中,狼群的社会结构和捕猎策略展现了高度的智能和协调性,灰狼优化算法(Grey Wolf Optimizer, GWO)正是受此启发提出的一种群体智能优化算法。GWO主要模拟了灰狼的社会等级制度和捕猎行为,其核心在于利用灰狼群的捕猎策略来搜索全局最优解

灰狼的社会等级与行为

1. 社会等级
灰狼的社会结构主要分为四个等级:
α狼:群体的领导者,负责做出决策,如捕猎、睡觉地点的选择等。
β狼:辅助α狼管理狼群,通常是次级领导者。
δ狼:地位较低的成员,服从α和β狼。
ω狼:最低等级的狼,主要负责跟随和服从群体。

2. 捕猎行为
灰狼的捕猎过程大致可分为三个阶段:
围捕(Encircling):狼群包围猎物。
追踪与骚扰(Hunting and Harassment):通过不断接近和干扰猎物,逐步削弱其体力。
攻击(Attacking):最终发起攻击捕获猎物。

灰狼优化算法的基本原理

1.初始种群的生成
GWO从一组随机生成的灰狼个体开始。每个个体对应一个候选解,在解空间中进行搜索。种群大小一般固定为n。

2. 社会等级的划分
在GWO中,α、β、δ狼分别代表当前搜索到的最优解、次优解和第三优解,其余的狼则作为ω狼。通过不断迭代更新,狼群中的个体逐渐靠近全局最优解。

3. 模拟围捕行为
围捕行为通过数学公式进行模拟:
在这里插入图片描述

4. 位置更新
灰狼的位置更新不仅仅依赖于单一的α狼,而是通过α、β、δ狼的位置来共同决定,这样可以避免陷入局部最优。位置更新公式如下:
在这里插入图片描述

灰狼优化算法步骤

1.初始化:设定种群大小、最大迭代次数,并初始化灰狼种群的位置。
2.适应度评价:计算每个个体的适应度值,并确定α、β、δ狼的位置。
3.位置更新:根据围捕、追踪与骚扰行为更新灰狼的位置。
4.迭代:重复适应度评价和位置更新步骤,直到达到最大迭代次数或收敛条件。
5.输出最优解。

应用领域

GWO因其简洁性和高效性,广泛应用于各类优化问题,包括但不限于:

函数优化:如多峰函数的全局优化。
工程优化:如结构设计优化、调度问题等。
机器学习:如神经网络的参数优化。
图像处理:如图像分割、特征选择等

优势与局限性

优势
简洁性:算法实现简单,不需要复杂的参数设置。
全局搜索能力强:通过模拟灰狼的捕猎行为,有效避免陷入局部最优。
适应性强:适用于连续和离散优化问题,具有广泛的应用前景。
局限性
参数依赖性:虽然参数较少,但参数的设置对算法性能有一定影响。
收敛速度:在某些复杂问题上,收敛速度可能不够理想,需要结合其他优化方法

改进与发展

为了提升GWO的性能,研究者提出了多种改进算法,如:

混合算法:将GWO与其他优化算法(如遗传算法、粒子群优化)结合,增强搜索能力。
动态参数调整:根据迭代过程中的反馈信息,动态调整算法参数,提高适应性。
多种群协作:利用多个种群协同搜索,提高全局搜索能力和收敛速度

代码

由于本文示例涉及到的代码有三个脚本,所以建议在matlab新建一个文件夹,命名随意
gwo_optimize.cnn.m

function best_params = gwo_optimize_cnn(train_data, train_labels, val_data, val_labels, max_iter, n_wolves)% Initialize the populationdim = 2; % Example: learning rate, number of conv layerslb = [1e-4, 1]; % Lower bounds for the parametersub = [1e-2, 5]; % Upper bounds for the parameterswolves = repmat(lb, n_wolves, 1) + rand(n_wolves, dim) .* (repmat(ub, n_wolves, 1) - repmat(lb, n_wolves, 1));alpha = inf; beta = inf; delta = inf;alpha_pos = zeros(1, dim); beta_pos = zeros(1, dim); delta_pos = zeros(1, dim);for iter = 1:max_iterfor i = 1:n_wolves% Calculate fitness for each wolffitness = evaluate_cnn(wolves(i, :), train_data, train_labels, val_data, val_labels);% Update alpha, beta, delta wolvesif fitness < alphadelta = beta; delta_pos = beta_pos;beta = alpha; beta_pos = alpha_pos;alpha = fitness; alpha_pos = wolves(i, :);elseif fitness < betadelta = beta; delta_pos = beta_pos;beta = fitness; beta_pos = wolves(i, :);elseif fitness < deltadelta = fitness; delta_pos = wolves(i, :);endend% Update positionsa = 2 - iter * (2 / max_iter);for i = 1:n_wolvesfor j = 1:dimA1 = 2 * a * rand() - a; C1 = 2 * rand();D_alpha = abs(C1 * alpha_pos(j) - wolves(i, j));X1 = alpha_pos(j) - A1 * D_alpha;A2 = 2 * a * rand() - a; C2 = 2 * rand();D_beta = abs(C2 * beta_pos(j) - wolves(i, j));X2 = beta_pos(j) - A2 * D_beta;A3 = 2 * a * rand() - a; C3 = 2 * rand();D_delta = abs(C3 * delta_pos(j) - wolves(i, j));X3 = delta_pos(j) - A3 * D_delta;wolves(i, j) = (X1 + X2 + X3) / 3;endendendbest_params = alpha_pos;
endfunction fitness = evaluate_cnn(params, train_data, train_labels, val_data, val_labels)% Extract parameterslearning_rate = params(1);num_conv_layers = round(params(2));% Create CNNlayers = [imageInputLayer([28 28 1]);];for i = 1:num_conv_layerslayers = [layers;convolution2dLayer(3, 8 * i, 'Padding', 'same');batchNormalizationLayer();reluLayer();maxPooling2dLayer(2, 'Stride', 2);];endlayers = [layers;fullyConnectedLayer(10); % The output size should match the number of classes (10 for MNIST)softmaxLayer();classificationLayer()];% Training optionsoptions = trainingOptions('sgdm', ...'InitialLearnRate', learning_rate, ...'MaxEpochs', 10, ...'MiniBatchSize', 64, ...'Shuffle', 'every-epoch', ...'ValidationData', {val_data, val_labels}, ...'ValidationFrequency', 30, ...'Verbose', false, ...'Plots', 'training-progress');% Train the networknet = trainNetwork(train_data, train_labels, layers, options);% Evaluate the networkpredicted_labels = classify(net, val_data);accuracy = sum(predicted_labels == val_labels) / numel(val_labels);% Fitness is defined as 1 - accuracy to minimize the fitnessfitness = 1 - accuracy;
end

load_dataset.m

function [train_data, train_labels, val_data, val_labels] = load_dataset()% 加载MNIST数据集作为示例% 这里假设数据已经预处理为[28 28 1]大小的灰度图像% 你可以使用MATLAB提供的内置函数加载MNIST数据集[XTrain, YTrain] = digitTrain4DArrayData;[XValidation, YValidation] = digitTest4DArrayData;% 转换标签格式train_data = XTrain;train_labels = YTrain;val_data = XValidation;val_labels = YValidation;
end

main.m

% main.m% 加载数据
[train_data, train_labels, val_data, val_labels] = load_dataset();% 设置GWO参数
max_iter = 20;
n_wolves = 10;% 运行GWO优化
best_params = gwo_optimize_cnn(train_data, train_labels, val_data, val_labels, max_iter, n_wolves);% 显示最佳参数
disp('最佳参数:');
disp(['学习率: ', num2str(best_params(1))]);
disp(['卷积层数: ', num2str(round(best_params(2)))]);

在命令行窗口使用cd命令进入刚创建的文件夹,然后执行 run(‘main.m’)

说明

GWO核心算法:通过不断迭代更新狼群的位置,模拟灰狼围捕猎物的行为,最终找到最优解。
CNN架构定义与训练:根据GWO优化的参数(如学习率、卷积层数、全连接层数),定义CNN的架构并进行训练。
适应度计算:在每次迭代中,通过计算验证集上的准确率,评估当前参数的优劣,并更新狼群位置。

效果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/340961.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计hadoop+spark+hive知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习

新余学院本科毕业设计(论文)开题报告 学 号 202253025 学生姓名 毛维星 届 别 24届 专 业 数据科学与大数据技术 指导教师 姓名及职称 潘诚 研究生 毕业设计 (论文)题目 基于HadoopSpark的音乐数据仓库的设计与实现 开 题 报 告 内 容 选题的依据…

使用Python操作Redis

大家好&#xff0c;在当今的互联网时代&#xff0c;随着数据量和用户量的爆发式增长&#xff0c;对于数据存储和处理的需求也日益增加。Redis作为一种高性能的键值存储数据库&#xff0c;以其快速的读写速度、丰富的数据结构支持和灵活的应用场景而备受青睐。本文将介绍Redis数…

加密经济浪潮:探索Web3对金融体系的颠覆

随着区块链技术的快速发展&#xff0c;加密经济正在成为全球金融领域的一股新的浪潮。而Web3作为下一代互联网的代表&#xff0c;以其去中心化、可编程的特性&#xff0c;正深刻影响着传统金融体系的格局和运作方式。本文将深入探讨加密经济对金融体系的颠覆&#xff0c;探索We…

C++数组实现推箱子游戏

前言 我是三天打鱼两天晒网的闲人,今天跟着课程视频学习c的数组的运用. 准备好游戏用到的图片资源 代码逻辑实现 #include<iostream> #include<graphics.h> #include<string> #include<conio.h>using namespace std;//设置画布大小 #define SCREEN…

kafka-守护启动

文章目录 1、kafka守护启动1.1、先启动zookeeper1.1.1、查看 zookeeper-server-start.sh 的地址1.1.2、查看 zookeeper.properties 的地址 1.2、查看 jps -l1.3、再启动kafka1.3.1、查看 kafka-server-start.sh 地址1.3.2、查看 server.properties 地址 1.4、再次查看 jps -l 1…

【python】OpenCV—Cartoonify and Portray

参考来自 使用PythonOpenCV将照片变成卡通照片 文章目录 1 卡通化codecv2.medianBlurcv2.adaptiveThresholdcv2.kmeanscv2.bilateralFilter 2 肖像画cv2.divide 1 卡通化 code import cv2 import numpy as npdef edge_mask(img, line_size, blur_value):gray cv2.cvtColor(…

代码随想录算法训练营第二十八天|93.复原IP地址 ,78.子集 ,90.子集II

93. 复原 IP 地址 - 力扣&#xff08;LeetCode&#xff09; class Solution {ArrayList<String> results new ArrayList<>();public List<String> restoreIpAddresses(String s) {if(s.length() > 12){return new ArrayList<>();}char[] ipChars …

OBS+nginx+nginx-http-flv-module实现阿里云的推流和拉流

背景&#xff1a;需要将球机视频推送到阿里云nginx&#xff0c;使用网页和移动端进行播放&#xff0c;以前视频格式为RTMP&#xff0c;但是在网页上面播放RTMP格式需要安装flash插件&#xff0c;chrome浏览器不给安装&#xff0c;调研后发现可以使用nginx的模块nginx-http-flv-…

MySQL之查询性能优化(四)

查询性能优化 MySQL客户端/服务器通信协议 一般来说&#xff0c;不需要去理解MySQL通信协议的内部实现细节&#xff0c;只需要大致理解通信协议是如何工作的。MySQL客户端和服务器之间的通信协议是"半双工"的&#xff0c;这意味着&#xff0c;在任何一个时刻&#…

9.抽象类和接口

抽象类 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类 比如&#xff1a; 我…

Vue进阶之Vue无代码可视化项目(二)

Vue无代码可视化项目 项目初始化路由子路由错误示范正确示范App.vuerouter/index.tsAboutView.vueAboutAboutview.vuerouter/index.ts项目路由router/index.tsApp.vueActionsView.vueDataSourceView.vueLayoutView.vue路由样式App.vue进一步的App.vue项目初始化 路由 router i…

高精度滚珠丝杆在自动化生产中的关键因素!

如今&#xff0c;自动化技术正以前所未有的速度改变着人们的生活和工作方式&#xff0c;特别是在高精度精密设备的制造与应用领域&#xff0c;提高生产效率和优化生产流程正变得越来越重要。在自动化生产中&#xff0c;滚珠丝杆的优化应用对于提高生产效率、保证产品质量至关重…

k8s Pods漂移时间配置

默认为300秒 apiVersion: apps/v1 kind: Deployment metadata:name: my-test spec:replicas: 1selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80tolerations:- key: &…

面试二十六、c++语言级别的多线程编程

一、 多线程编程 ​​​​​ 这里的c语言级别的多线程和linux的有一定的区别&#xff0c;c语言级别提供的多线程比较严格&#xff0c;如果主线程结束了&#xff0c;但是子线程没有结束&#xff0c;进程就会异常终止&#xff0c;而linux不会&#xff0c;会继续执行。 二、模拟卖…

LLama学习记录

学习前&#xff1a; 五大问题&#xff1a; 为什么SwiGLU激活函数能够提升模型性能&#xff1f;RoPE位置编码是什么&#xff1f;怎么用的&#xff1f;还有哪些位置编码方式&#xff1f;GQA&#xff08;Grouped-Query Attention, GQA&#xff09;分组查询注意力机制是什么&…

FL Studio21.2.8中文版水果音乐制作的革新之旅!

在数字化浪潮的推动下&#xff0c;音乐制作领域经历了翻天覆地的变化。从最初的模拟技术到如今的全数字化处理&#xff0c;音乐制作的门槛被大幅降低&#xff0c;越来越多的音乐爱好者和专业人士开始尝试自行创作和编辑音乐。在这个过程中&#xff0c;各种专业音乐制作软件成为…

CVE-2022-22947

漏洞描述 Spring Cloud Gateway 远程代码执行漏洞&#xff08;CVE-2022-22947&#xff09;发生在Spring Cloud Gateway应用程序的Actuator端点&#xff0c;其在启用、公开和不安全的情况下容易受到代码注入的攻击。攻击者可通过该漏洞恶意创建允许在远程主机上执行任意远程执行…

第二十五章新增H5基础(以及视频~兼容)

1.HTML5中新增布局标签 HTML5新增了页眉&#xff0c;页脚&#xff0c;内容块等文档结构相关标签&#xff0c;可以使文档结构更加清晰明了。 1.新增的结构标签 1、<header>标签 定义文档或者文档中内容块的页眉。通常可以包含整个页面或一个内容区域的标题&#xff0c…

UI案例——登陆系统

UI的登陆界面实例 在学习了UILabel&#xff0c;UIButton&#xff0c;UIView&#xff0c;UITextField的内容之后&#xff0c;我们就可以写一个简单的登陆界面 我们可以通过UILabel来编写我们显示在登陆界面上的文字比方说下面这两行字就是通过UILabel去实现的。 下面给出一下实现…

直播美颜插件详解:美颜SDK的技术原理

美颜SDK作为实现美颜功能的核心技术&#xff0c;已被广泛应用于各种直播和短视频应用中。那么&#xff0c;美颜SDK究竟是如何工作的&#xff1f;它背后的技术原理又是什么&#xff1f;本文将对直播美颜插件及其技术原理进行详解。 一、美颜SDK的概述 美颜SDK包含了各种图像处…