金鹰优化算法,附MATLAB代码,直接复制

金鹰优化算法(golden eagle optimizer, GEO)是于2020年提出的新型智能优化算法,该算法建立于金鹰个体 捕食过程中的巡航和攻击行为之上,通过平衡两者关系,帮助函数寻找最优值,已经在许多方面得到了应用。

关于金鹰算法的原理本篇文章就不再细讲,作者采用金鹰算法在CEC2005函数上进行测试,结果如下:

a9e9d0c412473d038a7ac7d7ca629a7d.png

2db2e3b81c02f3472963f8b685502fd9.png

918f70d7287c243138eb9eb0b70f2534.png

1ed6c37420be9b24bc4bed1d6f60e52f.png

金鹰算法的核心代码如下:

function [x,fval,ConvergenceCurve] = GEO (fun,nvars,lb,ub,options)
%% initialization
PopulationSize = options.PopulationSize;
MaxIterations = options.MaxIterations;
ConvergenceCurve  = zeros (1, MaxIterations);
if length(lb) ~= (nvars)
    lb=lb.*ones(1,nvars);
    ub=ub.*ones(1,nvars);
end
x = lb + rand (PopulationSize,nvars) .* (ub-lb);
for i = 1:size(x,1)
    FitnessScores(i,:) = fun (x(i,:));
end
% solver-specific initialization
FlockMemoryF = FitnessScores;
FlockMemoryX = x;
AttackPropensity = linspace (options.AttackPropensity(1), options.AttackPropensity(2), MaxIterations);
CruisePropensity = linspace (options.CruisePropensity(1), options.CruisePropensity(2), MaxIterations);
%% main loop
for CurrentIteration = 1 : MaxIterations
  % prey selection (one-to-one mapping)
  DestinationEagle = randperm (PopulationSize)';


  % calculate AttackVectorInitial (Eq. 1 in paper)
  AttackVectorInitial = FlockMemoryX (DestinationEagle,:) - x;


  % calculate Radius
  Radius = VecNorm (AttackVectorInitial, 2, 2);


  % determine converged and unconverged eagles
  ConvergedEagles = sum (Radius,2) == 0;
  UnconvergedEagles = ~ ConvergedEagles;


  % initialize CruiseVectorInitial
  CruiseVectorInitial = 2 .* rand (PopulationSize, nvars) - 1; % [-1,1]


  % correct vectors for converged eagles
  AttackVectorInitial (ConvergedEagles, :) = 0;
  CruiseVectorInitial (ConvergedEagles, :) = 0;


  % determine constrained and free variables
  for i1 = 1 : PopulationSize
    if UnconvergedEagles (i1)
      vConstrained = false ([1, nvars]); % mask
      idx = datasample (find(AttackVectorInitial(i1,:)), 1, 2);
      vConstrained (idx) = 1;
      vFree = ~vConstrained;
      CruiseVectorInitial (i1,idx) = - sum(AttackVectorInitial(i1,vFree).*CruiseVectorInitial(i1,vFree),2) ./ (AttackVectorInitial(i1,vConstrained)); % (Eq. 4 in paper)
    end
  end


  % calculate unit vectors
  AttackVectorUnit = AttackVectorInitial ./ VecNorm (AttackVectorInitial, 2, 2);
  CruiseVectorUnit = CruiseVectorInitial ./ VecNorm (CruiseVectorInitial, 2, 2);


  % correct vectors for converged eagles
  AttackVectorUnit(ConvergedEagles,:) = 0;
  CruiseVectorUnit(ConvergedEagles,:) = 0;


  % calculate movement vectors
  AttackVector = rand (PopulationSize, 1) .* AttackPropensity(CurrentIteration) .* Radius .* AttackVectorUnit; % (first term of Eq. 6 in paper)
  CruiseVector = rand (PopulationSize, 1) .* CruisePropensity(CurrentIteration) .* Radius .* CruiseVectorUnit; % (second term of Eq. 6 in paper)
  StepVector = AttackVector + CruiseVector;


  % calculate new x
  x = x + StepVector;


  % enforce bounds
  lbExtended = repmat (lb,[PopulationSize,1]);
  ubExtended = repmat (ub,[PopulationSize,1]);


  lbViolated = x < lbExtended;
  ubViolated = x > ubExtended;


  x (lbViolated) = lbExtended (lbViolated);
  x (ubViolated) = ubExtended (ubViolated);


  % calculate fitness
    for i = 1:size(x,1)
        FitnessScores(i,:) = fun (x(i,:));
    end


  % update memory
  UpdateMask = FitnessScores < FlockMemoryF;
  FlockMemoryF (UpdateMask) = FitnessScores (UpdateMask);
  FlockMemoryX (UpdateMask,:) = x (UpdateMask,:);


  % update convergence curve
  ConvergenceCurve (CurrentIteration) = min (FlockMemoryF);


end


%% return values


[fval, fvalIndex] = min (FlockMemoryF);
x = FlockMemoryX (fvalIndex, :);


fprintf ('Best solution obtained by GEO: %s\n', num2str(x,'%e  '));
fprintf ('Best objective function value obtained by GEO: %e \n', fval);

需要的同学直接粘贴用于自己的实际问题即可。下期内容会对金鹰算法进行改进,改进方法为嵌入莱维飞行和混沌映射,敬请关注。

后台回复关键词:TGDM1209,获取完整代码。

参考文献:

Mohammadi-Balani, A., Dehghan Nayeri, M., Azar, A., Taghizadeh-Yazdi, M., Golden Eagle Optimizer: A nature-inspired metaheuristic algorithm, Computers & Industrial Engineering (2020).

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
matlab 金鹰优化算法是一种基于启发式搜索方法的优化算法。该算法借鉴了金鹰捕食者在捕猎过程中的行为,通过模拟其行为特点,以期获得最佳解。 金鹰优化算法通过将问题的解空间划分为多个区域,每个区域分配一个金鹰个体。金鹰在每个迭代过程中以当前区域的最优解为目标,通过搜索和迁移行为来逐步优化解。 算法的核心概念是觅食行为和迁移行为。在觅食行为中,金鹰通过搜索周围的解空间来寻找更好的解,以提高当前解的质量。而在迁移行为中,金鹰根据解的质量和距离等因素,在各个区域之间进行迁移,以促进全局最优解的搜索。 金鹰优化算法的优点是具有较高的全局搜索能力和较强的局部优化能力。由于算法模拟了金鹰的行为特点,因此具有较好的收敛性和鲁棒性。 在matlab中,实现金鹰优化算法通常需要遵循以下步骤: 1. 定义问题的目标函数和约束条件。 2. 初始化金鹰的位置和速度等参数。 3. 在每次迭代中,根据觅食和迁移行为更新金鹰的位置和速度。 4. 根据更新后的位置和速度计算新的目标函数值,并更新全局最优解。 5. 判断是否达到停止条件,如果满足则输出最优解;否则转到步骤3继续迭代。 总之,matlab 金鹰优化算法是一种基于启发式搜索的优化算法,通过模拟金鹰的行为特点,以期获得最佳解。它具有较好的全局搜索和局部优化能力,并能在matlab中进行有效实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天吃饺子

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值