一种基于群体智能的求全局极小值优化算法——狼搜索算法(Matlab代码实现)

    目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

狼是分布最广的群居群猎动物。有明确的社会分工,它们团结协作为狼群的生存与发展承担着各自的责任。智能颇高,彼此之间通过气味、叫声沟通。

狼的社会分工有头狼、探狼和猛狼:

头狼: 将当前离猎物气味浓度最高(适应度最优)的狼作为头狼,起指挥狼群行动的作用,头领狼召唤其他狼向猎物靠近,具有指挥狼群行动的能力,在搜寻过程中头狼的角色是动态变化的。

探狼: 初始时,狼群会派出一部分狼作为探狼,在环境四周搜寻猎物。探狼在搜寻过程中如果发现猎物气味浓度更高,就作为头狼,呼唤其他的狼进行围捕行为。后期,比较不同的探狼猎物的适应度,选择适应度较高的作为头狼。

猛狼: 猛狼感应到头狼呼唤,就立刻向头狼位置奔袭,在奔袭的过程中,若是发现猎物的适应度更高,则立刻替代原来的头领狼,指挥其他狼行动。

狼群算法(WPA算法)是一种随机概率搜索算法,使其能够以较大的概率快速找到最优解;狼群算法还具有并行性,可以在同一时间从多个点出发进行搜索,点与点之间互不影响,从而提高算法的效率。将狼群算法应用于15个典型复杂函数优化问题,并同经典的粒子群算法、鱼群算法和遗传算法进行比较仿真结果表明,该算法具有较好的全局收敛性和计算鲁棒性,尤其适合高维、多峰的复杂函数求解。

在优化中,寻找全局极小值是至关重要的,同时避开局部极小值。一个好的优化需要在探索(逃离局部极小值)和开发(接近极小值)之间取得平衡。没有一种完美的优化算法可以找到全局最小值,所以我们在这里从数十亿年的进化中汲取经验,并试图模仿自然来得到基于群体智能的优化。

该算法模仿狼的群​体特征来寻找和捕获猎物​。

📚2 运行结果

演示中的狼狩猎路径:

狼最终位置,其中一头狼已经达到了全局最小值​:

主函数部分代码:

% simulation of wolf search algorithm
​
​
global Nw Ni step velocity Pa %xrange yrange
global Wstart % wolf positions
global W % wolf position history 
global Npa
global plotPath plotLive
Npa = 0; %number of mutation occured
​
t = 1; % corrent iteration
W(:,1,:)
 = Wstart; % wolves over time [dimentions, time, wolves]​
if plotLive
    figure(1)
; clf; % 
live moving figure with each iteration
    load('schafferF6PlotData')
;    contour(X,Y,xycosts);
    %axis([-xrange/2 xrange/2 -yrange/2 yrange/2]);
    axis manual;
    hold on;
    o = scatter(0,0,'o');
    p = scatter(W(1,1,:), W(2,1,:),'x','k');
    set(1,'visible','on');
end
​
for (t=1:Ni)
    % do not save history, if no need to plot path
    if ~plotPath
        time
 = t;        t = 1;
    end
            
    for wi=1:Nw
        tempPos = W(:,t,wi);
        
        % prey initiatively, newton method
        %tempPos = wsaNeuton
        
        % If a visible peer has better possition, move towards it
        tempPos = tempPos + wsaSupportPeer(W(:,t,:),wi);
        
        %random walk, towards better possition, pray initiatively
        tempPos = wsaRandImproveWalk(tempPos);
        
        % escape, when threat found
        if (rand<Pa)
            tempPos
 = tempPos + wsaEscape*velocity*step;            %disp('escaping');
            Npa = Npa+1;
        end
        
        if plotPath
            W(:,t+1,wi)
 = tempPos; % 
save history
        else W(:,1,wi)
 = tempPos; % 
override 
        end
        
    end
    
    if plotLive
        set(p,'visible','off')
;        p = scatter(W(1,t,:), W(2,t,:),'x','k');
        set(1,'visible','on');
    end
end
​
​

🎉3 参考文献

[1]郭非. 狼群算法在无人艇规划与搜索中的应用研究[D].哈尔滨工程大学,2020.

部分理论引用网络文献,若有侵权联系博主删除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值