计算智能——粒子群算法的寻优算法

粒子群算法的寻优算法

1、简介

粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群体智能的优化算法,该算法最早由Kennedy和Eberhart在1995年提出的,该算法源自对鸟类捕食问题的研究。 PSO算法首先在可行解空间中初始化一群粒子,每个粒子都代表极值优化问题的一个潜在最优解,用位置、速度和适应度值三项指标表示该粒子特征。

粒子在解空间中运动,通过跟踪个体极值pbest和群体极值gbest更新个体位置,个体极值pbest是指个体所经历位置中计算得到的适应度值最优位置,群体极值gbest是指种群中的所有粒子搜索到的适应度最优位置。

粒子每更新一次位置,就计算一次适应度值,并且通过比较新粒子的适应度值和个体极值、群体极值的适应度值更新个体极值pbest和群体极值gbest位置。

2、基本原理

在每一次迭代过程中,粒子通过个体极值和群体极值更新自身的速度和位置,更新公式如下:
在这里插入图片描述
w为惯性权值,c1,c2为加速系数,pbest为个体最优,gbest为群体最优,pop为当前位置。

基本PSO算法步骤如下:
(1)粒子群初始化;
(2)根据目标函数计算各粒子适应度值,并初始化个体、全局最优值
(3)判断是否满足终止条件,是则搜索停止,输出搜索结果;否则继续下步;
(4)根据速度、位置更新公式更新各粒子的速度和位置;
(5)根据目标函数计算各粒子适应度值;
(6)更新各粒子历史最优值以及全局最优值;(7)跳转至步骤3。
对于终止条件,通常可以设置为适应值误差达到预设要求,或迭代次数超过最大允许迭代次数。
流程图:
在这里插入图片描述
群体极值是好找的。但个体极值:第一步时,每个个体的值都是个体极值,第二步后才开始有真正的个体极值的概念。

3、代码实现

1、PSO.m
**设定w函数:w=ws- (ws-we)*(i/maxgen);线性变化惯性权重w(ws,we分别为开始和结束时候的惯性权重)

%% 参数初始化
%粒子群算法中的三个参数
c1 = 1.49445;%加速因子
c2 = 1.49445;
%%c1s=2;
%%c1e=0.5;
%%c2s=0.5;
%%c2e=2;
w = 0.8   %惯性权重
%%ws = 0.9
%%we = 0.4 

maxgen=1000;   % 进化次s数  
sizepop=200;   %种群规模

Vmax=1;       %限制速度围
Vmin=-1;     
popmax=5;    %变量取值范围
popmin=-5;
dim=10;       %适应度函数维数

func=1;       %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(func);%画出待优化的函数,只画出二维情况作为可视化输出

%% 产生初始粒子和速度
for i=1:sizepop
    %随机产生一个种群
    pop(i,:)=popmax*rands(1,dim);    %初始种群
    V(i,:)=Vmax*rands(1,dim);             %初始化速度
                                     %计算适应度
    fitness(i)=fun(pop(i,:),func);   %粒子的适应度
end

%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
gbest=pop(bestindex,:);   %全局最佳
pbest=pop;                %个体最佳
fitnesspbest=fitness;     %个体最佳适应度值
fitnessgbest=bestfitness; %全局最佳适应度值

%% 迭代寻优
for i=1:maxgen
    
    fprintf('第%d代,',i);
    fprintf('最优适应度%f\n',fitnessgbest);
            w=ws-(ws-we)*(i/maxgen);
            c1=c1s-(c1s-c1e)*(i/maxgen);
            c2=c2s-(c2s-c2e)*(i/maxgen);
    for j=1:sizepop
        
        %速度更新
        V(j,:) = w*V(j,:) + c1*rand*(pbest(j,:) - pop(j,:)) + c2*rand*(gbest - pop(j,:)); %根据个体最优pbest和群体最优gbest计算下一时刻速度
        V(j,find(V(j,:)>Vmax))=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.98                         %加入变异种子,用于跳出局部最优值
            pop(j,:)=rands(1,dim);
        end

        %更新第j个粒子的适应度值
        fitness(j)=fun(pop(j,:),func); 
   
    end
    
    for j=1:sizepop
        
        %个体最优更新
        if fitness(j) < fitnesspbest(j)
            pbest(j,:) = pop(j,:);
            fitnesspbest(j) = fitness(j);
        end
        
        %群体最优更新
        if fitness(j) < fitnessgbest
            gbest = pop(j,:);
            fitnessgbest = fitness(j);
        end
    end 
    yy(i)=fitnessgbest;    
        
end
%% 结果分析
figure;
plot(yy)
title('线性递减寻优过程','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

2、Rastrigin.m

function y = Rastrigin(x)
% Rastrigin函数
% 输入x,给出相应的y值,在x = ( 0 , 0 ,…, 0 )处有全局极小点0.
[row,col] = size(x);
if  row > 1 
    error( ' 输入的参数错误 ' );
end
y =sum(x.^2-10*cos(2*pi*x)+10);
%y =-y;

3、Schaffer.m

function y=Schaffer(x)

[row,col]=size(x);
if row&g
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值