优化算法差分蜂群优化算法(DEABC)含Matlab源码 1230期

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化算法差分蜂群优化算法(DEABC)含Matlab源码 1230期相关的知识,希望对你有一定的参考价值。

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【优化算法】差分蜂群优化算法(DEABC)【含Matlab源码 1230期】

获取代码方式2:
通过紫极神光博客主页开通CSDN年度会员,凭支付凭证,私信博主,可获得此代码。

获取代码方式3:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:开通CSDN年度会员,仅只能免费获得1份代码(有效期为开通日起,三天内有效);
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、部分源代码

clear
clc
close all
%% 首先选择一个函数进行寻优
objfun=@f1;ub=100; lb=-100;%sphere 全局最小值为0
objfun=@f2;lb=-600; ub=600;%griewank 全局最小值为0
objfun=@f3;lb=-100; ub=100;%rastrigin 全局最小值为0
objfun=@f4;lb=-10; ub=10;%rosenbrock 全局最小值为0
%%
d=2;
max_iter=2500;
sizepop=20;
%%
%1 粒子群
[pso_position,pso_fitness,pso_trace]=pso(objfun,d,max_iter,sizepop,ub,lb);
%2 遗传算法
[ga_position,ga_fitness,ga_trace]=ga(objfun,d,max_iter,sizepop,ub,lb);
%2 差分进化算法
[de_position,de_fitness,de_trace]=de1(objfun,d,max_iter,sizepop,ub,lb);

%3 蜂群算法
[abc_position,abc_fitness,abc_trace]=abc(objfun,d,max_iter,sizepop,ub,lb);
% 差分蜂群
[deabc_position ,deabc_fitness,deabc_trace]=DEABC(objfun,d,max_iter,sizepop,ub,lb);

%% 
figure 
plot(pso_trace(:,1))
hold on
plot(ga_trace(:,1))
plot(de_trace(:,1))

plot(abc_trace(:,1))
plot(deabc_trace(:,1))

legend('PSO','GA','DE','ABC','DEABC')
xlabel('迭代数')
ylabel('适应度值/函数值')
%%

figure 
plot(log10(pso_trace(:,1)),'b-')
hold on
plot(log10(ga_trace(:,1)),'r-')
plot(log10(de_trace(:,1)),'g-')

plot(log10(abc_trace(:,1)),'k-')
plot(log10(deabc_trace(:,1)),'m-')

legend('PSO','GA','DE','ABC','DEABC')
xlabel('迭代数')
ylabel('适应度值/log10(函数值)')
img =gcf;  %获取当前画图的句柄
print(img, '-dpng', '-r600', './img.png')         %即可得到对应格式和期望dpi的图像
function [best,cf,gen]=DEABC(objfun,D,n,popsize,ub,lb);
fit.objfun=objfun;fit.ub=ub; fit.lb=lb;
%参数设置
popsize;%种群数
n;% 种群混合次数
dim=D;%待优化的变量的维数
%% 初始化种群
%随机分配k个种群给DE  popsize-k给ABC
k=ceil(popsize*rand);
while k<3 | mod(k, 2)~= 0 | k==popsize| k>popsize-3  %注:abc的种群必须是偶数,且要大于4
k=ceil(popsize*rand);
end
N1=k;
N2=popsize-k;
pop_de=rand(N1,dim)*(ub-lb)+lb;
pop_pso=rand(N2,dim)*(ub-lb)+lb;

%计算适应度值
for i=1:N1
f_de(i)=objfun(pop_de(N1,:));
end
for i=1:N2
f_pso(i)=objfun(pop_pso(N2,:));
end
%设置初始最优位置
if min(f_de)<min(f_pso)
    [fgbest r]=min(f_de);
    best=pop_de(r,:);
else
    [fgbest r]=min(f_pso);
    best=pop_pso(r,:);
end
function ret=Cross(pcross,lenchrom,chrom,sizepop,bound)
%本函数完成交叉操作
% pcorss                input  : 交叉概率
% lenchrom              input  : 染色体的长度
% chrom     input  : 染色体群
% sizepop               input  : 种群规模
% ret                   output : 交叉后的染色体
 for i=1:sizepop  %每一轮for循环中,可能会进行一次交叉操作,染色体是随机选择的,交叉位置也是随机选择的,%但该轮for循环中是否进行交叉操作则由交叉概率决定(continue控制)
     % 随机选择两个染色体进行交叉
     pick=rand(1,2);
     while prod(pick)==0
         pick=rand(1,2);
     end
     index=ceil(pick.*sizepop);
     % 交叉概率决定是否进行交叉
     pick=rand;
     while pick==0
         pick=rand;
     end
     if pick>pcross
         continue;
     end
         % 随机选择交叉位
         pick=rand;
         while pick==0
             pick=rand;
         end
         pos=ceil(pick.*sum(lenchrom)); %随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同
         pick=rand; %交叉开始
         
         v1=chrom(index(1),pos);
         v2=chrom(index(2),pos);
         chrom(index(1),pos)=pick*v2+(1-pick)*v1;
         chrom(index(2),pos)=pick*v1+(1-pick)*v2; %交叉结束
         % 判断边界条件
    for j=1:lenchrom
        if chrom(index(1),j)>bound(2)|chrom(index(1),j)<bound(1)
            chrom(index(1),j)=bound(1)+(bound(2)-bound(1))*rand;
        end
    end
    for j=1:lenchrom
        if chrom(index(2),j)>bound(2)|chrom(index(2),j)<bound(1)
            chrom(index(2),j)=bound(1)+(bound(2)-bound(1))*rand;
        end
    end
end
ret=chrom;

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

以上是关于优化算法差分蜂群优化算法(DEABC)含Matlab源码 1230期的主要内容,如果未能解决你的问题,请参考以下文章

优化分类基于matlab改进的人工蜂群算法优化SVM分类含Matlab源码 1833期

优化组合基于matlab人工蜂群算法求解投资优化组合问题含Matlab源码 2137期

优化组合基于matlab人工蜂群算法求解投资优化组合问题含Matlab源码 2137期

优化算法改进交叉算子的自适应人工蜂群黏菌算法(ISMA)含Matlab源码 2380期

优化算法多目标人工蜂群算法(MOABC)含Matlab源码 1236期

优化覆盖基于matlab人工蜂群算法求解无线网络传感覆盖优化问题含Matlab源码 1097期