当前位置: 首页 > news >正文

CPO-BP+MOPSO,冠豪猪优化BP神经网络+多目标粒子群算法!(Matlab源码)

目录

      • 效果一览
      • 基本介绍
      • 程序设计
      • 参考资料

效果一览

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

基本介绍

1.CPO-BP+NSGA,冠豪猪优化BP神经网络+粒子群算法!(Matlab完整源码和数据),冠豪猪算法优化BP神经网络的权值和阈值,运行环境Matlab2020b及以上。
多目标优化是指在优化问题中同时考虑多个目标的优化过程。在多目标优化中,通常存在多个冲突的目标,即改善一个目标可能会导致另一个目标的恶化。因此,多目标优化的目标是找到一组解,这组解在多个目标下都是最优的,而不是仅仅优化单一目标。冠豪猪优化算法(Crested Porcupine Optimizer, CPO)是一种新型的元启发式算法,由Abdel-Basset等人于2024年提出。该算法模拟了冠豪猪的防御行为,包括视觉、声音、气味和物理攻击四种策略,用于解决复杂的优化问题。
2.先通过CPO-BP封装因变量(稳态下的效率、压缩机经济成本 )与自变量(转速、余隙容积全关、用户排气量、冷却水流量)代理模型,再通过MOPSO寻找极值(稳态下的效率极大;压缩机经济成本极小),并给出对应的转速、余隙容积全关、用户排气量、冷却水流量Pareto解集。

3.data为数据集,4个输入特征,2个输出变量,NSGA算法寻极值,求出极值时(max y1; min y2)的自变量x1,x2,x3,x4。

4.main1.m为CPO-BP神经网络主程序文件、main2.m为MOPSO多目标优化算法主程序文件,依次运行即可,其余为函数文件,无需运行。

5.命令窗口输出MAE、MAPE、MSE、RMSE等评价指标,输出预测对比图、误差分析图、多目标优化算法求解Pareto解集图,可在下载区获取数据和程序内容。

6.适合工艺参数优化、工程设计优化等最优特征组合领域。

代码功能概述
main1_CPOBPvBP.m
核心功能

使用冠豪猪优化算法(CPO)优化BP神经网络的初始权值和阈值。

训练优化后的CPO-BP神经网络,并与传统BP网络对比预测性能。

预测压缩机性能指标(效率、成本)并可视化结果。

算法步骤
a. 数据预处理

读取数据集(数据集.xlsx),划分训练集(300样本)和测试集。

输入特征(4列)和输出目标(2列)归一化到[0,1]区间。
b. BP网络构建

结构:输入层(4节点)、隐层(2*4+1=9节点,logsig)、输出层(2节点,purelin)。

训练算法:Levenberg-Marquardt(trainlm)。
c. CPO优化BP参数

优化目标:最小化网络预测误差。

优化变量:所有权值+阈值(维度=65)。
d. 训练与预测

用CPO优化后的参数初始化网络,训练100次。

预测测试集并反归一化得到实际值。
e. 对比实验

训练传统BP网络(相同结构),对比预测误差。
f. 结果分析

绘制真实值、预测值及误差对比图。

计算MAE、MSE、RMSE、MAPE等误差指标。

关键参数

CPO:种群大小=10,迭代次数=10,变量范围=[-3,3]。

BP:最大训练次数=1000,学习率=0.1,目标误差=0.00001。

模型原理

CPO算法:模拟冠豪猪防御行为(翻滚、逃离、跟随)的启发式算法,通过种群协作搜索全局最优解。

BP神经网络:前馈网络通过误差反向传播调整权值,CPO优化解决其易陷入局部最优的问题。

main2_MOPSO.m
核心功能

使用多目标粒子群算法(MOPSO)优化压缩机设计参数。

寻找同时最大化效率和最小化成本的帕累托最优解集。

算法步骤
a. 目标函数定义

效率目标:XL = CPOBP_slover_XL(x1,x2,x3,x4)(最大化,取负)。

成本目标:CB = CPOBP_slover_CB(x1,x2,x3,x4)(最小化)。
b. MOPSO参数设置

变量:转速、余隙容积、排气量、水流量(4维)。

范围:转速∈[510,720],余隙容积∈[0.125,1]等。
c. MOPSO运行

初始化粒子群(10个粒子),迭代50次。

更新粒子位置/速度,维护外部存档(100个帕累托解)。
d. 结果分析

绘制帕累托前沿(效率vs成本)。

计算Spacing指标评估解集分布均匀性。

输出最优解参数(如转速、余隙容积)。

关键参数

种群大小=10,存档大小=100,迭代次数=50。

变量范围:见步骤2b。

模型原理

粒子位置更新:v_i = wv_i + c1r1*(pbest_i - x_i) + c2r2(gbest - x_i)。

非支配排序筛选帕累托解,存档机制保留最优解集。

MOPSO算法:扩展粒子群算法(PSO)至多目标优化:

目标函数模型:基于main1训练的CPO-BP网络预测压缩机性能。

两段代码的联系
依赖关系

main2中的目标函数CPOBP_slover_XL/CB调用main1训练的CPO-BP模型预测压缩机性能。

main1提供优化后的神经网络,main2将其用于多目标优化。
整体流程
在这里插入图片描述

数据集

在这里插入图片描述

程序设计

  • 完整程序和数据获取方式:私信博主回复CPO-BP+MOPSO,冠豪猪优化BP神经网络+多目标粒子群算法!(Matlab完整源码和数据)
.rtcContent { padding: 30px; } .lineNode {font-size: 10pt; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; }
nVar = 4;                          % 优化变量个数(4个设计变量)
VarMin = [510,0.125,0.0118,2.7];   % 变量下限:[转速, 余隙容积, 用户排气量, 水流量]
VarMax = [720,1,0.044,3.9];        % 变量上限
name = 'MOPSO多目标寻优';           % 问题名称(用于结果展示)
dynamic = 0;                       % 动态优化标志(0表示静态优化)
numOfObj = 2;                      % 目标函数个数(2个目标:效率、成本)
%% 配置多目标问题结构体
MultiObj.nVar = nVar;              % 变量维度
MultiObj.var_min = VarMin;         % 变量下限
MultiObj.var_max = VarMax;         % 变量上限
MultiObj.fun = CostFunction;       % 目标函数句柄
MultiObj.dynamic = dynamic;        % 动态优化标志
MultiObj.numOfObj = numOfObj;      % 目标函数个数
MultiObj.name = name;              % 问题名称
MultiObjFnc = MultiObj.name;       % 用于标题显示的字符串
%% MOPSO算法参数设置
params.Np = 10;        % 种群大小(粒子数量)
params.Nr = 100;       % 外部存档大小(存储帕累托最优解的最大数量)
params.maxgen = 50;    % 最大迭代次数(代数较少,实际应用需增加)
%% 运行MOPSO算法
[REP, POS_fit] = MOPSO(params, MultiObj);  % 调用MOPSO函数,返回存档解集和粒子适应度params.C1 = 2;          % 个体学习因子:粒子向自身历史最优位置移动的权重params.C2 = 2;          % 社会学习因子:粒子向群体最优位置移动的权重params.ngrid = 20;      % 网格划分数量:用于存档解集的空间划分params.maxvel = 5;      % 最大速度百分比:速度限制为变量范围的5%params.u_mut = 0.5;     % 均匀变异比例:种群中部分粒子进行随机重置的比例%% 提取参数和问题定义Np      = params.Np;            % 种群大小(粒子数量)Nr      = params.Nr;            % 外部存档最大容量(帕累托解数量)maxgen  = params.maxgen;        % 最大迭代次数W       = params.W;             % 惯性权重C1      = params.C1;            % 个体学习因子C2      = params.C2;            % 社会学习因子ngrid   = params.ngrid;         % 网格划分数maxvel  = params.maxvel;        % 最大速度限制(百分比)u_mut   = params.u_mut;         % 均匀变异比例fun     = MultiObj.fun;         % 目标函数句柄(需最小化)nVar    = MultiObj.nVar;        % 变量维度(设计变量数量)var_min = MultiObj.var_min(:);  % 变量下限(列向量)var_max = MultiObj.var_max(:);  % 变量上限(列向量)%% --------------------- 种群初始化 ---------------------% 生成初始粒子位置:在变量范围内随机分布POS = repmat((var_max-var_min)', Np, 1) .* rand(Np, nVar) + repmat(var_min', Np, 1);VEL = zeros(Np, nVar);          % 初始速度设为0% 计算初始种群的适应度(目标函数值)for i = 1:NpPOS_fit(i,:) = fun(POS(i,:)); % 每个粒子的目标函数值存储为行向量end% 检查目标函数返回值是否与粒子数量一致(避免函数编写错误)if size(POS,1) ~= size(POS_fit,1)warning('目标函数返回的适应度数量与粒子数不匹配,请检查函数实现');end%% --------------------- 存档和个体历史最优初始化 ---------------------PBEST = POS;                    % 个体历史最优位置初始化为当前位置PBEST_fit = POS_fit;            % 个体历史最优适应度% 检查支配关系:标记被其他粒子支配的个体(1表示被支配,0表示非支配)DOMINATED = checkDomination(POS_fit);REP.pos = POS(~DOMINATED,:);    % 初始存档:存储所有非支配解REP.pos_fit = POS_fit(~DOMINATED,:); % 存档对应的适应度REP = updateGrid(REP, ngrid);   % 初始化网格划分(用于存档管理)% 计算实际最大速度:将百分比转换为变量范围的绝对数值maxvel = (var_max - var_min) .* maxvel ./ 100;gen = 1;%% --------------------- 可视化初始化 ---------------------h_fig = figure;                 % 创建图形窗口h_par = plot(POS_fit(:,1), POS_fit(:,2), 'or'); % 红色圆圈表示当前种群hold on;h_rep = plot(REP.pos_fit(:,1), REP.pos_fit(:,2), 'ok'); % 黑色圆圈表示存档解xlabel('f1'); ylabel('f2');     % 坐标轴标签(目标函数名称)title('MOPSO迭代过程');display(['初始代数 #0 - 存档大小: ' num2str(size(REP.pos,1))]);%% --------------------- 主循环 ---------------------stopCondition = false;          % 终止条件标志while ~stopCondition%% 选择领导者:基于网格的轮盘赌选择h = selectLeader(REP);      % 从存档中选择一个领导者索引%% 更新粒子速度和位置VEL = W .* VEL + ...                  % 惯性项C1 * rand(Np, nVar) .* (PBEST - POS) + ... % 个体历史最优引导C2 * rand(Np, nVar) .* (repmat(REP.pos(h,:), Np, 1) - POS); % 群体最优引导POS = POS + VEL;                       % 更新位置%% 变异操作:增加多样性POS = mutation(POS, gen, maxgen, Np, var_max, var_min, nVar, u_mut);%% 边界检查:确保位置和速度在允许范围内[POS, VEL] = checkBoundaries(POS, VEL, maxvel, var_max, var_min);%% 计算新种群的适应度for i = 1:NpPOS_fit(i,:) = fun(POS(i,:));end%% 更新存档REP = updateRepository(REP, POS, POS_fit, ngrid); % 合并新非支配解if size(REP.pos,1) > NrREP = deleteFromRepository(REP, size(REP.pos,1)-Nr, ngrid); % 删除多余解end%% 更新个体历史最优% 比较新位置与历史最优的支配关系pos_best = dominates(POS_fit, PBEST_fit); % 新位置是否优于历史最优best_pos = ~dominates(PBEST_fit, POS_fit); % 历史最优是否不支配新位置best_pos(rand(Np,1) >= 0.5) = 0;         % 随机保留部分历史最优(增加多样性)% 更新被新位置支配的历史最优if sum(pos_best) > 1PBEST_fit(pos_best,:) = POS_fit(pos_best,:);PBEST(pos_best,:) = POS(pos_best,:);end% 更新未被历史最优支配的新位置if sum(best_pos) > 1PBEST_fit(best_pos,:) = POS_fit(best_pos,:);PBEST(best_pos,:) = POS(best_pos,:);end%% --------------------- 可视化更新 ---------------------% 2D目标空间绘图if size(POS_fit,2) == 2figure(h_fig);delete(h_par); delete(h_rep); % 清除旧图形h_par = plot(POS_fit(:,1), POS_fit(:,2), 'or'); % 红色:当前种群hold on;h_rep = plot(REP.pos_fit(:,1), REP.pos_fit(:,2), 'ok'); % 黑色:存档解try % 调整坐标轴以匹配网格划分set(gca, 'xtick', REP.hypercube_limits(:,1)', 'ytick', REP.hypercube_limits(:,2)');axis([min(REP.hypercube_limits(:,1)), max(REP.hypercube_limits(:,1)), ...min(REP.hypercube_limits(:,2)), max(REP.hypercube_limits(:,2))]);endgrid on; drawnow; axis square;end% 3D目标空间绘图(若目标数为3)if size(POS_fit,2) == 3figure(h_fig);delete(h_par); delete(h_rep);h_par = plot3(POS_fit(:,1), POS_fit(:,2), POS_fit(:,3), 'or');hold on;h_rep = plot3(REP.pos_fit(:,1), REP.pos_fit(:,2), REP.pos_fit(:,3), 'ok');% 调整3D坐标轴tryset(gca, 'xtick', REP.hypercube_limits(:,1)', 'ytick', REP.hypercube_limits(:,2)', ...'ztick', REP.hypercube_limits(:,3)');axis([min(REP.hypercube_limits(:,1)), max(REP.hypercube_limits(:,1)), ...min(REP.hypercube_limits(:,2)), max(REP.hypercube_limits(:,2)), ...min(REP.hypercube_limits(:,3)), max(REP.hypercube_limits(:,3))]);endgrid on; xlabel('f1'); ylabel('f2'); zlabel('f3');drawnow; axis square;end%% 显示迭代信息display(['代数 #' num2str(gen) ' - 存档大小: ' num2str(size(REP.pos,1))]);%% 终止条件检查gen = gen + 1;if gen > maxgenstopCondition = true; % 达到最大迭代次数,终止循环endendhold off;

参考资料

GRU门控循环单元+NSGAII多目标优化算法,深度学习工艺参数优化+酷炫相关性气泡图!(Matlab完整源码和数据)
LSTM+NSGAII多目标优化算法,酷炫相关性气泡图!(Matlab完整源码和数据)
NRBO-CNN+NSGAII+熵权TOPSIS,附相关气泡图,Matlab代码!
深度学习工艺参数优化+酷炫相关性气泡图!CNN卷积神经网络+NSGAII多目标优化算法(Matlab完整源码)
工艺参数优化、工程设计优化!GRNN神经网络+NSGAII多目标优化算法(Matlab)

工艺参数优化、工程设计优化陪您跨年!RBF神经网络+NSGAII多目标优化算法(Matlab)
工艺参数优化、工程设计优化来袭!BP神经网络+NSGAII多目标优化算法(Matlab)

北大核心工艺参数优化!SAO-BP雪融算法优化BP神经网络+NSGAII多目标优化算法(Matlab)

工艺参数优化、工程设计优化上新!Elman循环神经网络+NSGAII多目标优化算法(Matlab)

强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!

相关文章:

  • 深入浅出Nacos:微服务架构中的服务发现与配置管理利器
  • 5.28 后端面经
  • 《深入解析UART协议及其硬件实现》-- 第二篇:UART硬件架构设计与FPGA实现
  • Golang分布式系统开发实践指南
  • MySQL问题:MySQL中主要的锁都有啥?
  • MySQL 默认的隔离级别解析
  • 工业控制核心引擎高性能MCU——MM32F5370
  • 贪心算法求解汽车加油问题
  • 【数据分析】Matplotlib+Pandas+Seaborn绘图
  • DDS通信中间件——DDS-TSN规范
  • zynq 级联多个ssd方案设计(ECAM BUG修改)
  • android-studio-2024.3.2.14如何用WIFI连接到手机(给数据线说 拜拜!)
  • AI任务相关解决方案2-基于WOA-CNN-BIGRU-Transformer模型解决光纤通信中的非线性问题
  • 植被监测新范式!Python驱动机器学习反演NDVI/LAI关键技术解析
  • 功能测试向量是个什么概念
  • 行业案例 | OPPO借助Azure AI Speech国际服务实现音频文件智能转录
  • 英语写作中“表达、表述”expression statement 的用法
  • dart常用语法详解/数组list/map数据/class类详解
  • 联软SDP+安渡:收敛暴露面 从生产网自动取数 安全高效
  • 伽罗华域(galois field)的乘法计算(异或法)
  • 唐山市做网站/seo搜索引擎优化怎么优化
  • 门户网站制作全包/深圳网站建设三把火科技
  • dreamweaver做的网站/seo品牌优化百度资源网站推广关键词排名
  • 做kegg通路富集的网站/公司网站制作要多少钱
  • 常熟网站开发/免费自助建站哪个最好
  • 政府网站集约化建设会/seo的五个步骤