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

**长文预警**

介绍

在自然界中,狼群的社会结构和捕猎策略展现了高度的智能和协调性,灰狼优化算法(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 population
    dim = 2; % Example: learning rate, number of conv layers
    lb = [1e-4, 1]; % Lower bounds for the parameters
    ub = [1e-2, 5]; % Upper bounds for the parameters
    
    wolves = 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_iter
        for i = 1:n_wolves
            % Calculate fitness for each wolf
            fitness = evaluate_cnn(wolves(i, :), train_data, train_labels, val_data, val_labels);
            
            % Update alpha, beta, delta wolves
            if fitness < alpha
                delta = beta; delta_pos = beta_pos;
                beta = alpha; beta_pos = alpha_pos;
                alpha = fitness; alpha_pos = wolves(i, :);
            elseif fitness < beta
                delta = beta; delta_pos = beta_pos;
                beta = fitness; beta_pos = wolves(i, :);
            elseif fitness < delta
                delta = fitness; delta_pos = wolves(i, :);
            end
        end
        
        % Update positions
        a = 2 - iter * (2 / max_iter);
        for i = 1:n_wolves
            for j = 1:dim
                A1 = 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;
            end
        end
    end
    
    best_params = alpha_pos;
end

function fitness = evaluate_cnn(params, train_data, train_labels, val_data, val_labels)
    % Extract parameters
    learning_rate = params(1);
    num_conv_layers = round(params(2));
    
    % Create CNN
    layers = [
        imageInputLayer([28 28 1]);
        ];
    
    for i = 1:num_conv_layers
        layers = [layers;
            convolution2dLayer(3, 8 * i, 'Padding', 'same');
            batchNormalizationLayer();
            reluLayer();
            maxPooling2dLayer(2, 'Stride', 2);
            ];
    end
    
    layers = [layers;
        fullyConnectedLayer(10); % The output size should match the number of classes (10 for MNIST)
        softmaxLayer();
        classificationLayer()];
    
    % Training options
    options = 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 network
    net = trainNetwork(train_data, train_labels, layers, options);
    
    % Evaluate the network
    predicted_labels = classify(net, val_data);
    accuracy = sum(predicted_labels == val_labels) / numel(val_labels);
    
    % Fitness is defined as 1 - accuracy to minimize the fitness
    fitness = 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的架构并进行训练。
适应度计算:在每次迭代中,通过计算验证集上的准确率,评估当前参数的优劣,并更新狼群位置。

效果

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WLAN基础-WLAN安全

目录 一、引言二、WLAN安全威胁三、WLAN安全防御机制四、WLAN常用接入认证方式五、总结 一、引言 随着无线网络的广泛应用&#xff0c;WLAN&#xff08;无线局域网&#xff09;因其灵活性和便利性成为越来越多用户和企业首选的接入方式。然而&#xff0c;由于无线通信开放的传…

R语言探索与分析17-CPI的分析和研究

一、选题背景 CPI&#xff08;居民消费价格指数&#xff09;作为一个重要的宏观经济指标&#xff0c;扮演着评估通货膨胀和居民生活水平的关键角色。在湖北省这个经济活跃的地区&#xff0c;CPI的波动对于居民生活、企业经营以及政府宏观经济政策制定都具有重要的影响。因此&a…

ProtoSprite: Rapid 2D Art

✨ 概述 直接在场景视图中的场景上下文中快速创建、绘制和编辑精灵。以最小的摩擦和紧密的Unity集成快速制作2D艺术。 直接编辑PNG纹理文件,与其他软件广泛兼容。无需担心自定义文件格式或额外的组件。无缝集成到您的项目中,不会造成不必要的混乱。 增强您的二维艺术工作流程…

如何规避亚马逊测评的风险?

国外的真实刷手和服务商的账号风险主要是表现在以下几点&#xff1a; 1. 账号资源的重复利用&#xff0c;下单的产品上一秒高端品牌&#xff0c;下一秒地摊货&#xff0c;对账号的标签定位不清晰 2. 留Review的时间周期长 3. 账号的质量会参差不齐&#xff0c;有的上不了评价…

AI 正在攻克难题——赋予计算机嗅觉

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

python中如何使用密码字典

使用itertools循环迭代的模块来实现生成密码字典&#xff0c;用这个模块可以省不少事。 首先要调用itertools。 import itertools as its 然后将字典需要的元素&#xff08;或者说是关键字&#xff09;赋给word变量。 我们这里假设密码是纯数字&#xff0c;所以元素就是12345…

贷款行业新宠:短信群发营销的高效应用

在贷款行业的激烈竞争中&#xff0c;短信群发营销凭借其高效、精准的特性逐渐崭露头角&#xff0c;成为行业新宠。 一、个性化信息&#xff0c;直达目标客户 通过短信群发&#xff0c;贷款机构能够精准地向目标客户推送个性化的贷款产品推荐。基于客户的信用状况、贷款需求等…

嘉立创EDA隐藏铺铜

在设计PCB时&#xff0c;如果在铺铜后进行部分线路的修改、调试与检查&#xff0c;会比较困难。如果对铺铜进行隐藏后&#xff0c;可极大的方便观察与设计。 嘉立创EDA隐藏铺铜方法如下&#xff1a; 1、打开左侧的过滤选项&#xff0c;在轮廓对象下&#xff0c;关闭铺铜区域选…

LabVIEW储油罐监控系统

LabVIEW储油罐监控系统 介绍了基于LabVIEW的储油罐监控系统的设计与实施。系统通过集成传感器技术和虚拟仪器技术&#xff0c;实现对储油罐内液位和温度的实时监控&#xff0c;提高了油罐监管的数字化和智能化水平&#xff0c;有效增强了油库安全管理的能力。 项目背景 随着…

云原生下的数据协调艺术:etcd存储系统解析

目录 一、分布式存储简介 二、etcd介绍 三、etcd架构 四、etcd集成实践 一、分布式存储简介 随着云原生与容器化技术的兴起&#xff0c;分布式系统的复杂性大大增加。分布式系统面临一系列问题&#xff0c;比如部署复杂、响应时间慢、运维复杂等&#xff0c;其中最根本的问…

1790java网络学习平台Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java网络学习平台系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

17、Spring系列-SpringMVC-请求源码流程

前言 Spring官网的MVC模块介绍&#xff1a; Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就已包含在Spring框架中。正式名称“ Spring Web MVC”来自其源模块的名称&#xff08;spring-webmvc&#xff09;&#xff0c;但它通常被称为“ Spring MVC…

规则引擎-Easy rule

规则引擎-Easy rule 最近有几个项目中都出现了根据XX条件执行XX方法的业务&#xff0c;在动手之前脑中总会下意识的发现如果按照常规的去写代码&#xff0c;无论使用何种设计模式&#xff0c;都会出现不同程度上的代码冗余或大量if-else判断。 甚至说判断XX条件的代码和执行X…

ubuntu20.04中设置包含ros节点的文件自启动

若文件里包含了ros话题的发布和接收&#xff0c;那么设置自启动时&#xff0c;应该首先将roscore设置为自启动。 首先确保roscore有一个systemd服务文件。如果还没有&#xff0c;需要在/etc/systemd/system/下创建一个。例如&#xff0c;一个基本的roscore.service文件可能如下…

IO进程线程(六)进程

文章目录 一、进程状态&#xff08;二&#xff09;进程状态切换实例1. 实例1 二、进程的创建&#xff08;一&#xff09;原理&#xff08;二&#xff09;fork函数--创建进程1. 定义2. 不关注返回值3. 关注返回值 &#xff08;三&#xff09; 父子进程的执行顺序&#xff08;四&…

OCP 备份 OceanBase集群

注:OCP版本为4.2.1,OceanBase版本为 社区版4.2.1.0 手动备份 进行合并 在手动进行备份数据之前&#xff0c;建议进行一次OB集群合并(不影响业务的前提下)&#xff0c;关于合并的概念请参考OB官网。 点击进入要备份的OB集群 点击左侧工具栏中的 合并管理&#xff0c;在 基本信息…

【前端基础】CSS介绍|CSS选择器|常用CSS

目录 一、CSS介绍 1.1 什么是CSS 1.2 基本语法规范 1.3 引⼊⽅式 1.4 规范 &#x1f4a1;二、CSS选择器 1. 标签选择器 2. class选择器 3. id选择器 4. 复合选择器 5. 通配符选择器 三、常用CSS 3.1 color 3.2 font-size 3.3 border 3.4 width/height 3.5 padd…

安全生产新篇章:可燃气体报警器检验周期的国家标准解读

随着工业化进程的加快&#xff0c;安全生产成为了重中之重。 可燃气体报警器作为预防火灾和爆炸事故的重要设备&#xff0c;其准确性和可靠性直接关系到企业的生产安全和员工的生命财产安全。 因此&#xff0c;国家对可燃气体报警器的检验周期有着明确的规定&#xff0c;以确…

密塔AI:联网搜索工具,可以搜索科研文献

文章目录 简介功能探究 简介 作为联网搜索AI&#xff0c;肯定得有能力做个自我介绍&#xff0c;在搜索框中输入“密塔AI简介”&#xff0c;其处理过程如下&#xff0c;看来主打一个没有广告&#xff0c;直达结果。 回复如下 秘塔AI搜索(metaso.cn)于2024年初上线&#xff0c;它…

若依 ruoyi-vue element-ui el-cascader 级联选择器 选择任意一级选项,去掉单选按钮,选中点击后隐藏

Cascader 级联选择器 选择任意一级选项&#xff0c;去掉单选按钮。 这兄弟文章写的可以&#xff0c;查了一堆文章&#xff0c;基本搞完才发现。 官方的例子不支持选中后自动关闭&#xff0c;要点击旁边空白&#xff0c;并且单选框太小了。 <el-form-item label"所属地…