【蚁狮算法】基于柯西变异的蚁狮优化算法求解单目标优化问题matlab代码

1 简介

针对蚁狮优化算法较易陷入局部最优停滞,收敛精度低以及收敛速度较慢等问题,将自适应t分布的柯西变异融入到蚁狮优化算法中,提出了基于柯西变异的蚁狮优化算法(CALO).该算法采用轮盘赌的方法挑选出精英蚁狮个体,改善蚁狮群体的适应性,提高种群的总体寻优效率;采用具有自适应的柯西变异算子使得蚁狮个体受局部极值点约束力下降,能够快速跳出局部最优,大大提高了全局搜索能力和收敛速度;通过9个单模态,多模态标准测试函数对CALO,ALO,FPA和BA四种算法进行函数测试对比,实验仿真结果表明该改进算法是切实可行的,具有更优的收敛速度和寻优精度

2 部分代码

%___________________________________________________________________%%  Ant Lion Optimizer (ALO) source codes demo version 1.0           %% You can simply define your cost in a seperate file and load its handle to fobj % The initial parameters that you need are:%__________________________________________% fobj = @YourCostFunction% dim = number of your variables% Max_iteration = maximum number of generations% SearchAgents_no = number of search agents% lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n% ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n% If all the variables have equal lower bound you can just% define lb and ub as two single number numbers% To run ALO: [Best_score,Best_pos,cg_curve]=ALO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)function [min_value,Elite_antlion_fitness,Elite_antlion_position,Convergence_curve]=ALO(N,Max_iter,lb,ub,dim,fobj)% Initialize the positions of antlions and antsantlion_position=initialization(N,dim,ub,lb);ant_position=initialization(N,dim,ub,lb);% Initialize variables to save the position of elite, sorted antlions, % convergence curve, antlions fitness, and ants fitnessSorted_antlions=zeros(N,dim);Elite_antlion_position=zeros(1,dim);Elite_antlion_fitness=inf;Convergence_curve=zeros(1,Max_iter);antlions_fitness=zeros(1,N);ants_fitness=zeros(1,N);% Calculate the fitness of initial antlions and sort themfor i=1:size(antlion_position,1)    antlions_fitness(1,i)=fobj(antlion_position(i,:)); end[sorted_antlion_fitness,sorted_indexes]=sort(antlions_fitness);    for newindex=1:N     Sorted_antlions(newindex,:)=antlion_position(sorted_indexes(newindex),:);end    Elite_antlion_position=Sorted_antlions(1,:);Elite_antlion_fitness=sorted_antlion_fitness(1);% Main loop start from the second iteration since the first iteration % was dedicated to calculating the fitness of antlionsCurrent_iter=2; while Current_iter<Max_iter+1        % This for loop simulate random walks    for i=1:size(ant_position,1)        % Select ant lions based on their fitness (the better anlion the higher chance of catching ant)        Rolette_index=RouletteWheelSelection(1./sorted_antlion_fitness);        if Rolette_index==-1              Rolette_index=1;        end              % RA is the random walk around the selected antlion by rolette wheel        RA=Random_walk_around_antlion(dim,Max_iter,lb,ub, Sorted_antlions(Rolette_index,:),Current_iter);                % RA is the random walk around the elite (best antlion so far)        [RE]=Random_walk_around_antlion(dim,Max_iter,lb,ub, Elite_antlion_position(1,:),Current_iter);                ant_position(i,:)= (RA(Current_iter,:)+RE(Current_iter,:))/2; % Equation (2.13) in the paper              end        for i=1:size(ant_position,1)                  % Boundar checking (bring back the antlions of ants inside search        % space if they go beyoud the boundaries        Flag4ub=ant_position(i,:)>ub;        Flag4lb=ant_position(i,:)<lb;        ant_position(i,:)=(ant_position(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;                  ants_fitness(1,i)=fobj(ant_position(i,:));                   end        % Update antlion positions and fitnesses based of the ants (if an ant     % becomes fitter than an antlion we assume it was cought by the antlion      % and the antlion update goes to its position to build the trap)    double_population=[Sorted_antlions;ant_position];    double_fitness=[sorted_antlion_fitness ants_fitness];            [double_fitness_sorted I]=sort(double_fitness);    double_sorted_population=double_population(I,:);            antlions_fitness=double_fitness_sorted(1:N);    Sorted_antlions=double_sorted_population(1:N,:);            % Update the position of elite if any antlinons becomes fitter than it    if antlions_fitness(1)<Elite_antlion_fitness         Elite_antlion_position=Sorted_antlions(1,:);        Elite_antlion_fitness=antlions_fitness(1);    end          % Keep the elite in the population    Sorted_antlions(1,:)=Elite_antlion_position;    antlions_fitness(1)=Elite_antlion_fitness;      % Update the convergence curve    Convergence_curve(Current_iter)=Elite_antlion_fitness;    % Display the iteration and best optimum obtained so far    if mod(Current_iter,1)==0        display(['At iteration ', num2str(Current_iter), ' the elite fitness is ', num2str(Elite_antlion_fitness)]);    endmin_value(Current_iter)=Elite_antlion_fitness;    Current_iter=Current_iter+1; end

3 仿真结果

4 参考文献

[1]于建芳, 刘升, 韩斐斐,等. 基于柯西变异的蚁狮优化算法[J]. 微电子学与计算机, 2019, 36(6):6.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值