BasicPSO 求解无约束优化的粒子群算法基本程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%用基本粒子群算法解决无约束优化问题.
%调用格式 [xm, fv] = PSO(fitness,N,c1,c2,w,M,D).
%fitness :待优化的目标函数.
%N 粒子数目; c1 学习因子1; c2 学习因子2; w 惯性权重; M 最大迭代次数; D 自变量个数.
%xm 目标函数取最小值时的自变量的值; fv 目标函数的最小值.
function [xm,fv]= PSO(fitness, N,c1,c2,w,M,D)
format long;
x=zeros(N,D);y=zeros(N,D);v=zeros(N,D);
p=zeros(1,N);%先预分配内存,提高运算速度.
%初始化粒子群
for i= 1:N
for j=1:D
x(i,j)=randn;%随机初始化位置
v(i,j)=randn;%随机初始化速度
end
end
%计算适应度函数
for i=1:N %p(i)存储个体极值; y(i,:)存储个体的极值点.
p(i)=fitness(x(i,:));
y(i,:)=x(i,:);
end
pg = x(N,:); %pg 为全局最优 ;初始不妨设第N个粒子最优
for i=1:N-1 %更新全局最优点
if fitness(x(i,:)) < fitness(pg)
pg=x(i,:);
end
end
for t= 1:M %迭代M次
for i=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 fitness(x(i,:))
p(i) = fitness(x(i,:));
y(i,:) = x(i,:);
end
if p(i)
end
end
end
xm=pg';
fv=fitness(pg);