【优化求解】基于灰狼算法求解多目标问题matlab代码

1 简介

灰狼群体具有严格的社会支配等级且其等级划分呈金字塔形式,在捕捉猎物时,灰狼是通过相交流共享的体制来模拟的。其他智能算法类似的是,每一个可能解都由每头灰狼的位置来对应。种群的发展需要不断地更新,为了选出 3 只头狼,种群内的狼将被逐一进行评价,在这个过程中,算法起到评价的作用。接下来前进的方向将由这 3只头狼的位置所决定。由于灰狼算法参数较少,收敛较快,所以广泛应用于众多领域,尤其是实际工程领域应用最广。在该算法中,狼群通过竞选选出α 狼作为头狼,就意味着 α 狼将处于金字塔顶端的位置,同时 α 狼群做的所有决定都将代表整个狼群,但这并非表示狼群是全部专制的,在某种程度上也有一定的民主,比如狼群中有时也会存在其他的狼。当有任务需要执行时,α 狼将发号施令,其余狼群只需配合执行即可,因此 α 狼也就当之无愧的成为了狼群中最主要的狼。当狼群需要交配时,只能选择在自己的群体中进行交配。值得一提的是,α 狼之所以成为最主要的狼,其原因并不在于 α狼是最强的,而在于它拥有其他狼所不具备的优越的组织管理的能力。在狼群中 β 狼的地位近乎于 α 狼,这一点可以从狼群执行的其他群体活动中看出,β 狼是第二决策者。 β 狼在活动中都需要听从α 狼的指挥,同时其他更低级别的狼群也要听从它的指挥。在灰狼群体中,位于第三等级是 δ 狼,在严格的等级制度中,δ 狼必须遵从 α 狼和 β 狼的命令,δ 狼不是最低一级,在它的下一级还存在着 ω 狼,ω 狼在整个群体中担任侦查和围捕猎物的责任,也是灰狼群体中等级最低的。虽然它们看起来无足轻重,但一旦失去它们这一群体,整个灰狼种群都将面临着基层缺失的危险,所以也可以看出它们是狼群的重要组成部分。

2 部分代码

%___________________________________________________________________%
% Multi-Objective Grey Wolf Optimizer (MOGWO)                     %
% Source codes demo version 1.0                                   %
                                        %


clear all
clc

drawing_flag = 1;

TestProblem='UF2';
nVar=10;

fobj = cec09(TestProblem);

xrange = xboundary(TestProblem, nVar);

% Lower bound and upper bound
lb=xrange(:,1)';
ub=xrange(:,2)';

VarSize=[1 nVar];

GreyWolves_num=100;
MaxIt=1000;  % Maximum Number of Iterations
Archive_size=100;   % Repository Size

alpha=0.1;  % Grid Inflation Parameter
nGrid=10;   % Number of Grids per each Dimension
beta=4; %=4;   % Leader Selection Pressure Parameter
gamma=2;    % Extra (to be deleted) Repository Member Selection Pressure

% Initialization

GreyWolves=CreateEmptyParticle(GreyWolves_num);


for i=1:GreyWolves_num
   GreyWolves(i).Velocity=0;
   GreyWolves(i).Position=zeros(1,nVar);
   for j=1:nVar
       GreyWolves(i).Position(1,j)=unifrnd(lb(j),ub(j),1);
   end
   GreyWolves(i).Cost=fobj(GreyWolves(i).Position')';
   GreyWolves(i).Best.Position=GreyWolves(i).Position;
   GreyWolves(i).Best.Cost=GreyWolves(i).Cost;
end

GreyWolves=DetermineDomination(GreyWolves);

Archive=GetNonDominatedParticles(GreyWolves);

Archive_costs=GetCosts(Archive);
G=CreateHypercubes(Archive_costs,nGrid,alpha);

for i=1:numel(Archive)
  [Archive(i).GridIndex Archive(i).GridSubIndex]=GetGridIndex(Archive(i),G);
end

% MOGWO main loop

for it=1:MaxIt
   a=2-it*((2)/MaxIt);
   for i=1:GreyWolves_num
       
       clear rep2
       clear rep3
       
       % Choose the alpha, beta, and delta grey wolves
       Delta=SelectLeader(Archive,beta);
       Beta=SelectLeader(Archive,beta);
       Alpha=SelectLeader(Archive,beta);
       
       % If there are less than three solutions in the least crowded
       % hypercube, the second least crowded hypercube is also found
       % to choose other leaders from.
       if size(Archive,1)>1
           counter=0;
           for newi=1:size(Archive,1)
               if sum(Delta.Position~=Archive(newi).Position)~=0
                   counter=counter+1;
                   rep2(counter,1)=Archive(newi);
               end
           end
           Beta=SelectLeader(rep2,beta);
       end
       
       % This scenario is the same if the second least crowded hypercube
       % has one solution, so the delta leader should be chosen from the
       % third least crowded hypercube.
       if size(Archive,1)>2
           counter=0;
           for newi=1:size(rep2,1)
               if sum(Beta.Position~=rep2(newi).Position)~=0
                   counter=counter+1;
                   rep3(counter,1)=rep2(newi);
               end
           end
           Alpha=SelectLeader(rep3,beta);
       end
       
       % Eq.(3.4) in the paper
       c=2.*rand(1, nVar);
       % Eq.(3.1) in the paper
       D=abs(c.*Delta.Position-GreyWolves(i).Position);
       % Eq.(3.3) in the paper
       A=2.*a.*rand(1, nVar)-a;
       % Eq.(3.8) in the paper
       X1=Delta.Position-A.*abs(D);
       
       
       % Eq.(3.4) in the paper
       c=2.*rand(1, nVar);
       % Eq.(3.1) in the paper
       D=abs(c.*Beta.Position-GreyWolves(i).Position);
       % Eq.(3.3) in the paper
       A=2.*a.*rand()-a;
       % Eq.(3.9) in the paper
       X2=Beta.Position-A.*abs(D);
       
       
       % Eq.(3.4) in the paper
       c=2.*rand(1, nVar);
       % Eq.(3.1) in the paper
       D=abs(c.*Alpha.Position-GreyWolves(i).Position);
       % Eq.(3.3) in the paper
       A=2.*a.*rand()-a;
       % Eq.(3.10) in the paper
       X3=Alpha.Position-A.*abs(D);
       
       % Eq.(3.11) in the paper
       GreyWolves(i).Position=(X1+X2+X3)./3;
       
       % Boundary checking
       GreyWolves(i).Position=min(max(GreyWolves(i).Position,lb),ub);
       
       GreyWolves(i).Cost=fobj(GreyWolves(i).Position')';
   end
   
   GreyWolves=DetermineDomination(GreyWolves);
   non_dominated_wolves=GetNonDominatedParticles(GreyWolves);
   
   Archive=[Archive
       non_dominated_wolves];
   
   Archive=DetermineDomination(Archive);
   Archive=GetNonDominatedParticles(Archive);
   
   for i=1:numel(Archive)
      [Archive(i).GridIndex Archive(i).GridSubIndex]=GetGridIndex(Archive(i),G);
   end
   
   if numel(Archive)>Archive_size
       EXTRA=numel(Archive)-Archive_size;
       Archive=DeleteFromRep(Archive,EXTRA,gamma);
       
       Archive_costs=GetCosts(Archive);
       G=CreateHypercubes(Archive_costs,nGrid,alpha);
       
   end
   
   disp(['In iteration ' num2str(it) ': Number of solutions in the archive = ' num2str(numel(Archive))]);
   save results
   
   % Results
   
   costs=GetCosts(GreyWolves);
   Archive_costs=GetCosts(Archive);
   
   if drawing_flag==1
       hold off
       plot(costs(1,:),costs(2,:),'k.');
       hold on
       plot(Archive_costs(1,:),Archive_costs(2,:),'rd');
       legend('Grey wolves','Non-dominated solutions');
       drawnow
   end
   
end


3 仿真结果

4 参考文献

[1]孟安波, and 林艺城. "一种基于多目标的改进灰狼优化算法.", CN107067121A. 2017.​

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab科研辅导帮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值