粒子群算法实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析与设计实验报告
专业班号组别指导老师
姓名同组者
实验日期第十四周第 3 次实验
实验名称基于粒子群算法的函数优化问题
一、实验项目
基于粒子群算法的函数优化问题实验,在Windows下基于Matlab完成编程。

二、实验目的
粒子群算法,也称粒子群优化算法(Particle Swarm Optimization),缩写为PSO,是近年来发展起来的一种新的进化算法((Evolu2tionary Algorithm - EA)。

这种算
法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展
示了其优越性。

为学习其算法思想,有必要掌握并实现基于粒子群算法的函数优化问题
实验。

三、实验原理
粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究。

PSO同遗传算法类似,是一种基于迭代的优化算法。

系统初始化为一组随机解,通过
迭代搜寻最优值。

但是它没有遗传算法用的交叉(crossover)以及变异(mutation),而是粒子
在解空间追随最优的粒子进行搜索。

同遗传算法比较,PSO的优势在于简单容易实现并且
没有许多参数需要调整。

目前已广泛应用于函数优化,神经网络训练,模糊系统控制以及
其他遗传算法的应用领域。

四、实验内容
1、首先编写通用代码
粒子群测试各个函数的主代码写出来,对于不同的测试函数,只需要调用相应的测试函数即可,将各个函数做成.m的文件。

matlab源代码程序如下:
clear all;
clc;
format long;
%------给定初始化条件----------------------------------------------
c1=1.4902; %学习因子1
c2=1.4901; %学习因子2
w=0.7281; %惯性权重
MaxDT=1000; %最大迭代次数
D=5; %搜索空间维数(未知数个数)
N=40;
eps=10^(-6); %设置精度(在已知最小值时候用)
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
fori=1:N
for j=1:D
x(i,j)=randn; %随机初始化位置
v(i,j)=randn; %随机初始化速度
end
end
%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
fori=1:N
p(i)=function(x(i,:));
y(i,:)=x(i,:);
end
教师
评阅
意见
签名:
年月日
pg=x(1,:); %Pg为全局最优
fori=2:N
if function(x(i,:))<function(pg)
pg=x(i,:);
end
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
for t=1:MaxDT
fori=1:N
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
x(i,:)=x(i,:)+v(i,:);
if function(x(i,:))<p(i)
p(i)=function(x(i,:));
y(i,:)=x(i,:);
end
if p(i)<function(pg)
pg=y(i,:);
end
end
Pbest(t)=function(pg);
end
%------最后给出计算结果
disp('*************************************************************') disp('函数的全局最优位置为:')
Solution=pg'
plot(Solution)
disp('最后得到的优化极值为:')
Result=function(pg)
disp('*************************************************************')
2、对指定函数的优化
(1)Rastrigins.m文件代码如下,即Rastrigins测试函数;
function [out]=Rastrigin(x)
x=-5.12:0.01:5.12;
cos_in = cos(2*pi*x);
out= sum((x.^2-10*cos_in + 10), 2); 在matlab中运行结果如下:
函数的全局最优位置为:
Solution =
0.576475699699576
-0.860754225546370
1.220565827682626
1.420735482575301
0.552791439208896
最后得到的优化极值为:
Result =
1.899896389267265e+004
(2)函数
2
:使用粒子群算法对Griewank函数进行优化:
将下面代码保存成Griewank.m文件,代码如下:
Dx=length(in(1,:));
tlenx=length(in(:,1));
if isempty(D) | D~=Dx | tlen~=tlenx
D=Dx; % dimension of prob
tlen=tlenx; % how many separate states
d=repmat([1:D],tlen,1);
sqrtd=sqrt(d);
end
dat1= sum([(in-100).^2],2)./4000;
dat2 = prod( (cos( (in-100)./sqrtd )) ,2);
out = dat1 - dat2 + 1;
然后将主函数中的function替换成Griewank,然后在matlab中运行即可,运行结果如下:
函数的全局最优位置为:
Solution =
1.0e+002 *
0.089393835024922
1.355075075547163
0.945667645113542
1.188118773920475 0.929927307049068
最后得到的优化极值为:
Result =
2.497904795831135 (3)函数3:使用粒子群算法对Foxhole函数进行优化:将下面代码保存成Foxhole.m文件,代码如下:
function [out]=Foxhole(in)
%x=in(,1);
%y=in(,2);
term_sum=0;
x=in(:,1);
y=in(:,1);
a{1} = [...
-32 -16 0 16 32 ;...
-32 -16 0 16 32 ;...
-32 -16 0 16 32 ;...
-32 -16 0 16 32 ;...
-32 -16 0 16 32 ;...
];
a{2} = [...
-32 -32 -32 -32 -32 ;...
-16 -16 -16 -16 -16 ;...
0 0 0 0 0 ;...
16 16 16 16 16 ;...
32 32 32 32 32 ;...
];
term_sum=0;
for j=1 :numel((a{1}))
ax=a{1} (j);
ay=a{2} (j);
term_sum = (x - ax).^6 + (y - ay).^6;
term_sum=term_sum+ 1.0/(j+term_sum);
end
out = .002 + term_sum;
运行结果如下:
函数的全局最优位置为:
Solution =
31.999503320926419
6.742047876319869
-4.288120783678205
14.918070142918513
13.732644871242318
最后得到的优化极值为:
Result =
0.042000000000000。

相关文档
最新文档