%文化算法源程序
clear all
close all
%初始化算法参数
m=10;
n=1;
Nmax=50;
xrange=[-5 5];
kv=0.1;
xspan=xrange(2)-xrange(1);
vrange=[-kv*xspan kv*xspan];
c1=2;
c2=2;
fixp=0.2;
X=zeros(m,n);
V=zeros(m,n);
gbest=zeros(Nmax,n);
gbestf=zeros(Nmax,n);
av=zeros(Nmax,n);
VN=zeros(n,4);
N=1;
fv=zeros(m,1);
%初始化粒子位置、速度
for i=1:m
for j=1:n
X(i,j)=xrange(1)+rand*(xrange(2)-xrange(1));
V(i,j)=vrange(1)+rand*(vrange(2)-vrange(1));
end
fv(i,1)=X(i,1)+5*sin(5*X(i,1))+7*cos(2*X(i,1));
end
pbest=X;
pbestf=fv;
gbestf(N,1)=min(pbestf);
findp=find(pbestf==gbestf(N,1));
gbest(N,n)=pbest(findp(1));
gb=gbest(N,n);
gbv=gbestf(N,1);
av(N,1)=mean(fv);
bestN=1;
%初始化信都空间
Naccept=ceil((fixp+fixp/N)*m);
acceptpool=zeros(1,Naccept);
acceptX=zeros(Naccept,n);
acceptf=fv;
fvmax=max(acceptf);
fvmin=min(acceptf);
findnum=find(acceptf==fvmin);
acceptpool(1)=findnum(1);
acceptX(1,:)=X(acceptpool(1),:);
acceptf(acceptpool(1))=fvmax;
for i=2:Naccept
fvmin=min(acceptf);
findnum=find(acceptf==fvmin);
acceptpool(i)=findnum(1);
acceptX(i,:)=X(acceptpool(i),:);
acceptf(acceptpool(i))=fvmax;
end
for i=1:n
lowv=min(acceptX(:,i));
lower1=find(X(:,i)==lowv);
lower=lower1(1);
VN(i,1)=X(lower,i);
VN(i,3)=fv(lower);
upv=max(acceptX(:,i));
uper1=find(X(:,i)==upv);
uper=uper1(1);
VN(i,2)=X(uper,i);
VN(i,4)=fv(uper);
end
%循环迭代
for N=2:Nmax
for j=1:n
xspan=abs(VN(j,2)-VN(j,1));
vrange=[-kv*xspan kv*xspan];
for i=1:m
V(i,j)=V(i,j)+c1*rand*(pbest(i,j)-X(i,j))+c2*rand*(gb(1,j)-X(i,j));
if V(i,j)<vrange(1)
V(i,j)=vrange(1);
elseif V(i,j)>vrange(2)
V(i,j)=vrange(2);
end
if X(i,j)<VN(1,3)
X(i,j)=X(i,j)+abs(V(i,j));
elseif X(i,j)>VN(1,4)
X(i,j)=X(i,j)-abs(V(i,j));
else
X(i,j)=X(i,j)+V(i,j);
end
end
if X(i,j)<xrange(1)
X(i,j)=xrange(1);
elseif X(i,j)>xrange(2)
X(i,j)=xrange(2);
end
end
end
%计算每个粒子的适应度值
for i=1:m
fv(i,1)=X(i,1)+5*sin(5*X(i,1))+7*cos(2*X(i,1));
if fv(i,1)<pbestf(i,1)
pbestf(i,1)=fv(i,1);
pbest(i,1)=X(i,1);
end
end
%更新全局最优
minpbf=min(pbestf)
if minpbf<gbv
gbv=minpbf
findp=find(pbestf==gbv);
gb=pbest(findp(1));
bestN=N;
end
av(N,1)=mean(fv);
gbest(N,1)=gb;
gbestf(N,1)=gbv;
%每五代更新一次信度空间
if mod(N,5)==0
Naccept=ceil((fixp+fixp/N)*m);
acceptpool=zeros(1,Naccept);
acceptX=zeros(Naccept,n);
acceptf=fv;
fvmax=max(acceptf);
fvmin=min(acceptf);
findnum=find(acceptf==fvmin);
acceptpool(1)=findnum(1);
acceptX(1,:)=X(acceptpool(1),:);
acceptf(acceptpool(1))=fvmax;
for i=2:Naccept
fvmin=min(acceptf);
findnum=find(acceptf==fvmin);
acceptpool(i)=findnum(1);
acceptX(i,:)=X(acceptpool(i),:);
acceptf(acceptpool(i))=fvmax;
end
for i=1:n
lowv=min(acceptX(:,i));
lower1=find(X(:,i)==lowv);
lower=lower1(1);
if (X(lower,i)<VN(i,1))||(fv(lower)<VN(i,3))
VN(i,1)=X(lower,i);
VN(i,3)=fv(lower);
end
upv=max(acceptX(:,i));
uper1=find(X(:,i)==upv);
uper=uper1(1);
if (X(uper,i)>VN(i,2))||(fv(uper)<VN(i,4))
VN(i,2)=X(uper,i);
VN(i,4)=fv(uper);
end
end
end
bestN
gbv
figure(1)
n=1:Nmax
plot(n,gbestf,n,gbestf)
title('global best fitness of each iteration')
figure(2)
n=1:Nmax;
plot(n,av,n,av)
title('average fitness of each iteration')
wenhua.zip_cultural algorithm_文化算法_文化群
版权申诉
52 浏览量
2022-09-21
08:27:11
上传
评论
收藏 1KB ZIP 举报
邓凌佳
- 粉丝: 66
- 资源: 1万+
最新资源
- 运算放大器基础.pdf
- 本仓库包含我们队伍2019年数模美赛题目A、我们的代码及论文
- 基于JavaWeb图书管理系统课程设计软件源码+数据库+实验报告
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6172.0)
- WesternDigital-SSD-Dashboard-v4.2.2.5
- 计算机视觉,课后习题部分解答(章毓晋)
- “推荐系统”相关资源推荐
- 软件工程期末复习笔记 快速冲刺
- 毕业设计基于Spring Boot的健身房管理系统源码+数据库+使用文档(高分项目)
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6170.3)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0