阅读 65

数学建模粒子群算法,粒子群优化算法原理

概念是通过模拟鸟群觅食过程中的移动和聚集行为而提出的基于群体智能的全局随机搜索算法。 与其他智能算法,例如蚁群算法、遗传算法一样,基于种群或进化的概念,通过个体之间的合作和竞争,实现对复杂空间最优解的搜索。 不同的是PSO模拟社会。 将可生成的各解表示为组内的一个粒子,各粒子分别具有其自身的位置矢量和速度矢量以及由目标函数确定的适应度。 所有粒子都以一定速度在搜索空间飞行,通过跟踪当前搜索到的最佳值来寻找全局最佳值。 当执行算法时,每次迭代时不断更新当前个体最优值和全局最优值。

它基于以下三个规则进行操作:

从最近的个体起飞,为了避免碰撞而向目标集体飞行的中心基本控制参数粒子种群的规模通常设定为20-50,粒子种群被随机初始化,粒子种群数量越多,分布越分散于整个全局范围,搜索的空间范围越广当然,粒子种群的规模越大,执行时间也越长

惯性权重惯性权重值表示粒子继承当前速度的程度。 当权重值较小时,从当前区域跳到全局最佳区域并不容易,而且跳到本地最佳区域的能力较高。 权重值较大时,局部优秀能力较弱,全局优秀能力较强。

权重的选择有固定权重和时变权重两种

固定权重是指选择常数作为惯性权重值,在进化的过程中不变,一般选择[ 0.8,1,2 ]

时变权重是指设定惯性权重的区间,在进化过程中用某种方法逐渐减小惯性权重。 随着进化的过程,粒子的活跃范围逐渐变小,因此权重也需要减小以削弱粒子的全局寻优能力。

加速常数加速常数有两个c1和c2,表示个体经验和集体经验对粒子的影响。 当c1为0时,表明个体经验对粒子没有作用,仅凭社会经验收敛速度快,但容易陷入局部最优。 c2为0时,表示个体间没有信息交换,找到最佳解的概率较低。 如果c1和c2都为零的话,也许可以认为这是等待已久的大雁的模拟,没有进行检索。 我们一般把两者设定得相等,使两者能有同样的影响力。

粒子的最大速度粒子的速度在各个维度上都需要速度的限制范围,这决定了粒子对于空间探索的力。 同样,参数设置过小会有弊端。 过大的粒子会飞越优良区域,过小无法探索局部最优以外的区域,无法摆脱局部最优。

停止基准是算法的停止条件,例如是重复次数、计算的精度等

对于边界条件粒子的一个或多个维度,必须定义粒子的速度或位置以满足求解问题的条件。 从而将粒子的位置限定在可行的搜索范围内,减少不必要的搜索,提高搜索效率。

可以设定速度或位置的范围。 示例超出范围时,可以在范围内生成随机数来代替使用,也可以设定最大值。

运算流程

变量间无约束的PSO函数的优化这里以Griewank函数为例求出最佳值。

此函数在x=(0,0,0 )的地方有全局极小点0。 x可以是n维。 可以在以下代码中使用size指定参数的数量: 这里设定5意味着这个函数是5维的函数

在此指定各参数的范围为[-5,5 ]。 不添加变量之间的约束,例如x1 x2 x3。

functiony=griewank(x ) col=size(x ) x,2; y1=1/4000*sum(x.^2); y2=1; forh=1:coly2=y2*cos(x ) h )/sqrt(h ) h ); endy=y1 - y2 1; 结束PSO解决方案

%%清除环境clc %清除屏幕clear all; 删除%工作区变量close all; %图形窗口%%参数初始化%两个加速参数表示个人经验和集体经验,一般设置为相同的c1=1.4; c2=1.4; %进化次数maxg=50; %种群规模sizepop=200; %边界条件的设定Vmax=1; Vmin=-1; popmax=5; popmin=-5; %粒子中参数的个数size=5; %%产生初始粒子和速度forI=1:sizepoppop(I, )=5*rands(1) 1,size ); %初始种群为不同维度的参数范围设置不同,但此处默认均为[-5,5 ] v (I, )=rands(1,size ); %初始化速度fitness(I )=griewank (pop ) I, ); %染色体适应度end%寻找最好的个体[ bestfitnessbestindex ]=min (fitness ); zbest=pop(bestindex, ); %全球最佳gbest=pop; %个体最佳fitnessgbest=fitness; %个体最佳适应度值fitnesszbest=bestfitness; %全局最佳适应度值%%重复寻优fori=1: maxgforj=1: size pop %速度更新v(j, )=v(j, ) C1*rand* ) GBEST ) j,3330

ax))=Vmax; V(j,find(V(j,:)<Vmin))=Vmin; %种群更新 pop(j,:)=pop(j,:)+0.5*V(j,:); pop(j,find(pop(j,:)>popmax))=popmax; pop(j,find(pop(j,:)<popmin))=popmin; %自适应变异 if rand>0.8 k=ceil(size*rand); pop(j,k)=rand; end %适应度值 fitness(j)=Griewank(pop(j,:)); %个体最优更新 if fitness(j) < fitnessgbest(j) gbest(j,:) = pop(j,:); fitnessgbest(j) = fitness(j); end %群体最优更新 if fitness(j) < fitnesszbest zbest = pop(j,:); fitnesszbest = fitness(j); end end yy(i)=fitnesszbest; end%% 执行结果plot(yy,'Linewidth',2)title(['适应度曲线 ' '终止代数=' num2str(maxg)]);grid onxlabel('进化代数');ylabel('适应度');% 结果输出disp('最优结果参数:');disp(zbest);disp('最优结果:');disp(Griewank(zbest));

执行结果如下:

最优结果参数: 0.0093 -0.0127 -0.0331 0.0131 -0.0188最优结果: 3.2364e-04

我们可以通过增加迭代次数,加速参数,种群规模来找到都更加精确的值

%% 参数初始化%两个加速参数表征个体经验和群体经验,一般设置为 相同c1 = 1.49;c2 = 1.49;% 进化次数 maxg=500; %种群规模sizepop=2000;

结果如下:

最优结果参数: 0.0002 0.0013 0.0002 0.0024 0.0001最优结果: 1.1659e-06

另附有约束条件的粒子群算法


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐