搜档网
当前位置:搜档网 › 粒子群算法程序(各段路的速度不同)

粒子群算法程序(各段路的速度不同)

粒子群算法程序(各段路的速度不同)
粒子群算法程序(各段路的速度不同)

1.用粒子群算法求解路径最短时的路径

tic

K=3;%车辆数

D=200;%粒子群中粒子的个数

Q=1000;%每辆车的容量

w=;%w为惯性因子

c1=;%正常数,称为加速因子

c2=;%正常数,称为加速因子

Loop_max=50;%最大迭代次数

%初始化城市坐标

City=[18,54;22,60;58,69;71,71;83,46;91,38;24,42;18,40];

n=size(City,1);%城市个数,包含中心仓库

N=n-1;%发货点任务数

for i=1:n

for j=1:n

Distance(i,j)= sqrt((City(i,1)-City(j,1))^2+(City(i,2)-City(j,2))^2);%各城市节点之间的距离矩阵

end

end

v=[20,20,20,21,21,19,20,20;20,20,19,20,19,21,20,21;20,19,20,20,20,20,21,20;21,2 0,20,19,20,21,21,21;21,19,20,20,20,21,21,20;19,21,20,21,21,20,20,21;20,20,21,21 ,21,20,19,20;20,21,20,21,20,21,20,20];

for i=1:8

for j=1:8

if i==j

v(i,j)=0;

end

end

end

g=[0, 890,140,280,330,210,410,570];%各发货点的货运量

%初始化粒子群

for i=1:D

for j=1:N

Xv(i,j)=randi(K,1);%初始化粒子群中粒子的位置

Vv(i,j)=randi(2*K-1,1)-K;%初始化粒子群中粒子的位置变化率

Vr(i,j)=randi(2*N-1,1)-N;%初始化粒子群中离子的位置变化率

Xvl(i,j)=Xv(i,j);%初始化粒子群中每个粒子的最优位置

end

end

for i=1:D

a=randperm(N);

for j=1:N

Xr(i,j)=a(j);%初始化粒子群中粒子的位置

Xrl(i,j)=Xr(i,j);%初始化粒子群中每个粒子的最优位置

end

end

Lg=100000;%初始化最优粒子对应的配送方案的总路径长度

Xvg=ones(1,N);%粒子群中最优的粒子

Xrg=ones(1,N);%粒子群中最优的粒子

Loop=1;%迭代计数器

while Loop<=Loop_max%循环终止条件

%对粒子群中的每个粒子进行评价

for i=1:D

k1=find(1==Xv(i,:));%找出第一辆车配送的城市编号

nb1=size(k1,2);%计算第一辆车配送城市的个数

if nb1>0%判断第一辆车配送城市个数是否大于0,如果大于0则

a1=[Xr(i,k1(:))];%找出第一辆车配送城市顺序号

b1=sort(a1);%对找出第一辆车的顺序号进行排序

G1(i)=0;%初始化第一辆车的配送量

k51=[];

am=[];

for j1=1:nb1

am=find(b1(j1)==Xr(i,:));

k51(j1)=intersect(k1,am);%计算第一辆车配送城市的顺序号

G1(i)=G1(i)+g(k51(j1)+1);%计算第一辆车的配送量

end

k61=[];

k61=[0,k51,0];%定义第一辆车的配送路径

L1(i)=0;%初始化第一辆车的配送路径长度

for k11=1:nb1+1

L1(i)=L1(i)+Distance(k61(k11)+1,k61(k11+1)+1);%计算第一辆车的配送路径长度end

else%如果第一辆车配送的城市个数不大于0则

G1(i)=0;%第一辆车的配送量设为0

L1(i)=0;%第一辆车的配送路径长度设为0

end

k2=find(2==Xv(i,:));%找出第二辆车配送的城市编号

nb2=size(k2,2);%计算第二辆车配送城市的个数

if nb2>0%判断第二辆车配送城市个数是否大于0,如果大于0则

a2=[Xr(i,k2(:))];%找出第二辆车配送城市的顺序号

b2=sort(a2);%对找出的第二辆车的顺序号进行排序

G2(i)=0;%初始化第二辆车的配送量

k52=[];

bm=[];

for j2=1:nb2

bm=find(b2(j2)==Xr(i,:));

k52(j2)=intersect(k2,bm);%计算第二辆车配送城市的顺序号

G2(i)=G2(i)+g(k52(j2)+1);%计算第二辆车的配送量

end

k62=[];

k62=[0,k52,0];%定义第二辆车的配送路径

L2(i)=0;%初始化第二辆车的配送路径长度

for k22=1:nb2+1

L2(i)=L2(i)+Distance(k62(k22)+1,k62(k22+1)+1);%计算第二辆车的路径长度

end

else%如果第二辆车配送的城市个数不大于0则

G2(i)=0;%第二辆车的配送量设为0

L2(i)=0;%第二辆车的配送路径长度设为0

end

k3=find(3==Xv(i,:));%找出第三辆车配送的城市编号

nb3=size(k3,2);%计算第三辆车配送城市的个数

if nb3>0%判断第三辆车配送城市个数是否大于0,如果大于0则

a3=[Xr(i,k3(:))];%找出第三辆车配送城市的顺序号

b3=sort(a3);%对找出的第三辆车的顺序号进行排序

G3(i)=0;%初始化第三辆车的配送量

k53=[];

cm=[];

for j3=1:nb3

cm=find(b3(j3)==Xr(i,:));

k53(j3)=intersect(k3,cm);%计算第三辆车配送城市的顺序号

G3(i)=G3(i)+g(k53(j3)+1);%计算第三辆车的配送量

end

k63=[];

k63=[0,k53,0];%定义第三辆车的配送路径

L3(i)=0;%初始化第三辆车的配送路径长度

for k33=1:nb3+1

L3(i)=L3(i)+Distance(k63(k33)+1,k63(k33+1)+1);%计算第三辆车的路径长度

end

else%如果第三辆车配送的城市个数不大于0则

G3(i)=0;%第三辆车的配送量设为0

L3(i)=0;%第三辆车的配送路径长度设为0

end

L(i)=0;%初始化每个粒子对应的配送方案总路径长度

L(i)=L1(i)+L2(i)+L3(i);%计算每个粒子对应的配送方案总路径长度

if L(i)

Xvg(:)=Xv(i,:);%将粒子i设为历史最优粒子

Xrg(:)=Xr(i,:);%将粒子i设为历史最优粒子

Lg=L(i);%将粒子i的总路径长度设为最优粒子对应的配送方案的总路径长度

else

Xvg(:)=Xvg(:);%最优粒子保持不变

Xrg(:)=Xrg(:);%最优粒子保持不变

Lg=Lg;%最优粒子所对应的配送方案的总路径长度也不变

end

Limin(i)=;%初始化每个粒子代表的配送方案的历史最优总路径长度

if L(i)

Limin(i)=L(i);%更新本次循环得到的总路径长度为粒子i的历史最优路径长度

Xvl(i,:)=Xv(i,:);%更新本次得到的粒子i为i粒子的历史最优位置

Xrl(i,:)=Xr(i,:); %更新本次得到的粒子i为i粒子的历史最优位置

else%否则,保持粒子i的历史最优位置及历史最优路径长度不变

Limin(i)=LL(i);

Xvl(i,:)=Xv1(i,:);

Xrl(i,:)=Xr1(i,:);

end

end

%记录本次循环得到的所有粒子的位置

for i=1:D

for j=1:N

Xv1(i,j)=Xvl(i,j);%记录本次循环得到的所有粒子的位置

Xr1(i,j)=Xrl(i,j);%记录本次循环得到的所有离子的位置

end

end

LL(i)=0;%初始化每个粒子的历史最优路径总长度

for i=1:D

LL(i)=Limin(i);%对每个粒子的历史最优路径总长度进行赋值

end

%对粒子群中每个粒子进行迭代

for i=1:D

for j=1:N

Vv(i,j)=w*Vv(i,j)+c1*rand(1)*(Xvl(i,j)-Xv(i,j))+c2*rand(1)*(Xvg(1,j)-Xv(i,j));%计算位置变化率

Vr(i,j)=w*Vr(i,j)+c1*rand(1)*(Xrl(i,j)-Xr(i,j))+c2*rand(1)*(Xrg(1,j)-Xr(i,j));%计算位置变化率

%Vv(i,j)和Vr(i,j)进行上下限的限制

if Vv(i,j)>K-1

Vv(i,j)=K-1;

elseif Vv(i,j)<1-K

Vv(i,j)=1-K;

else

Vv(i,j)=Vv(i,j);

end

end

end

for i=1:D

for j=1:N

Xv(i,j)=ceil(Xv(i,j)+Vv(i,j));%更新位置坐标

%对Xv(i,j)进行上下限的限制

if Xv(i,j)>K

Xv(i,j)=K;

elseif Xv(i,j)<1

Xv(i,j)=1;

else

Xv(i,j)=Xv(i,j);

end

Xr(i,j)=Xr(i,j)+Vr(i,j);%更新位置坐标

end

end

zx(Loop)=Lg;

Loop=Loop+1;

end

Xvg%输出粒子群中的最优粒子

Xrg%输出粒子群中的最优粒子

Lg%输出最优粒子所代表方案的总路径长度

Loop%输出迭代的次数

%计算最优粒子所代表的配送方案

k1=find(1==Xvg(:));%找出第一辆车配送的城市编号

k1=k1';

nb1=size(k1,2);%计算第一辆车配送城市的个数

if nb1>0%判断第一辆车配送城市个数是否大于0,如果大于0则

a1=[Xrg(k1(:))];%找出第一辆车配送城市顺序号

b1=sort(a1);%对找出第一辆车的顺序号进行排序

G1=0;%初始化第一辆车的配送量

k51=[];

am=[];

for j1=1:nb1

am=find(b1(j1)==Xrg(:));

k51(j1)=intersect(k1,am);%计算第一辆车配送城市的顺序号

G1=G1+g(k51(j1)+1);%计算第一辆车的配送量

end

k61=[];

k61=[0,k51,0];%定义第一辆车的配送路径

L1=0;%初始化第一辆车的配送路径长度

for k11=1:nb1+1

L1=L1+Distance(k61(k11)+1,k61(k11+1)+1);%计算第一辆车的配送路径长度end

else%如果第一辆车配送的城市个数不大于0则

G1=0;%第一辆车的配送量设为0

L1=0;%第一辆车的配送路径长度设为0

end

k2=find(2==Xvg(:));%找出第二辆车配送的城市编号

k2=k2';

nb2=size(k2,2);%计算第二辆车配送城市的个数

if nb2>0%判断第二辆车配送城市个数是否大于0,如果大于0则

a2=[Xrg(k2(:))];%找出第二辆车配送城市的顺序号

b2=sort(a2);%对找出的第二辆车的顺序号进行排序

G2=0;%初始化第二辆车的配送量

k52=[];

bm=[];

for j2=1:nb2

bm=find(b2(j2)==Xrg(:));

k52(j2)=intersect(k2,bm);%计算第二辆车配送城市的顺序号

G2=G2+g(k52(j2)+1);%计算第二辆车的配送量

end

k62=[];

k62=[0,k52,0];%定义第二辆车的配送路径

L2=0;%初始化第二辆车的配送路径长度

for k22=1:nb2+1

L2=L2+Distance(k62(k22)+1,k62(k22+1)+1);%计算第二辆车的路径长度end

else%如果第二辆车配送的城市个数不大于0则

G2=0;%第二辆车的配送量设为0

L2=0;%第二辆车的配送路径长度设为0

end

k3=find(3==Xvg(:));%找出第三辆车配送的城市编号

k3=k3';

nb3=size(k3,2);%计算第三辆车配送城市的个数

if nb3>0%判断第三辆车配送城市个数是否大于0,如果大于0则

a3=[Xrg(k3(:))];%找出第三辆车配送城市的顺序号

b3=sort(a3);%对找出的第三辆车的顺序号进行排序

G3=0;%初始化第三辆车的配送量

k53=[];

cm=[];

for j3=1:nb3

cm=find(b3(j3)==Xrg(:));

k53(j3)=intersect(k3,cm);%计算第三辆车配送城市的顺序号

G3=G3+g(k53(j3)+1);%计算第三辆车的配送量

end

k63=[];

k63=[0,k53,0];%定义第三辆车的配送路径

L3=0;%初始化第三辆车的配送路径长度

for k33=1:nb3+1

L3=L3+Distance(k63(k33)+1,k63(k33+1)+1);%计算第三辆车的路径长度end

粒子群优化算法及其参数设置

毕业论文 题目粒子群算法及其参数设置专业信息与计算科学 班级计算061 学号3060811007 学生xx 指导教师徐小平 2016年 I

粒子群优化算法及其参数设置 专业:信息与计算科学 学生: xx 指导教师:徐小平 摘要 粒子群优化是一种新兴的基于群体智能的启发式全局搜索算法,粒子群优化算法通过粒子间的竞争和协作以实现在复杂搜索空间中寻找全局最优点。它具有易理解、易实现、全局搜索能力强等特点,倍受科学与工程领域的广泛关注,已经成为发展最快的智能优化算法之一。论文介绍了粒子群优化算法的基本原理,分析了其特点。论文中围绕粒子群优化算法的原理、特点、参数设置与应用等方面进行全面综述,重点利用单因子方差分析方法,分析了粒群优化算法中的惯性权值,加速因子的设置对算法基本性能的影响,给出算法中的经验参数设置。最后对其未来的研究提出了一些建议及研究方向的展望。 关键词:粒子群优化算法;参数;方差分析;最优解 II

Particle swarm optimization algorithm and its parameter set Speciality: Information and Computing Science Student: Ren Kan Advisor: Xu Xiaoping Abstract Particle swarm optimization is an emerging global based on swarm intelligence heuristic search algorithm, particle swarm optimization algorithm competition and collaboration between particles to achieve in complex search space to find the global optimum. It has easy to understand, easy to achieve, the characteristics of strong global search ability, and has never wide field of science and engineering concern, has become the fastest growing one of the intelligent optimization algorithms. This paper introduces the particle swarm optimization basic principles, and analyzes its features. Paper around the particle swarm optimization principles, characteristics, parameters settings and applications to conduct a thorough review, focusing on a single factor analysis of variance, analysis of the particle swarm optimization algorithm in the inertia weight, acceleration factor setting the basic properties of the algorithm the impact of the experience of the algorithm given parameter setting. Finally, its future researched and prospects are proposed. Key word:Particle swarm optimization; Parameter; Variance analysis; Optimal solution III

(完整word版)基本粒子群算法的原理和matlab程序

基本粒子群算法的原理和matlab程序 作者——niewei120(nuaa) 一、粒子群算法的基本原理 粒子群优化算法源自对鸟群捕食行为的研究,最初由Kennedy和Eberhart提出,是一种通用的启发式搜索技术。一群鸟在区域中随机搜索食物,所有鸟知道自己当前位置离食物多远,那么搜索的最简单有效的策略就是搜寻目前离食物最近的鸟的周围区域。PSO 算法利用这种模型得到启示并应用于解决优化问题。PSO 算法中,每个优化问题的解都是粒子在搜索 空间中的位置,所有的粒子都有一个被优化的目标函数所决定的适应值,粒子还有一个速度值决定它们飞翔的方向和距离,然后粒子群就追随当前的最优粒子在解空间中搜索。 PSO 算法首先在给定的解空间中随机初始化粒子群,待优化问题的变量数决定了解空间的维数。每个粒子有了初始位置与初始速度。然后通过迭代寻优。在每一次迭代中,每个粒子通过跟踪两个“极值”来更新自己在解空间中的空间位置与飞翔速度。第一个极值就是单个粒子本身在迭代过程中找到的最优解粒子,这个粒子叫做个体极值。另一个极值是种群所有粒子在迭代过程中所找到的最优解粒子,这个粒子是全局极值。上述的方法叫全局粒子群算法。如果不用种群所有粒子而只用其中一部分作为该粒子的邻居粒子,那么在所有邻居粒子中的极值就是局部极值,该方法称为局部PSO 算法。 速度、位置的更新方程表示为: 每个粒子自身搜索到的历史最优值p i ,p i=(p i1,p i2,....,p iQ),i=1,2,3,....,n。所有粒子搜索到的最优值p g,p g=(p g1,p g2,....,p gQ),注意这里的p g只有一个。 是保持原来速度的系数,所以叫做惯性权重。 是粒子跟踪自己历史最优值的权重系数,它表示粒子自身的认识,所以叫“认知”。通常设置为2。 是粒子跟踪群体最优值的权重系数,它表示粒子对整个群体知识的认识,所以叫做“社会知识”,经常叫做“社会”。通常设置为2。 是[0,1]区间内均匀分布的随机数。 是对位置更新的时候,在速度前面加的一个系数,这个系数我们叫做约束因子。通常设 置为1 。

基本粒子群算法的matlab源程序

主函数源程序(main.m) %------基本粒子群优化算法(Particle Swarm Optimization)-----------%------名称:基本粒子群优化算法(PSO) %------作用:求解优化问题 %------说明:全局性,并行性,高效的群体智能算法 %------初始格式化--------------------------------------------------clear all; clc; format long; %------给定初始化条件---------------------------------------------- c1=1.4962;%学习因子1 c2=1.4962;%学习因子2 w=0.7298;%惯性权重 MaxDT=1000;%最大迭代次数 D=10;%搜索空间维数(未知数个数) N=40;%初始化群体个体数目 eps=10^(-6);%设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)------------for i=1:N for j=1:D x(i,j)=randn;%随机初始化位置 v(i,j)=randn;%随机初始化速度 end end %------先计算各个粒子的适应度,并初始化Pi和Pg----------------------for i=1:N p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end pg=x(1,:);%Pg为全局最优 for i=2:N if fitness(x(i,:),D) pg=x(i,:); end end %------进入主要循环,按照公式依次迭代,直到满足精度要求------------for t=1:MaxDT 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,:),D) p(i)=fitness(x(i,:),D); y(i,:)=x(i,:);

用粒子群算法求解多目标优化问题的Pareto解

粒子群算法程序 tic D=10;%粒子群中粒子的个数 %w=0.729;%w为惯性因子 wmin=1.2; wmax=1.4; c1=1.49445;%正常数,成为加速因子 c2=1.49445;%正常数,成为加速因子 Loop_max=50;%最大迭代次数 %初始化粒子群 for i=1:D X(i)=rand(1)*(-5-7)+7; V(i)=1; f1(i)=X(i)^2; f2(i)=(X(i)-2)^2; end Loop=1;%迭代计数器 while Loop<=Loop_max%循环终止条件 %对粒子群中的每个粒子进行评价 for i=1:D k1=find(1==Xv(i,:));%找出第一辆车配送的城市编号 nb1=size(k1,2);%计算第一辆车配送城市的个数 if nb1>0%判断第一辆车配送城市个数是否大于0,如果大于0则 a1=[Xr(i,k1(:))];%找出第一辆车配送城市顺序号 b1=sort(a1);%对找出第一辆车的顺序号进行排序 G1(i)=0;%初始化第一辆车的配送量 k51=[]; am=[]; for j1=1:nb1 am=find(b1(j1)==Xr(i,:)); k51(j1)=intersect(k1,am);%计算第一辆车配送城市的顺序号 G1(i)=G1(i)+g(k51(j1)+1);%计算第一辆车的配送量 end k61=[]; k61=[0,k51,0];%定义第一辆车的配送路径 L1(i)=0;%初始化第一辆车的配送路径长度 for k11=1:nb1+1 L1(i)=L1(i)+Distance(k61(k11)+1,k61(k11+1)+1);%计算第一辆车的配送路径长度end else%如果第一辆车配送的城市个数不大于0则 G1(i)=0;%第一辆车的配送量设为0 L1(i)=0;%第一辆车的配送路径长度设为0 end

(完整word版)基本粒子群算法的原理和matlab程序.doc

基本粒子群算法的原理和matlab 程序 作者—— niewei120 (nuaa) 一、粒子群算法的基本原理 粒子群优化算法源自对鸟群捕食行为的研究,最初由Kennedy 和 Eberhart 提出,是一种通 用的启发式搜索技术。一群鸟在区域中随机搜索食物,所有鸟知道自己当前位置离食物多远, 那么搜索的最简单有效的策略就是搜寻目前离食物最近的鸟的周围区域。PSO 算法利用这种模型得到启示并应用于解决优化问题。PSO 算法中,每个优化问题的解都是粒子在搜索 空间中的位置,所有的粒子都有一个被优化的目标函数所决定的适应值,粒子还有一个速度值决定它们飞翔的方向和距离,然后粒子群就追随当前的最优粒子在解空间中搜索。 PSO 算法首先在给定的解空间中随机初始化粒子群,待优化问题的变量数决定了解空间的维数。每个粒子有了初始位置与初始速度。然后通过迭代寻优。在每一次迭代中,每个粒子通过跟踪两个“极值”来更新自己在解空间中的空间位置与飞翔速度。第一个极值就是单个粒子本身在迭代过程中找到的最优解粒子,这个粒子叫做个体极值。另一个极值是种群所有粒子在迭代过程中所找到的最优解粒子,这个粒子是全局极值。上述的方法叫全局粒子群算法。如果不用种群所有粒子而只用其中一部分作为该粒子的邻居粒子,那么在所有邻居粒子中的极值就是局部极值,该方法称为局部PSO 算法。 速度、位置的更新方程表示为: 每个粒子自身搜索到的历史最优值p i,p i=(p i1 ,p i2 ,....,p iQ ), i=1,2,3,....,n 。所有粒子搜索到的最优值p g, p g=(p g1 ,p g2,....,p gQ ),注意这里的p g只有一个。 是保持原来速度的系数,所以叫做惯性权重。 是粒子跟踪自己历史最优值的权重系数,它表示粒子自身的认识,所以叫“认知”。通常设置为 2 。 是粒子跟踪群体最优值的权重系数,它表示粒子对整个群体知识的认识,所以叫做“社会知识”,经常叫做“社会”。通常设置为2。 是[0,1] 区间内均匀分布的随机数。 是对位置更新的时候,在速度前面加的一个系数,这个系数我们叫做约束因子。通常设 置为 1 。

粒子群算法基本原理

4.1粒子群算法基本原理 粒子群优化算法[45]最原始的工作可以追溯到1987年Reynolds 对鸟群社会系统Boids (Reynolds 对其仿真鸟群系统的命名)的仿真研究 。通常,群体的行为可以由几条简单的规则进行建模,虽然每个个体具有简单的行为规则,但是却群体的行为却是非常的复杂,所以他们在鸟类仿真中,即Boids 系统中采取了下面的三条简单的规则: (1)飞离最近的个体(鸟),避免与其发生碰撞冲突; (2)尽量使自己与周围的鸟保持速度一致; (3)尽量试图向自己认为的群体中心靠近。 虽然只有三条规则,但Boids 系统已经表现出非常逼真的群体聚集行为。但Reynolds 仅仅实现了该仿真,并无实用价值。 1995年Kennedy [46-48]和Eberhart 在Reynolds 等人的研究基础上创造性地提出了粒子群优化算法,应用于连续空间的优化计算中 。Kennedy 和Eberhart 在boids 中加入了一个特定点,定义为食物,每只鸟根据周围鸟的觅食行为来搜寻食物。Kennedy 和Eberhart 的初衷是希望模拟研究鸟群觅食行为,但试验结果却显示这个仿真模型蕴含着很强的优化能力,尤其是在多维空间中的寻优。最初仿真的时候,每只鸟在计算机屏幕上显示为一个点,而“点”在数学领域具有多种意义,于是作者用“粒子(particle )”来称呼每个个体,这样就产生了基本的粒子群优化算法[49]。 假设在一个D 维搜索空间中,有m 个粒子组成一粒子群,其中第i 个粒子的空间位置为123(,,,...,)1,2,...,i i i i iD X x x x x i m ==,它是优化问题的一个潜在解,将它带入优化目标函数可以计算出其相应的适应值,根据适应值可衡量i x 的优劣;第i 个粒子所经历的最好位置称为其个体历史最好位置,记为123(,,,...,)1,2,...,i i i i i D P p p p p i m ==,相应的适应值为个体最好适应值 Fi ;同时,每个粒子还具有各自的飞行速度123(,,,...,)1,2,...,i i i i iD V v v v v i m ==。所有粒子经历过的位置中的最好位置称为全局历史最好位置,记为

基于粒子群算法的控制系统PID参数优化设计

基于粒子群算法的控制系统 PID 参数优化设计 摘 要 本文主要研究基于粒子群算法控制系统PID 参数优化设计方法以及对PID 控制的 改进。PID 参数的寻优方法有很多种,各种方法的都有各自的特点,应按实际的系统特点选择适当的方法。本文采用粒子群算法进行参数优化,主要做了如下工作:其一,选择控制系统的目标函数,本控制系统选用时间乘以误差的绝对值,通过对控制系统的逐步仿真,对结果进行分析。由于选取的这个目标函数的解析式不能直接写出,故采用逐步仿真来实现;其二,本文先采用工程上的整定方法(临界比例度法)粗略的确定其初始的三个参数p K ,i K ,d K ,再利用粒子群算法进行寻优,得到更好的PID 参数;其三,采用SIMULINK 的仿真工具对PID 参数优化系统进行仿真,得出系统的响应曲线。从中发现它的性能指标,都比原来有了很大的改进。因此,采用粒子群算法的优越性是显而易见的。 关键词 目标函数;PID 参数;粒子群算法;优化设计;SIMULINK

Optimal design of PID parameter of the control system based on Particle Swarm Optimization Abstract The main purpose of this paper is to study the optimal design of PID parameter of the control system based on Particle Swarm Optimization and find a way to improve the PID control. There are a lot of methods of optimization for the parameters of PID, and each of them has its own characteristics. The proper methods need to be selected according to the actual characteristics of the system. In this paper we adopt the Particle Swarm Optimization to tune the parameters. To finish it, the following tasks should be done. First, select the target function of the control system. The target function of the control system should be chosen as the absolute value of the error multiplied by time. Then we simulate the control system gradually, and analyze the results of the process. Because the solution of the target function cannot be worked out directly, this design adopts simulation gradually. Second, this paper adopts the engineering method (the critical ratio method) to determine its initial parameters p K ,i K ,d K , then uses the Particle Swarm Optimization to get a series better PID parameters. Third, this paper uses the tool of SIMULINK to optimize the parameters of PID and gets the response curve of the system. By contrast with the two response curves, it is clearly that the performance has improved a lot than the former one. Therefore, it is obviously to find the advantages in using the Particle Swarm Optimization. Key word : target function; PID parameters; Particle Swarm Optimization; optimal design; SIMULINK

粒子群算法(1)----粒子群算法简介

粒子群算法(1)----粒子群算法简介 二、粒子群算法的具体表述 上面罗嗦了半天,那些都是科研工作者写论文的语气,不过,PSO的历史就像上面说的那样。下面通俗的解释PSO算法。 PSO算法就是模拟一群鸟寻找食物的过程,每个鸟就是PSO.中的粒子,也就是我们需要求解问题的可能解,这些鸟在寻找食物的过程中,不停改变自己在空中飞行的位置与速度。大家也可以观察一下,鸟群在寻找食物的过程中,开始鸟群比较分散,逐渐这些鸟就会聚成一群,这个群忽高忽低、忽左忽右,直到最后找到食物。这个过程我们转化为一个数学问题。寻找函数y=1-cos(3*x)*exp(-x)的在[0,4]最大值。该函数的图形如下: 当x=0.9350-0.9450,达到最大值y=1.3706。为了得到该函数的最大值,我们在[0,4]之间随机的洒一些点,为了演示,我们放置两个点,并且计算这两个点的函数值,同时给这两个点设置在[0,4]之间的一个速度。下面这些点就会按照一定的公式更改自己的位置,到达新位置后,再计算这两个点的值,然后再按照一定的公式更新自己的位置。直到最后在y=1.3706这个点停止自己的更新。这个过程与粒子群算法作为对照如下: 这两个点就是粒子群算法中的粒子。 该函数的最大值就是鸟群中的食物 计算两个点函数值就是粒子群算法中的适应值,计算用的函数就是粒子群算法中的适应度函数。 更新自己位置的一定公式就是粒子群算法中的位置速度更新公式。 下面演示一下这个算法运行一次的大概过程: 第一次初始化

第一次更新位置 第二次更新位置

第21次更新 最后的结果(30次迭代) 最后所有的点都集中在最大值的地方。

粒子群优化算法介绍及matlab程序

粒子群优化算法(1)—粒子群优化算法简介 PSO算法就是模拟一群鸟寻找食物的过程,每个鸟就是PSO中的粒子,也就是我们需要求解问题的可能解,这些鸟在寻找食物的过程中,不停改变自己在空中飞行的位置与速度。大家也可以观察一下,鸟群在寻找食物的过程中,开始鸟群比较分散,逐渐这些鸟就会聚成一群,这个群忽高忽低、忽左忽右,直到最后找到食物。这个过程我们转化为一个数学问题。寻找函数y=1-cos(3*x)*exp(-x)的在[0,4]最大值。该函数的图形如下: 当x=0.9350-0.9450,达到最大值y=1.3706。为了得到该函数的最大值,我们在[0, 4]之间随机的洒一些点,为了演示,我们放置两个点,并且计算这两个点的函数值,同时给这两个点设置在[0, 4]之间的一个速度。下面这些点就会按照一定的公式更改自己的位置,到达新位置后,再计算这两个点的值,然后再按照一定的公式更新自己的位置。直到最后在y=1.3706这个点停止自己的更新。这个过程与粒子群算法作为对照如下: 这两个点就是粒子群算法中的粒子。 该函数的最大值就是鸟群中的食物。 计算两个点函数值就是粒子群算法中的适应值,计算用的函数就是粒子群算法中的适应度函数。 更新自己位置的公式就是粒子群算法中的位置速度更新公式。 下面演示一下这个算法运行一次的大概过程: 第一次初始化 第一次更新位置

第二次更新位置 第21次更新 最后的结果(30次迭代) 最后所有的点都集中在最大值的地方。

粒子群优化算法(2)—标准粒子群优化算法 在上一节的叙述中,唯一没有给大家介绍的就是函数的这些随机的点(粒子)是如何运动的,只是说按照一定的公式更新。这个公式就是粒子群算法中的位置速度更新公式。下面就介绍这个公式是什么。在上一节中我们求取函数y=1-cos(3*x)*exp(-x)的在[0, 4]最大值。并在[0,4]之间放置了两个随机的点,这些点的坐标假设为x1=1.5,x2=2.5;这里的点是一个标量,但是我们经常遇到的问题可能是更一般的情况—x 为一个矢量的情况,比如二维z=2*x1+3*x22的情况。这个时候我们的每个粒子均为二维,记粒子P1=(x11,x12),P2=(x21,x22),P3=(x31,x32),......Pn=(xn1,xn2)。这里n 为粒子群群体的规模,也就是这个群中粒子的个数,每个粒子的维数为2。更一般的是粒子的维数为q ,这样在这个种群中有n 个粒子,每个粒子为q 维。 由n 个粒子组成的群体对Q 维(就是每个粒子的维数)空间进行搜索。每个粒子表示为:x i =(x i1,x i2,x i3,...,x iQ ),每个粒子对应的速度可以表示为v i =(v i1,v i2,v i3,....,v iQ ),每个粒子在搜索时要考虑两个因素: 1. 自己搜索到的历史最优值 p i ,p i =(p i1,p i2,....,p iQ ),i=1,2,3,....,n ; 2. 全部粒子搜索到的最优值p g ,p g =(p g1,p g2,....,p gQ ),注意这里的p g 只有一个。 下面给出粒子群算法的位置速度更新公式: 112()()()()k k k k i i i i v v c rand pbest x c rand gbest x ω+=+??-+??-, 11k k k i i i x x av ++=+. 这里有几个重要的参数需要大家记忆,因为在以后的讲解中将会经常用到,它们是: ω是保持原来速度的系数,所以叫做惯性权重。1c 是粒子跟踪自己历史最优值的权重系数,它表示粒子自身的认识,所以叫“认知”。通常设置为2。2c 是粒子跟踪群体最优值的权重系数,它表示粒子对整个群体知识的认识,所以叫做“社会知识”,经常叫做“社会”。通常设置为2。()rand 是[0,1]区间内均匀分布的随机数。a 是对位置更新的时候,在速度前面加的一个系数,这个系数我们叫做约束因子。通常设置为1。这样一个标准的粒子群算法就介绍结束了。下图是对整个基本的粒子群的过程给一个简单的图形表示。 判断终止条件可是设置适应值到达一定的数值或者循环一定的次数。 注意:这里的粒子是同时跟踪自己的历史最优值与全局(群体)最优值来改变自己的位置预速度的,所以又叫做全局版本的标准粒子群优化算法。

c语言实现的粒子群算法代码及解释

//粒子群PSO算法 #include #include #include #include #define PI 3.141592653589 /* */ #define P_num 200 //粒子数目 #define dim 50 #define low -100 //搜索域范围 #define high 100 #define iter_num 1000 #define V_max 20 //速度范围 #define c1 2 #define c2 2 #define w 0.5 #define alp 1 double particle[P_num][dim]; //个体集合 double particle_loc_best[P_num][dim]; //每个个体局部最优向量 double particle_loc_fit[P_num]; //个体的局部最优适应度,有局部最优向量计算而来double particle_glo_best[dim]; //全局最优向量 double gfit; //全局最优适应度,有全局最优向量计算而来double particle_v[P_num][dim]; //记录每个个体的当前代速度向量 double particle_fit[P_num]; //记录每个粒子的当前代适应度 double Sphere(double a[]) { int i; double sum=0.0; for(i=0; i

一种基于粒子群算法的聚类算法

第35卷第1期2009年3月延边大学学报(自然科学版) Journal of Yanbian University (Natural Science )Vol.35No.1Mar.2009 收稿日期:2008-10-18 作者简介:姜浩(1981— ),男,硕士研究生,研究方向为粒子群算法.文章编号:100424353(2009)0120064204 一种基于粒子群算法的聚类算法 姜浩, 崔荣一 (延边大学工学院计算机科学与技术系智能信息处理研究室,吉林延吉133002) 摘要:提出一种基于粒子群算法的聚类算法,该算法利用粒子群算法随机搜索解空间的能力找到最优解.首先,将样本所属类号的组合作为粒子,构成种群,同时引入极小化误差平方和来指导种群进化的方向.其次,通过对全局极值的调整,搜索到全局最优值.最后,通过仿真实验的对比,验证了该算法在有效性和稳定性上要好于K 2means 算法. 关键词:粒子群;聚类;极小化误差平方和中图分类号:TP301.6 文献标识码:A A Method of Clustering B ased on the P article Sw arm Optimization J IAN G Hao , CU I Rong 2yi (I ntelli gent I nf ormation Processing L ab.,De partment of Com puter Science and Technolog y , College of Engineering ,Yanbian Universit y ,Yanj i 133002,China ) Abstract :A clustering method based on the particle swarm optimization is provided ,using the ability of PSO algorithm which can search all of the solution space to find the optimum solution.Firstly ,the combination of the cluster number of the samples was taken as particles to consist a swarm.Meanwhile ,the evolution trend was used to modulate with the theory of the L MS error criterion.Secondly ,according to the modulating for global best ,the algorithm researched the global optimum.Finally ,the simulation results show that the new algorithm of proposed algorithm is more efficient and stable than K 2means algorithm.K ey w ords :particle swarm optimization ;clustering ;L MS error criterion 0 引言 聚类分析研究具有很长的历史,其重要性及 与其他研究方向的交叉特性得到人们的肯定[1].聚类是数据挖掘、模式识别等研究方向的重要研究内容之一,在识别数据的内在结构方面具有极其重要的作用.聚类技术广泛应用于语音识别、字符识别、图像分割、机器视觉、数据压缩和文献信息检索等领域.聚类的另一主要应用是数据挖据(多关系数据挖掘)、时空数据库应用(GIS 等)、序列和一类数据分析等.此外,聚类还应用于统计科学.值得一提的是,聚类分析对生物学、心理学、考 古学、地质学、地理学以及市场营销等研究也都有重要应用. 粒子群优化(Particle Swarm Optimization ,PSO )算法是由Eberhart 和Kennedy [2]于1995年提出的一类基于群智能的随机优化算法.该算法模拟鸟群飞行觅食的行为,通过个体之间的集体协作和竞争来实现全局搜索,是一种基于群智能的演化计算技术.同遗传算法相比,虽然同是基于迭代的进化算法,但没有交叉和变异算子,群体在解空间中根据自身经历的最好位置,以及群体最优解来进行搜索.由于PSO 算法有着参数少,

6种粒子群算法程序

程序1 当22111==c c ,5.12212==c c ,2.1=w 。 a)%主函数源程序(main.m ) %------基本粒子群算法 (particle swarm optimization ) %------名称: 基本粒子群算法 %------初始格式化 clear all ; %清除所有变量 clc; %清屏 format long ; %将数据显示为长整形科学计数 %------给定初始条条件------------------ N=40; %3初始化群体个数 D=10; %初始化群体维数 T=100; %初始化群体最迭代次数 c11=2; %学习因子1 c21=2; %学习因子2 c12=1.5; c22=1.5; w=1.2; %惯性权重 eps=10^(-6); %设置精度(在已知最小值的时候用) %------初始化种群个体(限定位置和速度)------------ x=zeros(N,D); v=zeros(N,D); for i=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end %------显示群位置---------------------- figure(1) for j=1:D if (rem(D,2)>0)

subplot((D+1)/2,2,j) else subplot(D/2,2,j) end plot(x(:,j),'b*');grid on xlabel('粒子') ylabel('初始位置') tInfo=strcat('第',char(j+48),'维'); if(j>9) tInfo=strcat('第',char(floor(j/10)+48),char(rem(j,10)+48),'维'); end title(tInfo) end %------显示种群速度 figure(2) for j=1:D if(rem(D,2)>0) subplot((D+1)/2,2,j) else subplot(D/2,2,j) end plot(x(:,j),'b*');grid on xlabel('粒子') ylabel('初始速度') tInfo=strcat('第,char(j+48),'维'); if(j>9) tInfo=strcat('第',char(floor(j/10)+48), char(rem(j,10)+48),'维); end title(tInfo) end figure(3) %第一个图 subplot(1,2,1)

粒子群优化算法及其参数设置

附录 程序1 当22111==c c ,5.12212==c c ,2.1=w 。 a)%主函数源程序(main.m ) %------基本粒子群算法 (particle swarm optimization ) %------名称: 基本粒子群算法 %------初始格式化 clear all ; %清除所有变量 clc; %清屏 format long ; %将数据显示为长整形科学计数 %------给定初始条条件------------------ N=40; %3初始化群体个数 D=10; %初始化群体维数 T=100; %初始化群体最迭代次数 c11=2; %学习因子1 c21=2; %学习因子2 c12=1.5; c22=1.5; w=1.2; %惯性权重 eps=10^(-6); %设置精度(在已知最小值的时候用) %------初始化种群个体(限定位置和速度)------------ x=zeros(N,D); v=zeros(N,D); for i=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end %------显示群位置----------------------

figure(1) for j=1:D if(rem(D,2)>0) subplot((D+1)/2,2,j) else subplot(D/2,2,j) end plot(x(:,j),'b*');grid on xlabel('粒子') ylabel('初始位置') tInfo=strcat('第',char(j+48),'维'); if(j>9) tInfo=strcat('第',char(floor(j/10)+48),char(rem(j,10)+48),'维'); end title(tInfo) end %------显示种群速度 figure(2) for j=1:D if(rem(D,2)>0) subplot((D+1)/2,2,j) else subplot(D/2,2,j) end plot(x(:,j),'b*');grid on xlabel('粒子') ylabel('初始速度') tInfo=strcat('第,char(j+48),'维'); if(j>9) tInfo=strcat('第',char(floor(j/10)+48), char(rem(j,10)+48),'维); end title(tInfo) end figure(3)

混合粒子群算法(基于自然选择)

主程序: %------基本粒子群优化算法(Particle Swarm Optimization)----------- %------名称:混合粒子群优化算法(PSO)(粒子群基于自然选择的算法) %------作用:求解优化问题 %------说明:全局性,并行性,高效的群体智能算法,混合粒子群算法指的是借鉴其他一些智能优化算法的思想而形成的粒子群算法,其除了粒子群算法外,还有遗传算法、模拟退火算法以及神经网络等智能算法 %------初始格式化-------------------------------------------------- clear all; clc; format long; %------给定初始化条件---------------------------------------------- c1=1.4962; %学习因子1 %c1=3; %c2=2; c2=1.4962; %学习因子2 w=0.7298; %惯性权重 MaxDT=500; %最大迭代次数 D=6; %搜索空间维数(未知数个数) N=20; %初始化群体个体数目 eps=10^(-6); %设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)------------ fori=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end %------先计算各个粒子的适应度,并初始化Pi和Pg---------------------- figure(3) fori=1:N P(i)=fitness2(x(i,:)); y(i,:)=x(i,:); end Pg=x(N,:); %Pg为全局最优 fori=1:(N-1) if fitness2(x(i,:))

粒子群算法论文

粒子群算法论文 SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#

粒子群算法的寻优算法 摘要:粒子群算法是在仿真生物群体社会活动的基础上,通过模拟群体生物相互协同寻优能力,从而构造出一种新的智能优化算法。这篇文章简要回顾了粒子群算法的发展历史;引入了一个粒子群算法的实例,对其用MATLAB进行编程求解,得出结论。之后还对其中的惯性权重进行了延伸研究,对惯性权重的选择和变化的算法性能进行分析。 关键词:粒子群、寻优、MATLAB、惯性权重 目录:

1.粒子群算法的简介 粒子群算法(Particle Swarm Optimization)是一种新的智能优化算法。谈到它的发展历史,就不得不先介绍下传统的优化算法,正因为传统优化算法自身的一些不足,才有新智能优化算法的兴起,而粒子群算法(PSO)就是在这种情况下发展起来的。 粒子群算法的研究背景 最优化是人们在科学研究、工程技术和经济管理等领域中经常遇到的问题。优化问题研究的主要内容是在解决某个问题时,如何从众多的解决方案中选出最优方案。它可以定义为:在一定的约束条件下,求得一组参数值,使得系统的某项性能指标达到最优(最大或最小)。传统的优化方法是借助于优化问题的不同性质,通常将问题分为线性规划问题、非线性规划问题、整数规划问题和多目标规划问题等。相应的有一些成熟的常规算法,如应用于线性规划问题的单纯形法,应用于非线性规划的牛顿法、共扼梯度法,应用于整数规则的分枝界定法、动态规划等。列举的这些传统的优化算法能够解决现实生活和工程上的很多问题,但工业和科学领域大量实际问题的困难程度正在日益增长,它们大多是根本无法在可接受的时间内找到解的问题。这类优化问题的困难性不仅体现在具有极大的规模,更为重要的是,它们多数是非线性的、动态的、多峰的、具有欺骗性的或者不具有任何导数信息。因此,发展通用性更强、效率更高的优化算法总是需要的。 起源 在自然界中,鸟群运动的主体是离散的,其排列看起来是随机的,但在整体的运动中它们却保持着惊人的同步性,其整体运动形态非常流畅且极富美感。这些呈分布状态的群体所表现出的似乎是有意识的集中控制,一直是许多研究者感兴趣的问题。有研究者对鸟群的运动进行了计算机仿真,他们通过对个体设定简单的运动规则,来模拟鸟群整体的复杂行为。 1986 年 Craig ReynolS 提出了 Boid 模型,用以模拟鸟类聚集飞行的行为,通过对现实世界中这些群体运动的观察,在计算机中复制和重建这些运动轨迹,并对这些运动进行抽象建模,以发现新的运动模式。之后,生物学家Frank Heppner 在此基础上增加了栖息地对鸟吸引的仿真条件,提出了新的鸟群模型。这个新的鸟群模型的关键在于以个体之间的运算操作为基础,这个操作也就是群体行为的同步必须在于个体努力维持自身与邻居之间的距离为最优,为此每个个体必须知道自身位置和邻居的位置信息。这些都表明群体中个体之间信息的社会共享有助于群体的进化。

相关主题