灰狼算法Matlab

该文章提供了一个使用灰狼算法(GWO)进行种群优化的MATLAB代码示例。代码中定义了种群大小、问题维度、变量上下界、适应度函数等参数,并通过迭代更新狼群位置来寻找最优解。适应度函数为求和平方误差,最终输出最优解的坐标和对应的适应度值。
摘要由CSDN通过智能技术生成

 
 
%pop——种群数量
%dim——问题维度
%ub——变量上界,[1,dim]矩阵
%lb——变量下界,[1,dim]矩阵
%fobj——适应度函数(指针)
%MaxIter——最大迭代次数
%Best_Pos——x的最佳值
%Best_Score——最优适应度值
clc;
clear all;
close all;
pop=50;
dim=2;
ub=[10,10];
lb=[-10,-10];
MaxIter=100;
fobj=@(x)fitness(x);%设置适应度函数
[Best_Pos,Best_Score,IterCurve]=GWO(pop,dim,ub,lb,fobj,MaxIter);
%…………………………………………绘图…………………………………………
figure(1);
plot(IterCurve,'r-','linewidth',2);
grid on;
title('灰狼迭代曲线');
xlabel('迭代次数');
ylabel('适应度值');
%…………………………………… 结果显示……………………………………
disp(['求解得到的x1,x2是:',num2str(Best_Pos(1)),' ',num2str(Best_Pos(2))]);
disp(['最优解对应的函数:',num2str(Best_Score)]);
 
 
%种群初始化函数
function x=initialization(pop,ub,lb,dim)
for i=1:pop
    for j=1:dim
        x(i,j)=(ub(j)-lb(j))*rand()+lb(j);
    end
end
end
%狼群越界调整函数
function x=BoundrayCheck(x,ub,lb,dim)
for i=1:size(x,1)
    for j=1:dim
        if x(i,j)>ub(j)
            x(i,j)=ub(j);
        end
        if x(i,j)<lb(j)
            x(i,j)=lb(j);
        end
    end
end
end
 
%适应度函数,可根据自身需要调整
function [Fitness]=fitness(x)
    Fitness=sum(x.^2);
end
 
 
%…………………………………………灰狼算法主体………………………………………
function [Best_Pos,Best_Score,IterCurve]=GWO(pop,dim,ub,lb,fobj,MaxIter)
Alpha_Pos=zeros(1,dim);%初始化Alpha狼群
Alpha_Score=inf;
Beta_Pos=zeros(1,dim);%初始化Beta狼群
Beta_Score=inf;
Delta_Pos=zeros(1,dim);%初始化化Delta狼群
Delta_Score=inf;
 
x=initialization(pop,ub,lb,dim);%初始化种群
Fitness=zeros(1,pop);%初始化适应度函数
for i=1:pop
    Fitness(i)=fobj(x(i,:));
end
[SortFitness,IndexSort]=sort(Fitness);
Alpha_Pos=x(IndexSort(1),:);
Alpha_Score=SortFitness(1);
Beta_Pos=x(IndexSort(2),:);
Beta_Score=SortFitness(2);
Delta_Pos=x(IndexSort(3),:);
Delta_Score=SortFitness(3);
Group_Best_Pos=Alpha_Pos;
Group_Best_Score=Alpha_Score;
for t=1:MaxIter
    a=2-t*((2)/MaxIter);%线性调整a的值
    for i=1:pop
        for j=1:dim
            %根据Alpha狼群更新位置X1
            r1=rand;
            r2=rand;
            A1=2*a*r1-a;%计算A1
            C1=2*r2;%计算C1
            D_Alpha=abs(C1*Alpha_Pos(j)-x(i,j));%计算种群中其它狼只与Alpha狼群的距离
            X1=Alpha_Pos(j)-A1*D_Alpha;%更新X1
            
            %根据Beta狼群更新位置X2
            r1=rand;
            r2=rand;
            A2=2*a*r1-a;%计算A2
            C2=2*r2;%计算C2
            D_Beta=abs(C2*Beta_Pos(j)-x(i,j));%计算种群中其它狼只与Beta狼群的距离
            X2=Beta_Pos(j)-A2*D_Beta;%更新X2
            
             %根据Delta狼群更新位置X3
            r1=rand;
            r2=rand;
            A3=2*a*r1-a;
            C3=2*r2;
            D_Delta=abs(C3*Delta_Pos(j)-x(i,j));%计算种群中其它狼只与BDelta狼群的距离
            X3=Delta_Pos(j)-A3*D_Delta;%更新X3
            
            x(i,j)=(X1+X2+X3)/3;%更新后的狼只位置
        end
    end
  x=BoundrayCheck(x,ub,lb,dim);%狼只越界调整
  for i=1:pop
      Fitness(i)=fobj(x(i,:));
      if Fitness(i)<Alpha_Score%替换Aplha狼
          Alpha_Score=Fitness(i);
          Alpha_Pos=x(i,:);
      end
      if Fitness(i)>Alpha_Score&&Fitness(i)<Beta_Score%替换Beta狼
          Beta_Score=Fitness(i);
          Beta_Pos=x(i,:);
      end
      if Fitness(i)>Alpha_Score&&Fitness(i)>Beta_Score&&Fitness(i)<Delta_Score%替换Delta狼
          Delta_Score=Fitness(i);
          Delta_Pos=x(i,:);
      end
  end
  Group_Best_Pos=Alpha_Pos;
  Group_Best_Score=Alpha_Score;
  IterCurve(t)=Group_Best_Score;
end
  Best_Pos=Group_Best_Pos;
  Best_Score=Group_Best_Score;
end

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
灰狼算法(Grey Wolf Optimizer)是一种启发式优化算法,由米尔达尔等人于2014年提出。该算法模拟了灰狼群体的捕食行为,将问题看作是猎物,优化过程看作是灰狼的捕食过程,通过模拟灰狼的个体行为和群体行为来寻找最优解。 以下是灰狼算法MATLAB 实现示例: ```matlab function [Best_score,Best_pos,GWO_cg_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj) % 初始化灰狼群体 Alpha_pos=zeros(1,dim); Alpha_score=inf; % 最优值初始化为无穷大 Beta_pos=zeros(1,dim); Beta_score=inf; Delta_pos=zeros(1,dim); Delta_score=inf; Positions=initialization(SearchAgents_no,dim,ub,lb); Convergence_curve=zeros(1,Max_iter); % 开始迭代 for iter=1:Max_iter for i=1:size(Positions,1) % 计算适应度 fitness=fobj(Positions(i,:)); % 更新 Alpha, Beta, and Delta if fitness<Alpha_score Alpha_score=fitness; % 更新 Alpha 的最优值 Alpha_pos=Positions(i,:); end if (fitness>Alpha_score && fitness<Beta_score) Beta_score=fitness; % 更新 Beta 的最优值 Beta_pos=Positions(i,:); end if (fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score) Delta_score=fitness; % 更新 Delta 的最优值 Delta_pos=Positions(i,:); end end % 更新 a 和 c 值 a=2-iter*((2)/Max_iter); % 线性减小 a 值 c=2*(iter/Max_iter); % 线性增加 c 值 % 更新灰狼位置 for i=1:size(Positions,1) for j=1:size(Positions,2) % 计算 D_alpha, D_beta, and D_delta D_alpha=abs(Alpha_pos(j)-Positions(i,j)); D_beta=abs(Beta_pos(j)-Positions(i,j)); D_delta=abs(Delta_pos(j)-Positions(i,j)); % 更新位置 Positions(i,j)=Alpha_pos(j)-a*D_alpha+... c*(rand*D_beta-D_delta); end end Convergence_curve(iter)=Alpha_score; end % 输出最优解和最优值 Best_pos=Alpha_pos; Best_score=Alpha_score; % 输出收敛曲线 GWO_cg_curve=Convergence_curve; end function Positions=initialization(SearchAgents_no,dim,ub,lb) % 初始化灰狼位置 Boundary_no= size(ub,2); % 边界数量 if Boundary_no==1 Positions=rand(SearchAgents_no,dim).*(ub-lb)+lb; end if Boundary_no>1 for i=1:dim ub_i=ub(i); lb_i=lb(i); Positions(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i; end end end ``` 其中,fobj 是要优化的目标函数,SearchAgents_no 是灰狼数量,Max_iter 是最大迭代次数,lb 和 ub 分别是变量下界和上界,dim 是变量维数。调用该函数即可得到最优解和最优值,以及收敛曲线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

优化大师傅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值