ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【无人机路径规划】基于狼群算法求解无人机三维路径规划matlab源码

2021-07-05 16:57:35  阅读:192  来源: 互联网

标签:猎物 位置 函数 人工 路径 狼群 源码 无人机 探狼


1、狼群算法中的狼种类分为以下几种:

头狼、探狼、猛狼。

2、猎物分配规则:论功行赏,先强后弱。

3、狼群算法的主体构成:探狼游走、头狼召唤、猛狼围攻3种智能行为,“胜者为王”的头狼角逐规则和“优胜劣汰”的狼群更新规则。

Step1:在解空间中随机初始化狼群的空间坐标,依据目标函数值的大小角逐出人工头狼。

Step2:探狼开始随机游走搜索猎物,若发现某个位置的目标函数值大于头狼的目标函数值,将更新头狼位置,同时头狼发出召唤行为;若未发现,探狼继续游走直到达到最大游走次数,头狼在原本的位置发出召唤行为。

Step3:听到头狼召唤的猛狼以较大的步长快速向头狼奔袭,若奔袭途中猛狼的目标函数值大于头狼的目标函数值,则将对头狼位置进行更新;否则,猛狼将继续奔袭直到进入围攻范围。

Step4:靠近头狼的猛狼将联合探狼对猎物(把头狼位置视为猎物)进行围捕,围捕过程中若其他人工狼的目标函数值大于头狼的目标函数值,则对头狼位置进行更新,直到捕获猎物。

Step5:淘汰狼群中目标函数值较小的人工狼,并在解空间中随机生成新的人工狼,实现狼群的更新。

Step6:最后判断头狼的目标函数值是否达到精度要求或算法是否达到最大迭代次数。

4、人工狼群算法的若干规则:

(1)头狼产生规则

         初始解空间中,具有最优目标函数值的人工狼即为头狼;在迭代过程中,将每次迭代后最优狼的目标函数值与前一代中头狼的值进行比较,若更优则对头狼位置进行更新,若此时存在多匹的情况,则随机选一匹成为头狼。头狼不执行3种智能行为,直接进入迭代,直到被其他更强的人工狼代替。

(2)游走行为

        除头狼外最佳的S_sum匹人工狼视为探狼,S_sum随机取[n/α+1,n/α]之间的整数,α为探狼比例因子。

        计算探狼i的目标函数值Y_{i},若Y_{i}大于头狼的目标函数值Y_{lead},则更新头狼,Y_{lead}=Y_{i},探狼i替代头狼发起召唤;若Y_{lead}>Y_{i},则探狼向h个方向分别前进一步(游走步长为Step_{a}),记录没前进一步后的函数数值,那么向第p(p=1,2,...,h)个方向前进后探狼i所处的位置为

                                          x_{i}^{p}=x_{i}+sin(2\pi *\frac{p}{h})*step_{a}                             (1)

此时,探狼所在位置的函数值为Y_{i}^{p},选择函数值最大且大于当前函数值Y_{i}的方向前进一步,更新探狼的状态x_{i},重复以上的游走行为直到某匹探狼的函数值Y_{i}>Y_{lead}或游走次数达到最大游走次数T_{max}

        由于每匹探狼的猎物搜寻方式存在差异,因此h的取值不同,实际中可取[h_{min},h_{max}]之间的随机整数,h越大探狼搜寻得越精细但同时速度也相对较慢。

(3)召唤行为

        头狼召集M_{num}匹猛狼向头狼所在位置迅速靠拢,其中M_{num}=N-S_{num}-1;猛狼以相对较大的奔袭步长step_{b}快速逼近头狼所在位置。

 猛狼ik+1次迭代时,所处的位置为

x_{i}(k+1)=x_{i}(k)+step_{b}*(g_{k}-x_{i}(k))/|g_{k}-x_{i}(k)|                       (2)

式中,g_{k}为第k代头狼的位置。式(2)由2部分组成,前者为人工狼的当前位置,后者表示人工狼逐渐向头狼位置聚集的趋势。

奔袭途中,若猛狼i的函数值Y_{i}>Y_{lead},则Y_{lead}=Y_{i},该猛狼转化为头狼并发起召唤行为;若Y_{i}<Y_{lead},则猛狼i继续奔袭直到其与头狼s之间的距离d_{is}小于d_{near}时转入围攻行为。

设待寻优的变量取值范围为[lb,ub],则判定距离d_{near}可由式(3)估计得到

d_{near}=\frac{1}{D*\omega }\sum _{d=1}^{D}(ub-lb)                                                                 (3)

式中,\omega为距离判定因子,\omega增大会加速算法收敛,但\omega过大会使得人工狼很难进入围攻行为。

(4)围攻行为

经过奔袭的猛狼距离猎物较近,此时猛狼要联合探狼对猎物进行围攻,并捕获。这里将离猎物最近的狼,即头狼的位置视为猎物移动的位置。具体地,对于第k代狼群,设猎物的位置为G_{k},则狼群的围攻行为可用方程(4)表示:

x_{i}(k+1)=x_{i}(k)+\lambda*step_{c}*|G_{k}-x_{i}(k)|                                     (4)

式中,为[]间均匀分布的随机数;为人工狼执行围攻行为时的***步长。若实施围攻行为后人工狼感知到的猎物气味儿浓度大于其原位置状态所感知的猎物气味浓度,若不然,人工狼位置不变。

5、人工狼群算法的具体步骤:

step1 数值初始化;

step2 选取头狼以及S_num匹人工狼为探狼并执行游走行为,直到某只探狼i侦察到底额猎物气味浓度大于头狼所感知的猎物气味浓度Y_{i}或达到最大游走次数,结转step3;

step3 人工猛狼根据式(2)向猎物奔袭,若途中猛狼感知的猎物气味浓度Y_{i}>Y_{lead},则Y_{lead}=Y_{i},替代头狼发起召唤行为;若Y_{i}<Y_{lead},则人工猛狼继续奔袭直至d_{is}\leqslant d_{near},结转step4;

step4 按式(4)对参与围攻行为的人工狼的位置进行更新,执行围攻行为;

step5 按“胜者为王”的头狼产生规则对头狼位置进行更新;再按照“强者生存”的狼群更新机制进行群体更新;

step6 判断是否达到优化精度要求或最大迭代次数,否则,结转到step2。

 
 
%% 清空环境
clc
clear all
close all
%% 数据初始化
 
%下载数据
load  HeightData
% HeightData=HeightData';
%网格划分
LevelGrid=10;
PortGrid=21;
 
%起点终点网格点
starty=6;starth=1;
endy=8;endh=21;
m=1;
%算法参数
PopNumber=10;         %种群个数
BestFitness=[];    %最佳个体
iter=100;
%初始信息素
pheromone=ones(21,21,21);
dim=PortGrid*2;
Max_iter=100;
ub=PortGrid;
lb=1;
% initialize alpha, beta, and delta_pos
Alpha_pos=zeros(1,dim);
Alpha_score=inf; %change this to -inf for maximization problems
Beta_pos=zeros(1,dim);
Beta_score=inf; %change this to -inf for maximization problems
Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems
%Initialize the path of search agents
Convergence_curve=zeros(1,Max_iter);
l=0;% Loop counter
%% 初始搜索路径
[path,pheromone]=searchpath(PopNumber,LevelGrid,PortGrid,pheromone, ...
    HeightData,starty,starth,endy,endh);
fitness=CacuFit(path);                          %适应度计算
[bestfitness,bestindex]=min(fitness);           %最佳适应度
bestpath=path(bestindex,:);                     %最佳路径
BestFitness=[BestFitness;bestfitness];          %适应度值记录
 
l=0;% Loop counter
 
% Main loop
while l<Max_iter
    for i=1:size(path,1)
        
        % Return back the search agents that go beyond the boundaries of the search space
        Flag4ub=path(i,:)>ub;
        Flag4lb=path(i,:)<lb;
        path(i,:)=round((path(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb);
        
        % Calculate objective function for each search agent
        fitness=CacuFit(path(i,:));
        
        % Update Alpha, Beta, and Delta
        if fitness<Alpha_score
            Alpha_score=fitness; % Update alpha
            Alpha_pos=path(i,:);
        end
        
        if fitness>Alpha_score && fitness<Beta_score
            Beta_score=fitness; % Update beta
            Beta_pos=path(i,:);
        end
        
end

 

标签:猎物,位置,函数,人工,路径,狼群,源码,无人机,探狼
来源: https://blog.51cto.com/u_15287693/2982990

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有