function [Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)
%% 优化算法初始化
Alpha_pos = zeros(1, dim); % 初始化Alpha狼的位置
Alpha_score = inf; % 初始化Alpha狼的目标函数值,将其更改为-inf以解决最大化问题
Beta_pos = zeros(1, dim); % 初始化Beta狼的位置
Beta_score = inf; % 初始化Beta狼的目标函数值 ,将其更改为-inf以解决最大化问题
Delta_pos = zeros(1, dim); % 初始化Delta狼的位置
Delta_score = inf; % 初始化Delta狼的目标函数值,将其更改为-inf以解决最大化问题
%% 初始化搜索狼群的位置
Positions = initialization(SearchAgents_no, dim, ub, lb);
%% 用于记录迭代曲线
Convergence_curve = zeros(1, Max_iteration);
%% 循环计数器
iter = 0;
%% 优化算法主循环
while iter < Max_iteration % 对迭代次数循环
for i = 1 : size(Positions, 1) % 遍历每个狼
% 返回超出搜索空间边界的搜索狼群
% 若搜索位置超过了搜索空间,需要重新回到搜索空间
Flag4ub = Positions(i, :) > ub;
Flag4lb = Positions(i, :) < lb;
% 若狼的位置在最大值和最小值之间,则位置不需要调整,若超出最大值,最回到最大值边界
% 若超出最小值,最回答最小值边界
Positions(i, :) = (Positions(i, :) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;
% 计算适应度函数值
% Positions(i, 2) = round(Positions(i, 2));
% fitness = fical(Positions(i, :));
fitness = fobj(Positions(i, :));
% 更新 Alpha, Beta, Delta
if fitness < Alpha_score % 如果目标函数值小于Alpha狼的目标函数值
Alpha_score = fitness; % 则将Alpha狼的目标函数值更新为最优目标函数值
Alpha_pos = Positions(i, :); % 同时将Alpha狼的位置更新为最优位置
end
if fitness > Alpha_score && fitness < Beta_score % 如果目标函数值介于于Alpha狼和Beta狼的目标函数值之间
Beta_score = fitness; % 则将Beta狼的目标函数值更新为最优目标函数值
Beta_pos = Positions(i, :); % 同时更新Beta狼的位置
end
if fitness > Alpha_score && fitness > Beta_score && fitness < Delta_score % 如果目标函数值介于于Beta狼和Delta狼的目标函数值之间
Delta_score = fitness; % 则将Delta狼的目标函数值更新为最优目标函数值
Delta_pos = Positions(i, :); % 同时更新Delta狼的位置
end
end
% 线性权重递减
wa = 2 - iter * ((2) / Max_iteration);
% 更新搜索狼群的位置
for i = 1 : size(Positions, 1) % 遍历每个狼
for j = 1 : size(Positions, 2) % 遍历每个维度
% 包围猎物,位置更新
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A1 = 2 * wa * r1 - wa; % 计算系数A,Equation (3.3)
C1 = 2 * r2; % 计算系数C,Equation (3.4)
% Alpha 位置更新
D_alpha = abs(C1 * Alpha_pos(j) - Positions(i, j)); % Equation (3.5)-part 1
X1 = Alpha_pos(j) - A1 * D_alpha; % Equation (3.6)-part 1
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A2 = 2 * wa * r1 - wa; % 计算系数A,Equation (3.3)
C2 = 2 *r2; % 计算系数C,Equation (3.4)
% Beta 位置更新
D_beta = abs(C2 * Beta_pos(j) - Positions(i, j)); % Equation (3.5)-part 2
X2 = Beta_pos(j) - A2 * D_beta; % Equation (3.6)-part 2
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A3 = 2 *wa * r1 - wa; % 计算系数A,Equation (3.3)
C3 = 2 *r2; % 计算系数C,Equation (3.4)
% Delta 位置更新
D_delta = abs(C3 * Delta_pos(j) - Positions(i, j)); % Equation (3.5)-part 3
X3 = Delta_pos(j) - A3 * D_delta; % Equation (3.5)-part 3
% 位置更新
Positions(i, j) = (X1 + X2 + X3) / 3; % Equation (3.7)
end
end
% 更新迭代器
iter = iter + 1;
Convergence_curve(iter) = Alpha_score;
disp(['第',num2str(iter),'次迭代'])
disp(['current iteration is: ',num2str(iter), ', best fitness is: ', num2str(Alpha_score)]);
end
%% 记录最佳参数
% best_lr = Alpha_pos(1, 1);
% best_hd = Alpha_pos(1, 2);
% best_l2 = Alpha_pos(1, 3);
end
灰狼算法(GWO)优化BP神经网络分类预测,GWO-BP分类预测,多特征输入模型 多特征输入单输出的二分类及多分类模型 程序
需积分: 0 51 浏览量
更新于2023-09-15
3
收藏 75KB ZIP 举报
灰狼算法(GWO)优化BP神经网络分类预测,GWO-BP分类预测,多特征输入模型。
多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。
程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩阵图。
智能算法及其模型预测
- 粉丝: 2537
- 资源: 871
最新资源
- 博途S7-1200主站与S7-200从站实现RS485通讯程序 S7-200可以当作一个仪表
- C#、C++分别开发的OPC DA CLIENT软件. 1、枚举服务器名称; 2、连接服务器以后枚举出TAG; 3、根据TAG名称自动读取服务器数据; 4、图片内有OPC SERVER和CLIENT实
- python-workspace.zip.005
- 龙门上下料样本程序,四轴 用台达AS228T和台达触摸屏编写 注意软件是用台达新款软件ISPSOFT ,借鉴价值高,程序有注释
- 一款window下的串口监视抓包工具
- 欧姆龙CP1H与3台力士乐VFC-x610变频器通讯程序 功能:原创程序,可直接用于现场程序 欧姆龙CP1H的CIF11通讯板,实现对3台力士乐VFC-x610变频器 设定频率,控制正反转,读取实际
- dp111113333
- CV-密集人群图像数据集(5800张图片).rar
- 福特汽车主观评价规范,性能开发参考,英文原版直译,评价条目、规则描述非常细致 包含平顺舒适性,转向,操稳,NVH,制动,加速感,驾驶性等等性能,并详细描述了评价的准备工作 评价条目细分至第四级,共
- 三菱FX3S两轴标准程序,XZ两轴,包含轴点动,回零,相对与绝对定位,只要弄明白这个程序,就可以非常了解整个项目的程序如何去编写,从哪里开始下手,可提供程序问题解答,程序流程清晰明了,注释完整
- MATLAB代码:考虑P2G与碳捕集机组的多能微网低碳经济调度 关键词:碳交易 阶梯碳交易 碳捕集 多能微网 低碳调度 仿真平台:MATLAB+yalmip+cplex 主要内容:代码主要做的是一个
- 本程序采用matlab编写,主要是实现电流注入型牛拉法 除此之外,本人还编写了很多种关于潮流计算的程序,主要有牛拉法,前推回代法,以还有相和三相潮流计算程序
- 智能门锁架构图,供大家参考
- 三菱FX3U六轴标准程序,程序包含本体3轴控制,扩展3个1PG定位模块,一共六轴 程序有轴点动控制,回零控制,相对定位,绝对定位 另有气缸数个,一个大是DD马达控制的转盘,整个是转盘多工位流水作业
- 批量登录到远程Linux服务器检查服务器时间差的shell
- MATLAB电动车七自由度整车模型 MATLAB Simulink电动车转弯制动abs模型asr转弯制动防抱死abs模型+模糊控制算法+七自由度整车模型+纵向运动+侧向运动+横摆运动+四轮魔术公式+四