网站建设资讯

NEWS

网站建设资讯

java代码蜂群算法 蜂群算法还是新算法吗

蜂群算法与人工蜂群算法有什么的区别吗

都是一样的,为什么有的会带上“人工”呢?只是因为这些只能算法都是“人”仿照动物行为而创造的,所以有时候才会带上“人工”两个字。但是指的是一个东西。

创新互联公司长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为万荣企业提供专业的做网站、成都网站建设,万荣网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。

例如神经网络,也有人喜欢说是人工神经网络

有没有人有多目标人工蜂群算法的MATLAB代码。发我一份 不胜感激!!

;aid=11221pay=yes

里面有多个文件

其中之一

%/* ABC algorithm coded using MATLAB language */

%/* Artificial Bee Colony (ABC) is one of the most recently defined algorithms by Dervis Karaboga in 2005, motivated by the intelligent behavior of honey bees. */

%/* Referance Papers*/

%/*D. Karaboga, AN IDEA BASED ON HONEY BEE SWARM FOR NUMERICAL OPTIMIZATION,TECHNICAL REPORT-TR06, Erciyes University, Engineering Faculty, Computer Engineering Department 2005.*/

%/*D. Karaboga, B. Basturk, A powerful and Efficient Algorithm for Numerical Function Optimization: Artificial Bee Colony (ABC) Algorithm, Journal of Global Optimization, Volume:39, Issue:3,pp:459-171, November 2007,ISSN:0925-5001 , doi: 10.1007/s10898-007-9149-x */

%/*D. Karaboga, B. Basturk, On The Performance Of Artificial Bee Colony (ABC) Algorithm, Applied Soft Computing,Volume 8, Issue 1, January 2008, Pages 687-697. */

%/*D. Karaboga, B. Akay, A Comparative Study of Artificial Bee Colony Algorithm, Applied Mathematics and Computation, 214, 108-132, 2009. */

%/*Copyright ?2009 Erciyes University, Intelligent Systems Research Group, The Dept. of Computer Engineering*/

%/*Contact:

%Dervis Karaboga (karaboga@erciyes.edu.tr )

%Bahriye Basturk Akay (bahriye@erciyes.edu.tr)

%*/

clear all

close all

clc

%/* Control Parameters of ABC algorithm*/

NP=20; %/* The number of colony size (employed bees+onlooker bees)*/

FoodNumber=NP/2; %/*The number of food sources equals the half of the colony size*/

limit=100; %/*A food source which could not be improved through "limit" trials is abandoned by its employed bee*/

maxCycle=2500; %/*The number of cycles for foraging {a stopping criteria}*/

%/* Problem specific variables*/

objfun='Sphere'; %cost function to be optimized

D=100; %/*The number of parameters of the problem to be optimized*/

ub=ones(1,D)*100; %/*lower bounds of the parameters. */

lb=ones(1,D)*(-100);%/*upper bound of the parameters.*/

runtime=1;%/*Algorithm can be run many times in order to see its robustness*/

%Foods [FoodNumber][D]; /*Foods is the population of food sources. Each row of Foods matrix is a vector holding D parameters to be optimized. The number of rows of Foods matrix equals to the FoodNumber*/

%ObjVal[FoodNumber]; /*f is a vector holding objective function values associated with food sources */

%Fitness[FoodNumber]; /*fitness is a vector holding fitness (quality) values associated with food sources*/

%trial[FoodNumber]; /*trial is a vector holding trial numbers through which solutions can not be improved*/

%prob[FoodNumber]; /*prob is a vector holding probabilities of food sources (solutions) to be chosen*/

%solution [D]; /*New solution (neighbour) produced by v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) j is a randomly chosen parameter and k is a randomlu chosen solution different from i*/

%ObjValSol; /*Objective function value of new solution*/

%FitnessSol; /*Fitness value of new solution*/

%neighbour, param2change; /*param2change corrresponds to j, neighbour corresponds to k in equation v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij})*/

%GlobalMin; /*Optimum solution obtained by ABC algorithm*/

%GlobalParams[D]; /*Parameters of the optimum solution*/

%GlobalMins[runtime]; /*GlobalMins holds the GlobalMin of each run in multiple runs*/

GlobalMins=zeros(1,runtime);

for r=1:runtime

% /*All food sources are initialized */

%/*Variables are initialized in the range [lb,ub]. If each parameter has different range, use arrays lb[j], ub[j] instead of lb and ub */

Range = repmat((ub-lb),[FoodNumber 1]);

Lower = repmat(lb, [FoodNumber 1]);

Foods = rand(FoodNumber,D) .* Range + Lower;

ObjVal=feval(objfun,Foods);

Fitness=calculateFitness(ObjVal);

%reset trial counters

trial=zeros(1,FoodNumber);

%/*The best food source is memorized*/

BestInd=find(ObjVal==min(ObjVal));

BestInd=BestInd(end);

GlobalMin=ObjVal(BestInd);

GlobalParams=Foods(BestInd,:);

iter=1;

while ((iter = maxCycle)),

%%%%%%%%% EMPLOYED BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%

for i=1:(FoodNumber)

%/*The parameter to be changed is determined randomly*/

Param2Change=fix(rand*D)+1;

%/*A randomly chosen solution is used in producing a mutant solution of the solution i*/

neighbour=fix(rand*(FoodNumber))+1;

%/*Randomly selected solution must be different from the solution i*/

while(neighbour==i)

neighbour=fix(rand*(FoodNumber))+1;

end;

sol=Foods(i,:);

% /*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */

sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2;

% /*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/

ind=find(sollb);

sol(ind)=lb(ind);

ind=find(solub);

sol(ind)=ub(ind);

%evaluate new solution

ObjValSol=feval(objfun,sol);

FitnessSol=calculateFitness(ObjValSol);

% /*a greedy selection is applied between the current solution i and its mutant*/

if (FitnessSolFitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/

Foods(i,:)=sol;

Fitness(i)=FitnessSol;

ObjVal(i)=ObjValSol;

trial(i)=0;

else

trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/

end;

end;

%%%%%%%%%%%%%%%%%%%%%%%% CalculateProbabilities %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%/* A food source is chosen with the probability which is proportioal to its quality*/

%/*Different schemes can be used to calculate the probability values*/

%/*For example prob(i)=fitness(i)/sum(fitness)*/

%/*or in a way used in the metot below prob(i)=a*fitness(i)/max(fitness)+b*/

%/*probability values are calculated by using fitness values and normalized by dividing maximum fitness value*/

prob=(0.9.*Fitness./max(Fitness))+0.1;

%%%%%%%%%%%%%%%%%%%%%%%% ONLOOKER BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

i=1;

t=0;

while(tFoodNumber)

if(randprob(i))

t=t+1;

%/*The parameter to be changed is determined randomly*/

Param2Change=fix(rand*D)+1;

%/*A randomly chosen solution is used in producing a mutant solution of the solution i*/

neighbour=fix(rand*(FoodNumber))+1;

%/*Randomly selected solution must be different from the solution i*/

while(neighbour==i)

neighbour=fix(rand*(FoodNumber))+1;

end;

sol=Foods(i,:);

% /*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */

sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2;

% /*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/

ind=find(sollb);

sol(ind)=lb(ind);

ind=find(solub);

sol(ind)=ub(ind);

%evaluate new solution

ObjValSol=feval(objfun,sol);

FitnessSol=calculateFitness(ObjValSol);

% /*a greedy selection is applied between the current solution i and its mutant*/

if (FitnessSolFitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/

Foods(i,:)=sol;

Fitness(i)=FitnessSol;

ObjVal(i)=ObjValSol;

trial(i)=0;

else

trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/

end;

end;

i=i+1;

if (i==(FoodNumber)+1)

i=1;

end;

end;

%/*The best food source is memorized*/

ind=find(ObjVal==min(ObjVal));

ind=ind(end);

if (ObjVal(ind)GlobalMin)

GlobalMin=ObjVal(ind);

GlobalParams=Foods(ind,:);

end;

%%%%%%%%%%%% SCOUT BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%/*determine the food sources whose trial counter exceeds the "limit" value.

%In Basic ABC, only one scout is allowed to occur in each cycle*/

ind=find(trial==max(trial));

ind=ind(end);

if (trial(ind)limit)

Bas(ind)=0;

sol=(ub-lb).*rand(1,D)+lb;

ObjValSol=feval(objfun,sol);

FitnessSol=calculateFitness(ObjValSol);

Foods(ind,:)=sol;

Fitness(ind)=FitnessSol;

ObjVal(ind)=ObjValSol;

end;

fprintf('Ýter=%d ObjVal=%g\n',iter,GlobalMin);

iter=iter+1;

end % End of ABC

GlobalMins(r)=GlobalMin;

end; %end of runs

save all

优化算法笔记(八)人工蜂群算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)

工蜂群算法(Artificial Bee Colony Algorithm,ABC)是一种模仿蜜蜂采蜜机理而产生的群智能优化算法。其原理相对复杂,但实现较为简单,在许多领域中都有研究和应用。

人工蜂群算法中,每一个蜜源的位置代表了待求问题的一个可行解。蜂群分为采蜜蜂、观察蜂和侦查蜂。采蜜蜂与蜜源对应,一个采蜜蜂对应一个蜜源。观察蜂则会根据采蜜蜂分享的蜜源相关信息选择跟随哪个采蜜蜂去相应的蜜源,同时该观察蜂将转变为侦查蜂。侦查蜂则自由的搜索新的蜜源。每一个蜜源都有开采的限制次数,当一个蜜源被采蜜多次而达到开采限制次数时,在该蜜源采蜜的采蜜蜂将转变为侦查蜂。每个侦查蜂将随机寻找一个新蜜源进行开采,并转变成为采蜜蜂。

下面是我的实现方式(我的答案):

1. 三种蜜蜂之间可以相互转化。

采蜜蜂-观察蜂:有观察蜂在采蜜过程中发现了比当前采蜜蜂更好的蜜源,则采蜜蜂放弃当前蜜源转而变成观察蜂跟随优质蜜源,同时该观察蜂转变为采蜜蜂。

采蜜蜂-观察蜂:当该采蜜蜂所发现的蜜源被开采完后,它会转变为观察蜂去跟随其他采蜜蜂。

采蜜蜂-侦查蜂:当所有的采蜜蜂发现的蜜源都被开采完后,采蜜蜂将会变为侦查蜂,观察蜂也会变成侦查蜂,因为大家都无蜜可采。

侦查蜂-采蜜蜂、观察蜂:侦查蜂随机搜索蜜源,选择较好的数个蜜源位置的蜜蜂为采蜜蜂,其他蜜蜂为观察蜂。

2.蜜源的数量上限

蜜源的数量上限等于采蜜蜂的数量上限。初始化时所有蜜蜂都是侦查蜂,在这些侦查蜂所搜索到的蜜源中选出数个较优的蜜源,发现这些蜜源的侦查蜂变为采蜜蜂,其他蜜蜂变为观察蜂。直到所有的蜜源都被开采完之前,蜜源的数量不会增加,因为这个过程中没有产生侦查蜂。所有的蜜源都被开采完后,所有的蜜蜂再次全部转化为侦查蜂,新的一轮蜜源搜索开始。也可以在一个蜜源开采完时马上产生一个新的蜜源补充,保证在整个开采过程中蜜源数量恒定不变。

蜜源的开采实际上就是观察蜂跟随采蜜蜂飞向蜜源的过程。得到的下一代的位置公式如下:

表示第i只观察蜂在第t代时随机选择第r只采蜜蜂飞行一段距离,其中R为(-1,1)的随机数。

一只观察蜂在一次迭代过程中只能选择一只采蜜蜂跟随,它需要从众多的采蜜蜂中选择一只来进行跟随。观察蜂选择的策略很简单,随机跟随一只采蜜蜂,该采蜜蜂发现的蜜源越优,则选择它的概率越大。

是不是很像轮盘赌,对,这就是轮盘赌,同时我们也可以稍作修改,比如将勤劳的小蜜蜂改为懒惰的小蜜蜂,小蜜蜂会根据蜜源的优劣和距离以及开采程度等因素综合来选择跟随哪只采蜜蜂(虽然影响不大,但聊胜于无)。

忘记了轮盘赌的小伙伴可以看一下 优化算法笔记(六)遗传算法 。

下面是我的人工蜂群算法流程图

又到了实验环节,参数实验较多,全部给出将会占用太多篇幅,仅将结果进行汇总展示。

实验1:参数如下

上图分别为采蜜蜂上限为10%总数和50%总数的情况,可以看出当采蜜蜂上限为10%总群数时,种群收敛的速度较快,但是到最后有一个点死活不动,这是因为该点作为一个蜜源,但由于适应度值太差,使用轮盘赌被选择到的概率太小从而没有得到更佳的蜜源位置,而因未开采完,采蜜蜂又不能放弃该蜜源。

看了看采蜜蜂上限为50%总群数时的图,发现也有几个点不动的状态,可以看出,这时不动的点的数量明显多于上限为10%总数的图,原因很简单,采蜜蜂太多,“先富”的人太多,而“后富”的人较少,没有带动“后富者”的“先富者”也得不到发展。

看看结果

嗯,感觉结果并没有什么差别,可能由于问题较简单,迭代次数较少,无法体现出采蜜蜂数对于结果的影响,也可能由于蜜源的搜索次数为60较大,总群一共只能对最多20*50/60=16个蜜源进行搜索。我们将最大迭代次数调大至200代再看看结果

当最大迭代次数为200时,人工蜂群算法的结果如上图,我们可以明显的看出,随着采蜜蜂上限的上升,算法结果的精度在不断的下降,这也印证了之前的结果,由于蜜源搜索次数较大(即搜索深度较深)采蜜蜂数量越多(搜索广度越多),结果的精度越低。不过影响也不算太大,下面我们再来看看蜜源最大开采次数对结果的影响。

实验2:参数如下

上图分别是蜜源开采限度为1,20和4000的实验。

当蜜源开采上限为1时,即一个蜜源只能被开采一次,即此时的人工蜂群算法只有侦查蜂随机搜索的过程,没有观察蜂跟随采蜜蜂的过程,可以看出图中的蜜蜂一直在不断的随机出现在新位置不会向某个点收敛。

当蜜源开采上限为20时,我们可以看到此时种群中的蜜蜂都会向一个点飞行。在一段时间内,有数个点一动不动,这些点可能就是采蜜蜂发现的位置不怎么好的蜜源,但是在几次迭代之后,它们仍会被观察蜂开采,从而更新位置,蜜源开采上限越高,它们停顿的代数也会越长。在所有蜜蜂都收敛于一个点之后,我们可以看到仍会不断的出现其他的随机点,这些点是侦查蜂进行随机搜索产生的新的蜜源位置,这些是人工蜂群算法跳出局部最优能力的体现。

当蜜源开采上限为4000时,即不会出现侦查蜂的搜索过程,观察蜂只会开采初始化时出现的蜜源而不会采蜜蜂不会有新的蜜源产生,可以看出在蜂群收敛后没有出现新的蜜源位置。

看看最终结果,我们发现,当蜜源开采上线大于1时的结果提升,但是好像开采上限为5时结果明显好于开采次数上限为其他的结果,而且随着开采次数不断上升,结果在不断的变差。为什么会出现这样的结果呢?原因可能还是因为问题较为简单,在5次开采的限度内,观察蜂已经能找到更好的蜜源进行开采,当问题较为复杂时,我们无法知晓开采发现新蜜源的难度,蜜源开采上限应该取一个相对较大的值。当蜜源开采限度为4000时,即一个蜜源不可能被开采完(开采次数为20(种群数)*200(迭代次数)),搜索的深度有了但是其结果反而不如开采限度为几次几十次来的好,而且这样不会有侦查蜂随机搜索的过程,失去了跳出局部最优的能力。

我们应该如何选择蜜源的最大开采次数限制呢?其实,没有最佳的开采次数限制,当适应度函数较为简单时,开采次数较小时能得到比较好的结果,但是适应度函数较复杂时,经过试验,得出的结果远差于开采次数较大时。当然,前面就说过,适应度函数是一个黑盒模型,我们无法判断问题的难易。那么我们应该选择一个适中的值,个人的选择是种群数的0.5倍到总群数的2倍作为蜜源的最大开采次数,这样可以保证极端情况下,1-2个迭代周期内小蜜蜂们能将一个蜜源开采完。

人工蜂群算法算是一个困扰我比较长时间的算法,几年时间里,我根据文献实现的人工蜂群算法都有数十种,只能说人工蜂群算法的描述太过模糊,或者说太过抽象,研究者怎么实现都说的通。但是通过实现多次之后发现虽然实现细节大不相同,但效果相差不多,所以我们可以认为人工蜂群算法的稳定性比较强,只要实现其主要思想即可,细节对于结果的影响不太大。

对于人工蜂群算法影响最大的因素还是蜜源的开采次数限制,开采次数限制越大,对同一蜜源的开发力度越大,但是分配给其他蜜源的搜索力度会相对减少,也会降低蜂群算法的跳出局部最优能力。可以动态修改蜜源的开采次数限制来实现对算法的改进,不过效果不显著。

其次对于人工蜂群算法影响是三类蜜蜂的搜索行为,我们可以重新设计蜂群的搜索方式来对算法进行改进,比如采蜜蜂在开采蜜源时是随机飞向其他蜜源,而观察蜂向所选的蜜源靠近。这样改进有一定效果但是在高维问题上效果仍不明显。

以下指标纯属个人yy,仅供参考

目录

上一篇 优化算法笔记(七)差分进化算法

下一篇 优化算法笔记(九)杜鹃搜索算法

优化算法matlab实现(八)人工蜂群算法matlab实现

智能优化算法:人工蜂群算法

@[toc]

摘要:人工蜂群算法(artificial bee colony,ABC)是由土耳其学者Karaboga 于 2005 年提出,它是模拟蜜蜂的采蜜行为来解决生活中一些多维和多模的优化问题,它最初应用于数值优化问题,自提出以来受到了众多学者极大的关注,并广泛应用到神经网络、数据挖掘、工程应用、图像识别等多个领域。

在 ABC 算法里,用蜜源的位置来表示解,用蜜源的花粉数量表示解的适应值。所有的蜜蜂划分为雇佣蜂、跟随蜂、探索蜂三组。雇佣蜂和跟随蜂各占蜂群总数的一半。雇佣蜂负责最初的寻找蜜源并采蜜分享信息,跟随蜂负责呆在蜂巢里根据雇佣蜂提供的信息去采蜜,探索蜂在原有蜜源被抛弃后负责随机寻找新的蜜源来替换原有的蜜源。与其他群智能算法一样,ABC 算法是迭代的。对蜂群和蜜源的初始化后,反复执行三个过程,即雇佣蜂、跟随蜂、探索蜂阶段,来寻找问题的最优解。每个阶段描述如下:

对 ABC 算法的参数进行初始化,这些参数有蜜源数 、蜜源确定被抛弃的次数 、迭代终止次数。在标准 ABC 算法里,蜜源的数目 与雇佣蜂数相等,也与跟随蜂数相等。产生某个蜜源的公式为:

其中: 代表第 个蜜源 的第 维度值, 取值于 , 取值于 ; 和 分别代表第 维的最小值和最大值。初始化蜜源就是对每个蜜源的所有维度通过以上公式赋一个在取值范围内的随机值,从而随机生成 个最初蜜源。

在雇佣蜂阶段,雇佣蜂用以下公式来寻找新蜜源:

其中: 代表邻域蜜源, 取值于 ,且 不等于 ; 是取值在[-1,1]的随机数,通过式(2)得到新蜜源后,利用贪婪算法,比较新旧蜜源适应值,选择优者。

雇佣蜂阶段结束,跟随蜂阶段开始。在该阶段,雇佣蜂在舞蹈区分享蜜源信息。跟随蜂分析这些信息,采用轮盘赌策略来选择蜜源跟踪开采,以保证适应值更高的蜜源开采的概率更大。跟随蜂开采过程与雇佣蜂一样,利用式(2)找寻新蜜源,并留下更优适应者。

蜜源拥有参数 ,当蜜源更新被保留时, 为 0;反之, 加 1。从而 能统计出一个蜜源没有被更新的次数。

如果一个蜜源经过多次开采没被更新,也就是 值过高,超过了预定阈值 ,那么需抛弃这个蜜源,启动探索蜂阶段。这体现了 ABC 里自组织的负反馈和波动属性 。在该阶段里,探索蜂利用式(3)随机寻找新的蜜源来代替被抛弃蜜源。

人工蜂群算法流程

step1.初始化算法参数,生成蜜蜂初始位置

step2.雇佣蜂计算适应度值,比较并保存最优值

step3.跟随蜂选择雇佣蜂更新蜜源位置,计算适应度值,保存最佳值

step4.若有侦察蜂出现,则重新生成初始位置并执行更新选优,否则继续执行step5

step5.若迭代次数小于预设的迭代次数,则转到step2;否则输出最优解

[1]何尧,刘建华,杨荣华.人工蜂群算法研究综述[J].计算机应用研究,2018,35(05):1281-1286.

“蜂群”作战---未来无人机作战的模式探究

一、 当前军用无人机作战在运用发展中存在的主要问题:

1、单机机载设备的侦察能力有限,很难有效地全方位连续侦查和监视目标;

2、无人机一旦发生设备故障,容易导致任务被延误,甚至被迫取消;

3、在面临高威胁防空体系时,容易被拦截和毁伤,导致任务失败;

4、单机的武器载荷有限,使打击威力和效果受到限制;

5、地面控制链路较难对多架无人机同时控制,导致空中无人机数量偏少;

6、智能化水平不高,在关键节点时仍需有人协助;

7、被赋予任务日趋复杂多样,需要的传感器数量和种类不断增加;

8、无人机的成本不断提高,和有人机相比已经不再有优势。

   

因此,世界军事强国在未来无人机作战研究及发展的思路上也不尽相同,隐身化、高速化、小(微)型化、大型化等无人机发展型号不断翻新,但普遍认识到无人机单机的作战能力已很难有较大提高。

  在此背景下,一个并不是全新的作战样式再次被推上了前台,这就是无人机的“蜂群”作战。

二、 无人机“蜂群”技术的原理和发展

1、 近期各国无人机“蜂群”技术发展的情况。

2015年1月3日,翼龙无人机进行了新年首次编队飞行,两架翼龙顺次起飞编队飞行。

2016年10月3日,在韩国第一届陆军参谋总长杯无人机竞赛中,300架无人机同时升空并完成3分钟以上的飞行。

2016年11月5日在第十一届中国国际航空航天博览会上记者了解到,我国第一个固定翼无人机集群飞行试验以67架飞机的数量打破了之前由美国海军保持的50架固定翼无人机集群飞机数量的纪录。

2016年底,根据中国航天空气动力技术研究院发布的消息称。彩虹4无人机完成了五站四机协同超视距飞行任务,包括超视距飞行、卫星通讯接力、多路卫星通讯同传、多机态势监测及协同飞行等多个科目。实现了多区域侦察监视打击和控制的作战演练。

2017年1月, 3架F/A-18超级大黄蜂战斗机在加利福尼亚州进行的测试中成功释放了103架“珀耳狄克斯”微型无人机,这标志着代号“蜂群”的微型无人机攻击系统在研发上取得重大进展。 

2、无人机 “蜂群”技术的基本原理

  无人机蜂群作战的技术原理是“集群智能”,即众多无/低智能的个体通过相互之间的简单合作所表现出来的集体智能行为。在群体行为中,单个个体的行为会被临近的个体所影响,通过他们局部简单的相互交流,使得整体可以通过组织协作完成一些较为复杂任务。通过交互作用和协作行为,简单个体的协同集合可以表现出整体优势从而完成复杂任务。在复杂性技术中,这种现象叫做涌现。主要特点有:

(1)个体简单性:群体中的每一个个体可以相对简单,并不需要完成复杂任务所需要的较高智能。群体中的每个个体,并不能,或并不需要直接得知整个群体的信息,而只需要感知一部分信息。群体中的个体具有十分简单的自治个体的规则,只需要最小智能,因而具有简单性。

(2)控制分散性:群体中包含的所有个体是完全分散的,没有中心控制。也就是不会因为单个体或少数几个个体出现不确定的状况而影响全局。因此整个群体的健壮性较高,或者说群体整体具有更强的稳定鲁棒性。

(3)联系有限性:群体中的相邻个体之间,可以彼此直接交换有限的信息;或者彼此不直接交互信息而是通过环境探查间接获取相关信息,不需要或不可能群体中的每个个体与其他所有个体发生信息交流。

(4)群体智能性:在个体简单性、控制分散性和联系有限性的基础上,群体却可以在适当的进化交互过程中表现复杂行为涌现出来的智能,而这种智能是单个个体无法做到的。

2、无人机“蜂群”技术的典型算法和技术支撑

(1)蚁群算法(ACO)又称蚂蚁算法,是由Marco Dorigo在1992年的博士论文中提出的。其灵感来源于蚂蚁在寻找食物过程中发现食物源和到达路径的行为。

(2)人工蜂群算法(ABC)人工蜂群算法的起源,是诺贝尔奖得主、奥地利人K.VON.Frisch发现的。2005年土耳其大学的D.Karaboga正式提出了基于蜜蜂采蜜的ABC人工蜂群算法,该算法具有简单和鲁棒性强的特点,在非限制性数值优化函数上比常见的启发式算法具有更加优越的性能,用于解决多峰值函数的问题。

  这两种算法各有特点,国内某单位将蚁群算法设计的结果与遗传算法设计的结果进行了比较,数值仿真结果表明,蚁群算法具有很高的有效性和应用价值,感兴趣的读者可以查阅相关资料。

(3)无人机群的航路规划问题,即协同飞行、作战、打击、评估等。

三、无人机“蜂群”技术在军事上的应用

  无人机蜂群作战,已经在国外进行了实验,美国海军使用装备宙斯盾系统的伯克级驱逐舰进行拦截无人机蜂群的试验,发现只有密集阵近防系统和重机枪才能有效拦截。但对8架无人机组成的蜂群进行攻击拦截时,平均有2.8架无人机能够避开拦截系统。即使经过更好的传感器、更多的机枪和密集阵系统进行升级后,仍然至少有1架能够避开拦截。无人机蜂群作战一方面向进攻方展示了难以估量的力量,也同时对防守方发出了不可忽视的警告。

   蜂群无人机的载弹量小,更适合打击防空反导系统或有防空反导保护、无坚固掩体防护的海上或陆上的“软”目标;若与少量大威力的巡飞弹配合使用,则可对保护严密、防护坚固的关键目标构成非常严峻的威胁。

若蜂群无人机搭载电磁干扰装置或定向能武器,就可具备一定的拦截能力,自身还可作为假目标或诱饵实施干扰,非常适合应对饱和导弹攻击,快速消耗敌方拦截武器,具有良好的防御效果。

   无人机单机的“孤鹰”式作战模式,已经取得了很大的实战成绩,而大量无人机集群作战的“蜂群”模式,尚在研发和验证过程中。即便能够获得成功,“孤鹰”也不会完全替代“蜂群”。一方面,二者的使用场景和任务特点不同;另一方面,比无人机作战模式创新更加重要的,是将无人机融入现有的作战体系。

  与1995年美军装备察打无人机捕食者A,2001年进行首次打击任务相比,中国军方在2012年正式列装察打一体无人机——"攻击-1"无人机,晚了11年;

与2004年美军利用一架T-33技术验证机,与F-15E进行有人机/无人机协同飞行能力的验证飞行相比,而有人机/无人机协同飞行尚未见之于报道。

 2012年,美军完成了两架改进型的RQ-4“全球鹰”无人侦察机的空中自主、互助加油技术成功,使美军的“全球鹰”无人飞机航行时间从40小时延长到160小时,极大提高了侦察范围。

  革命尚未成功,同志仍需努力。现在,中国的67架固定翼无人机已集群试飞,标志着我们在无人机蜂群作战这个新兴领域的前沿位置。相信在不久的将来,我们的军工也必然能够弯道超车,领跑世界。


本文标题:java代码蜂群算法 蜂群算法还是新算法吗
当前地址:http://cdweb.net/article/hpdhos.html