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

举报
海神之光 发表于 2022/05/29 01:48:59 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【优化算法】差分蜂群优化算法(DEABC)【含Matlab源码 1230期】 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭支付凭证,私...

一、获取代码方式

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

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

备注:
订阅紫极神光博客付费专栏,可免费获得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;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133

三、运行结果

在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

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

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/121321085

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。