经典智能算法——粒子群寻优算法(MATLAB实现)

粒子群优化算法(Particle Swarm Optimization,PSO)与模拟退火算法类似,通过随机解出发,迭代找出最优解,通过适应度(评价指标)来评价解的品质。

1 基本原理

        在PSO中,,每个优化问题的潜在解,相当于解空间的一个粒子,粒子都有一个由优化函数确定的适应值(fitness),每个粒子有,位置,速度等基本属性。通过不同迭代,更新粒子的速度和位置来得到最适解,粒子在某一个位置越集中,代表该问题的解所在。

 其中X表示粒子位置,V表示粒子速度,Pid 表示个体粒子的最优位置,Pgd表示群体粒子的最优位置。

2 更新规则和流程图

 假设在D维空间中,有N个粒子组成的一个群落,其中第i个粒子表示为一个D维向量

 同理飞行速度V也是一个D维变量

第i个粒子搜索到的最优位置成为个体极值,记为

 整个群体搜索到的最优位置为

 利用以下公式 进行位置和速度的变更

Vi 中  第一部分为“惯性”反映粒子运动习惯

          第二部分为“认知”,表示粒子有向自身最优位置行走趋势

          第三部分为“社会”,表示粒子有向群体最优位置移动趋势

其中 叫做惯性因子,非负值,可以用以下公式进行更新或者设置为常数

最初其值较大,全局搜索能力较强。

最后其值较小,局部搜索能力较强。

C1 和 C2为学习因子,也称加速度常数,rand为[0,1]的随机数

3 整体代码

使用方法:[xm1,fv1] = PSO(@fitness,50,2,2,0.5,100,30);

设置适应度函数 

function F=fitness(x)
F=0;
for i=1:30
    F=F+x(i).^2+x(i)-6
end
end

粒子群寻优算法 

function [xm ,fv ] = PSO( fitness,N,c1,c2,w,M,D )
%% 参数 fitness为待优化的目标函数(适应度函数),N为粒子数目,c1,c2为学习因子(即各部分的贡献度,相当于加了一个权重)
% w为惯性权重,M为最大迭代数,D为自变量的个数(相当于维度)
%% 结果:xm 为目标函数取最小值时候的自变量,fv是目标函数的最小值
%%
%初始化位置以及速度
format long;  %有效数字16位
for i=1:N
    for j=1:D
        x(i,j)=randn;%随机初始化位置
        v(i,j)=randn;%随机初始化速度
    end
end
 
%计算每个粒子的适应度
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end
 
pg=x(N,:);    %pg全局最优
for i=1:(N-1)
    if fitness(x(i,:)) <fitness(pg)   %%根据适应度函数以及需求进行符号的选取(<,>)
        pg=x(i,:);
    end
end
 
%按照公式进行迭代,直到满足精度要求
for t=1:M
    for i=1:N    %更新速度、位置
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));%rand产生[0,1]上的均匀值,服从均匀分布
        x(i,:)=x(i,:)+v(i,:);
        if fitness(x(i,:)) <p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);%个体历史最优进行更新
        end
        if(p(i)<fitness(pg))                         %%根据情况判断符号的选取
        pg=y(i,:);%全局最优进行更新
        end
    end
    Pbest(t)=fitness(pg);  %历次最优适应度值
end
 
%%结果展示
plot(Pbest)
disp('****************************')
xm=pg'     %全局最优的结果
fv=fitness(pg) %最优结果的适应度值
 
end
 
        
 

  • 4
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
求解最优化问题一直是遗传算法经典应用领域,但是对于不同的最优化问题,遗传算法往往要重新设计“交叉”、“变异”算子,甚至要开发新的进化操作;另外遗传算法不容易理解、操作复杂、大多数情况下效率比较低。所以,寻求新的解决最优问题的算法一直是研究热点。对约束优化问题的求解,已有许多算法被提出。传统的方法有梯度映射法、梯度下降法、惩罚函数法、障碍函数法等,但是单纯使用这些方法不是效率很低就是适用范围有限。而进化计算由于其求解过程不依赖于目标函数的解析性质,同时又能以较大的概率收敛于全局最优解,所以用进化算法求解约束优化问题已是一个很有意义的研究方向。用进化计算求解约束优化问题时,最基本的思想就是:首先设法把个体带入可行域,然后再在可行域内找到尽可能好的解。求解约束优化问题最困难的主要是对约束条件的处理。目前,使用最广泛的对约束条件的处理方法是惩罚函数法。基于惩罚函数的进化算法一般来说都包含有许多惩罚系数,在实际应用时,只有正确设置这些系数才可能获得可行解,而要获得适当的惩罚系数则需要大量的实验为基础。在科学实践、工程系统设计及社会生产和经济发展中还有一类很常见到优化问题:多目标优化问题,因此研究多目标优化问题具有十分重要的意义。由于多目标优化问题不存在唯一的全局最优解,所以求解多目标优化问题实际上就是要寻找一个解的集合。传统的多目标优化方法是将多目标问题通过加权求和转化为单目标问题来处理的。但是,这种方法要求对问题本身有很强的先验认识,难以处理真正的多目标问题。进化计算由于其是一种基于种群操作的计算技术,可以隐并行的搜索解空间中的多个解,并能利用不同解之间的相似性来提高其并发求解的效率,因此进化计算比较合求解多目标优化问题。 粒子群优化(Particle Swarm Optimization, PSO)经济论文www.youzhiessay.com。 算法是由Kennedy和Eberhart于1995年提出的一种优化算法。它是对生物群体的社会行为进行的一种模拟,它最早源于对鸟群觅食行为的研究。在生物群体中存在着个体与个体、个体与群体间的相互作用、相互影响的行为,这种行为体现的是一种存在于生物群体中的信息共享的机制。PSO算法就是对这种社会行为的模拟,即利用信息共享机制,使得个体间可以相互借鉴经验,从而促进整个群体的发展。 PSO算法和遗传算法(Genetic Algorithm,GA)类似,也是一种基于迭代的优化工具,系统初始化为一组随机解,通过某种方式迭代寻找最优解。但PSO没有GA的“选择”、“交叉”、“变异”算子,编码方式也比GA简单。并且很多情况下要比遗传算法更有效率,所以基于粒子群算法处理优化问题中的是一个很有意义的研究方向。由于PSO算法容易理解、易于实现,所以PSO算法发展很快。在函数优化、系统控制、神经网络训练等领域得到广泛应用。 因此,本文在PSO算法基础上对PSO算法处理优化问题的能力及基于PSO算法,毕业论文网www.594wm.com,求解约束优化问题和多目标优化问题进行了深入研究。主要体现在以下几个方面:第一、介绍了有关粒子群优化算法的背景知识,阐述了算法产生的基础。 接着讨论了粒子群优化算法的发展和基本原理,并给出了算法的流程。通过对算法公式和参数设置进行的综合分析以及和其它优化算法进行比较,给出了粒子群优化算法实际使用时的指导原则。并讨论了算法在一些领域中的成功应用。第二、就粒子群优化算法在求解最优化问题中的应用,对无约束和有约束最优化问题分别设计了基于粒子群优化算法的不同的求解方法。对于无约束优化问题,本文直接用目标函数作为适应度函数,采用实数编码。对于约束优化问题,本文采用一种惩罚函数作为粒子群优化算法的适应度函数。 对两种问题分别应用了不同的测试函数对其进行了测试,结果表明了粒子群优化算法求解最优化问题的可行性。第三、针对约束优化问题本文在引入了半可行域的概念的基础上提出了竞争选择的新规则,并改进了基于竞争选择和惩罚函数的进化算法的适应度函数。并且本文规定了半可行解性质:半可行解优于不可行解,但劣于可行解。在半可行域内个体可直接用目标函数来评价。第四、结合粒子群优化算法本身的特点,本文设计了选择算子对半可行域进行操作,从而提出了利用PSO算法求解约束优化问题的新的进化算法。 第五、由于多目标优化问题和单目标优化问题是有本质的区别的:前者一般是一组或几组连续解的集合,而后者只是单个解或一组连续的解,所以PSO算法不能直接应用于多目标优化问题。因此本文对PSO全局极值和个体极值选取方式做了改进,提出了最优解评估选取的PSO算法,用于对多目标优化问题的非劣最优解集的搜索。实验结果证明了算法的有效性。粒子群算法的收敛性、基于粒子群算法求解不连续、多可行域的约束优化问题、基于粒子群算法求解高维多目标优化问题是本文的后续研究工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜转转m

一毛钱助力博主实现愿望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值