带交叉因子的粒子群优化算法MATLAB源程序.docx
- 文档编号:26360557
- 上传时间:2023-06-18
- 格式:DOCX
- 页数:10
- 大小:16.59KB
带交叉因子的粒子群优化算法MATLAB源程序.docx
《带交叉因子的粒子群优化算法MATLAB源程序.docx》由会员分享,可在线阅读,更多相关《带交叉因子的粒子群优化算法MATLAB源程序.docx(10页珍藏版)》请在冰豆网上搜索。
带交叉因子的粒子群优化算法MATLAB源程序
带交叉因子的粒子群优化算法matlab源程序(2009-08-2811:
05:
06)
标签:
分类:
程序源代码:
其中文件,也就是主程序如下
%-----------------------------------------------
%------名称:
带交叉因子的改进PSO算法
%------功能:
求解多维无约束优化问题
%------特点:
收敛性强,还可以加入变异算子
%------作者:
孙明杰<>
%------单位:
中国矿业大学计算数学硕2005
%------日期:
2006年8月26日
%-----------------------------------------------
%格式标准化
clearall;
clc;
formatlong;
%初始化各个因子
c1=; %学习因子c1
c2=; %学习因子c2
w=; %惯性权重w
N=20; %粒子群规模
D=6; %搜索空间维数(本程序适合3维及以上,不能求解1,2维)
eps=10^(-6); %满足条件限制的误差(在不知道最小值时候不用设置)
MaxDT=500; %粒子群繁殖的代数
%初始化粒子的速度和位置,数据结构用矩阵A表示
fori=1:
N
forj=1:
2*D
A(i,j)=rand;
end
end
fori=1:
N
forj=2*D+1:
3*D
A(i,j)=A(i,j-2*D);
end
end
%计算各个粒子的适应度
fori=1:
N
A(i,3*D+1)=fitness(A(i,1:
D),D);
end
%对粒子的适应度进行排序
B=sortrows(A,3*D+1);
%排序后适应度低的前面一半粒子直接进入下一代
NextGeneration=zeros(N,3*D+1);
fori=1:
N/2
forj=1:
3*D+1
NextGeneration(i,j)=B(i,j);
end
end
%后一半粒子进行遗传选择和交叉操作
fori=1:
N/2
forj=1:
3*D+1
Cross(i,j)=B(i+N/2,j);
end
end
%产生一个随机的交叉位置
fori=1:
N/4
Anumber=randperm(D-1);
ifAnumber
(1)~=1
position=Anumber
(1);
else
position=Anumber
(2);
end
%交叉进行
forj=position:
D-1
temp=Cross(i,j);
Cross(i,j)=Cross(N/2-i+1,j);
Cross(N/2-i+1,j)=temp;
end
end
%交叉结束,进行更新
fori=1:
N/2
Cross(i,3*D+1)=fitness(Cross(i,1:
D),D);
ifCross(i,3*D+1)
forj=2*D+1:
3*D
Cross(i,j)=Cross(i,j-2*D);
end
else
forj=2*D+1:
3*D
Cross(i,j)=B(i,j);
end
end
end
%下面选择最好的粒子N/2个进入下一代
Pool=zeros(N,3*D+1);
fori=1:
N/2
forj=1:
3*D+1
Pool(i,j)=B(i+N/2,j);
end
end
fori=1+N/2:
N
forj=1:
3*D+1
Pool(i,j)=Cross(i-N/2,j);
end
end
%POOLX表示排序后的粒子选择池
PoolX=sortrows(Pool,3*D+1);
fori=1+N/2:
N
forj=1:
3*D+1
NextGeneration(i,j)=PoolX(i-N/2,j);
end
end
Pbest=NextGeneration(i,2*D+1:
3*D);
fori=2:
N
ifNextGeneration(i,3*D+1) Pbest=NextGeneration(i,2*D+1: 3*D); end end %根据粒子群公式进行迭代(StanderPSOStep) %速度更新 fori=1: N forj=D+1: 2*D A(i,j)=w*NextGeneration(i,j)+c1*rand*(NextGeneration(i,j+D)-NextGeneration(i,j-D))+c2*rand*(Pbest(j-D)-NextGeneration(i,j-D)); end end %位置更新 fori=1: N forj=1: D A(i,j)=NextGeneration(i,j)+A(i,j+D); end A(i,3*D+1)=fitness(A(i,1: D),D); ifA(i,3*D+1) forj=2*D+1: 3*D A(i,j)=A(i,j-2*D); end else forj=2*D+1: 3*D A(i,j)=NextGeneration(i,j-2*D); end end end %下面进入主要循环,循环到最大次数得到最优解和最小值 %DDTime=1; fortime=1: MaxDT B=sortrows(A,3*D+1); NextGeneration=zeros(N,3*D+1); fori=1: N/2 forj=1: 3*D+1 NextGeneration(i,j)=B(i,j); end end %遗传选择交叉 fori=1: N/2 forj=1: 3*D+1 Cross(i,j)=B(i+N/2,j); end end fori=1: N/4 Anumber=randperm(D-1); ifAnumber (1)~=1 position=Anumber (1); else position=Anumber (2); end forj=position: D-1 temp=Cross(i,j); Cross(i,j)=Cross(N/2-i+1,j); Cross(N/2-i+1,j)=temp; end end %交叉结束,进行更新 fori=1: N/2 Cross(i,3*D+1)=fitness(Cross(i,1: D),D); ifCross(i,3*D+1) forj=2*D+1: 3*D Cross(i,j)=Cross(i,j-2*D); end else forj=2*D+1: 3*D Cross(i,j)=B(i,j); end end end %下面选择最好的粒子N/2个进入下一代 Pool=zeros(N,3*D+1); fori=1: N/2 forj=1: 3*D+1 Pool(i,j)=B(i+N/2,j); end end fori=1+N/2: N forj=1: 3*D+1 Pool(i,j)=Cross(i-N/2,j); end end PoolX=sortrows(Pool,3*D+1); fori=1+N/2: N forj=1: 3*D+1 NextGeneration(i,j)=PoolX(i-N/2,j); end end Pbest=NextGeneration(i,2*D+1: 3*D); fori=2: N ifNextGeneration(i,3*D+1) Pbest=NextGeneration(i,2*D+1: 3*D); end end %根据粒子群公式进行迭代 fori=1: N forj=D+1: 2*D A(i,j)=w*NextGeneration(i,j)+c1*rand*(NextGeneration(i,j+D)-NextGeneration(i,j-D))+c2*rand*(Pbest(j-D)-NextGeneration(i,j-D)); end end fori=1: N forj=1: D A(i,j)=NextGeneration(i,j)+A(i,j+D); end A(i,3*D+1)=fitness(A(i,1: D),D); ifA(i,3*D+1) forj=2*D+1: 3*D A(i,j)=A(i,j-2*D); end else forj=2*D+1: 3*D A(i,j)=NextGeneration(i,j-2*D); end end end Pg(time)=fitness(Pbest,D); %DDTime=DDTime+1; %iffitness(Pbest,D) %break; %end end %算法结束,得到的结果显示如下: disp('****************************************************') disp('最后得到的最优位置为: ') X=Pbest' disp('得到的函数最小值为: ') Minimize=fitness(Pbest,D) disp('****************************************************') %绘制进化代数和适应度关系曲线图 xx=linspace(1,MaxDT,MaxDT); yy=Pg(xx); plot(xx,yy,'b-') holdon gridon title('带交叉因子的粒子群优化算法进化代数与适应度值关系曲线图') legend('粒子适应度曲线走势')
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交叉 因子 粒子 优化 算法 MATLAB 源程序