GWO灰狼优化算法以及Matlab代码

文章详细介绍了灰狼优化算法(GWO)的基本原理,包括种群结构、位置更新规则以及算法流程。同时,提供了一个使用MATLAB编写的GWO主函数示例,该函数包含了适应度函数的计算,并对六个不同的测试问题进行了优化。通过对个体位置的迭代更新,算法逐步寻找最佳解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


GWO灰狼算法原理

灰狼算法:种群个体的位置更新主要是跟随alpha、beta、delta三只头狼的所在位置进行迭代更新。
灰狼种群结构:
在这里插入图片描述

进化更新

Xp为猎物的位置,A和C属于系数向量,a是随迭代过程线性减少的数值从2→0
在这里插入图片描述
在这里插入图片描述

位置更新(紧随3只头狼)

X(t+1)为狼个体紧随头狼更新后的位置。
在这里插入图片描述

GWO灰狼算法流程图

在这里插入图片描述

GWO优化算法matlab代码

main函数

close all;
clear all;
clc;

% N种群大小
% Dim个体维度
% T最大迭代次数
% ub上界
% lb下界
% X_prey最好的个体
% G_best存储每次迭代后的最好个体的适应度值

N=300;
Dim=30;
T=500;
ub=30;
lb=-30;
[X_prey,G_best]=GWO(Dim,ub,lb,N,T);
figure,
plot(G_best,'Color','blue');
xlim([1,500]);

适应度函数

function my_fitness=my_function(X)
%F1测试问题[-100,100] min=0
% o=sum(X.^2);
% my_fitness=o;

%F2测试问题[-10,10] min=0;
% o=sum(abs(X))+prod(abs(X));
% my_fitness=o;


%F3测试问题——结果极差 min=0
% dim=size(X,2);
% o=0;
% for i=1:dim
%     o=o+sum(X(1:i))^2;
% end
% my_fitness=o;

%F4测试问题——结果极差[-100,100] min=0
% o=max(abs(X));
% my_fitness=o;

%F5测试问题[-30,30] min=0
% dim=size(X,2);
% my_fitness=sum(100*(X(2:dim)-(X(1:dim-1).^2)).^2+(X(1:dim-1)-1).^2);

%F6测试问题[-100,100] min=0
o=sum(abs((X+.5)).^2);
my_fitness=o;
end

GWO主体代码

function [X_prey,G_best]=GWO(Dim,ub,lb,N,T)
%% 初始化种群
Pop=zeros(N,Dim);
for i=1:N
    for j=1:Dim
    Pop(i,j)=lb+rand().*(ub-lb);
    end
end
X_prey=zeros(T,Dim);
%% 初始化
% 计算所有个体的适应度
for i=1:N
    fitness(i)=my_function(Pop(i));
end
    % 种群进行分等级排序
    [sort_fitness,sort_index]=sort(fitness);
    % 更新alpha、beta、delta狼个体
    X_alpha=Pop(sort_index(1),:);
    X_beta=Pop(sort_index(2),:);
    X_delta=Pop(sort_index(3),:); 
%% 进化操作
for t=1:T
    a=2-t*(2/T);
    for i=1:N
        for j=1:Dim
            % 跟随alpha、beta、delta
            r1=rand();
            r2=rand();
            A1=2.*a.*r1-a;
            C1=2.*r2;
            D_alpha=abs(C1.*X_alpha(j)-Pop(i,j));
            X_one(i,j)=X_alpha(j)-A1.*D_alpha;
            
            r1=rand();
            r2=rand();
            A2=2.*a.*r1-a;
            C2=2.*r2;
            D_beta=abs(C2.*X_beta(j)-Pop(i,j));
            X_two(i,j)=X_delta(j)-A2.*D_beta;

            r1=rand();
            r2=rand();
            A3=2.*a.*r1-a;
            C3=2.*r2;
            D_delta=abs(C3.*X_delta(j)-Pop(i,j));
            X_three(i,j)=X_delta(j)-A3.*D_delta;

            % 跟随3只头狼,新的个体位置
            X_new(i,j)=(X_one(i,j)+X_two(i,j)+X_three(i,j))./3;
        end
    end
    % 计算所有个体的适应度值
    for i=1:N
        Flag4Up=X_new(i,:)>ub;
        Flag4Lp=X_new(i,:)<lb;
        X_new(i,:)=(X_new(i,:).*(~(Flag4Up+Flag4Lp)))+Flag4Up.*ub+Flag4Lp.*lb;%修正
        y=my_function(X_new(i,:));
        if y<my_function(Pop(i,:))
            fitness(i)=y;
            Pop(i,:)=X_new(i,:);%替换个体
        end
    end   
    % 种群进行分等级排序
    [sort_fitness,sort_index]=sort(fitness);
    % 更新alpha、beta、delta狼个体
    X_alpha=Pop(sort_index(1),:);
    X_beta=Pop(sort_index(2),:);
    X_delta=Pop(sort_index(3),:);
    X_prey(t,:)=X_alpha;
    G_best(t)=my_function(X_alpha);%每次迭代最好的个体的适应度值
end
end

测试结果F1~ F6测试问题

F1
在这里插入图片描述
F2
在这里插入图片描述
F3
在这里插入图片描述
F4
在这里插入图片描述
F5
在这里插入图片描述
F6
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JiAngTxone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值