目录

蚁狮或所谓的涂鸦虫是蚁蛉科家族的成员,属于神经翅目(网翅昆虫)。蚁狮的生命有两个关键阶段:幼虫和成虫。成年期仅持续 3-5 周,用于繁殖。另一方面,生命周期的延长阶段,即幼虫阶段,大部分用于猎杀他们最喜欢的猎物,即蚂蚁。蚁狮幼虫的狩猎行为独特而迷人。如图1所示,是蚂蚁狮子和它的狩猎机制。

它们沿着圆形路径移动,并用它们巨大的下颚扔出沙子,在沙质土壤中形成小的(1-3 英寸长)漏斗形坑,如图2所示,以诱捕蚂蚁。

他们躲在坑底下,等待蚂蚁或小昆虫被困。漏斗形坑的边缘非常锋利,小昆虫无法逃脱,很容易掉到陷阱底部,如图3所示。蚁狮还不断将沙子扔向陷阱的外缘,以阻止猎物的任何逃跑尝试。

最后,昆虫滑入坑底,被拉到土壤下并被蚁狮吃掉。猎物的残骸被扔到坑外。之后,蚁狮为后续的目标猎物修改坑。蚁狮的饥饿程度越高,它们挖的陷阱就越大。通过这种方式,蚁狮已经进化和调整,以提高它们的生存前景。
详细的数学模型见第一部分的知识一网打尽。
本文只展示部分代码,全部代码见:🍞正在为您运送作品详情

-
- clc;
- clear;
- close all;
- warning off;
-
- %% 基于MOALO求解具有阀点效应的环境经济调度问题
- % 数有 5 列数据分别为燃料成本系数a,b,c和发电机组上下限约束。
- % 1.a ($/MW^2) 2. b $/MW 3. c ($) 4.机组下限(MW) 5.机组上限(MW)
- %行数表示发电机台数(n)
- data=[0.007 7 240 100 500
- 0.0095 10 200 50 200
- 0.009 8.5 220 80 300
- 0.009 11 200 50 150
- 0.008 10.5 220 50 200
- 0.0075 12 120 50 120];
-
- %% 网损系数
- B=1e-4*[0.14 0.17 0.15 0.19 0.26 0.22
- 0.17 0.6 0.13 0.16 0.15 0.2
- 0.15 0.13 0.65 0.17 0.24 0.19
- 0.19 0.16 0.17 0.71 0.3 0.25
- 0.26 0.15 0.24 0.3 0.69 0.32
- 0.22 0.2 0.19 0.25 0.32 0.85
- ];
- %% 负荷需求(MW)
- Pd=700;
-
- %% 目标函数
- ObjectiveFunction=@eldnba; %调用目标函数
- dim=length(data(:,1));
- lb=0;
- ub=1;
- obj_no=1;
-
- if size(ub,2)==1
- ub=ones(1,dim)*ub;
- lb=ones(1,dim)*lb;
- end
-
- %% 初始化蚁狮优化算法参数
- max_iter=100;
- N=100;
- ArchiveMaxSize=100;
-
- Archive_X=zeros(100,dim);
- Archive_F=ones(100,obj_no)*inf;
-
- Archive_member_no=0;
-
- r=(ub-lb)/2;
- V_max=(ub(1)-lb(1))/10;
-
- Elite_fitness=inf*ones(1,obj_no);
- Elite_position=zeros(dim,1);
-
- Ant_Position=initialization(N,dim,ub,lb);
- fitness=zeros(N,2);
-
- V=initialization(N,dim,ub,lb);
- iter=0;
-
- position_history=zeros(N,max_iter,dim);
-
- for iter=1:max_iter
-
- for i=1:N %首先计算所有的目标值
- Particles_F(i,:)=ObjectiveFunction(Ant_Position(:,i)');
- if dominates(Particles_F(i,:),Elite_fitness)
- Elite_fitness=Particles_F(i,:);
- Elite_position=Ant_Position(:,i);
- end
- end
-
- [Archive_X, Archive_F, Archive_member_no]=UpdateArchive(Archive_X, Archive_F, Ant_Position, Particles_F, Archive_member_no);
-
- if Archive_member_no>ArchiveMaxSize
- Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);
- [Archive_X, Archive_F, Archive_mem_ranks, Archive_member_no]=HandleFullArchive(Archive_X, Archive_F, Archive_member_no, Archive_mem_ranks, ArchiveMaxSize);
- else
- Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);
- end
-
- Archive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);
-
- index=RouletteWheelSelection(1./(Archive_mem_ranks+1e-20));
- if index==-1
- index=1;
- end
- Elite_fitness=Archive_F(index,:);
- Elite_position=Archive_X(index,:)';
-
- Random_antlion_fitness=Archive_F(1,:);
- Random_antlion_position=Archive_X(1,:)';
-
- for i=1:N
-
- index=0;
- neighbours_no=0;
-
- RA=Random_walk_around_antlion(dim,max_iter,lb,ub, Random_antlion_position',iter);
-
- [RE]=Random_walk_around_antlion(dim,max_iter,lb,ub, Elite_position',iter);
-
- Ant_Position(:,i)=(RE(iter,:)'+RA(iter,:)')/2;
-
-
-
- Flag4ub=Ant_Position(:,i)>ub';
- Flag4lb=Ant_Position(:,i)<lb';
- Ant_Position(:,i)=(Ant_Position(:,i).*(~(Flag4ub+Flag4lb)))+ub'.*Flag4ub+lb'.*Flag4lb;
-
- end
- display(['在迭代时 ', num2str(iter), ', ', num2str(Archive_member_no), ' 非支配解决方案为']);
- K(iter)=Elite_fitness;
- end
- [F P Pl]=eldnba(Elite_position)
- plot(K)
- grid
- title('迭代次数与最佳函数值');
- xlabel('迭代次数')
- ylabel('函数值')

