粒子群优化算法求函数最小值

粒子群优化算法求函数最小值

        • 1.算法简介
        • 2.流程图及算法实现
        • 3.具体代码实现

1.算法简介

粒子群算法(简称PSO)是一种有效的全局寻优算法,最早由美国的Kennedy和Eberhart于1995年提出。基于群体智能理论的优化算法,通过个体之间的协作和信息共享来寻找最优解,具有“自我”学习提高和向“他人”学习的优点,被广泛应用于函数优化、数据挖掘、神经网络训练等领域。
算法模拟鸟群的捕食行为 假设一群鸟在随机搜索食物,在这个区域里只有一块食物(最优解),所有的鸟都不知道食物在那里,在搜索过程中,通过相互传递各自的信息,让其他鸟知道自己的位置,通过这样的协作判断自己找到的是不是最优解,同时也将自己的最优解传递给整个鸟群。最终,整个鸟群都聚集在食物周围,即找到最优解 问题收敛。
问题抽象 鸟被抽象为没有质量和体积的粒子,并延伸到N维空间,粒子i在N维空间的位置表示为矢量Xi=(X1,X2,X3……Xn),飞行速度表示为矢量Vi=(V1,V2,V3……Vn)。每个粒子都有一个由目标函数决定的适应度值,并且知道自己到目前为止发现的最好位置,这个可以看作是粒子自己的飞行经验。除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置,这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

2.流程图及算法实现

粒子群优化算法求函数最小值_第1张图片
其中,终止条件:
1)达到最大迭代次数
2)相邻两代之间的偏差在一定范围内

主要公式:
粒子群优化算法求函数最小值_第2张图片
vid →第i个粒子在第t+1次迭代中第d维的速度
动态w能获得比固定值更好的寻优结果(w减小→全局寻优能力减弱,局部寻优增强)

3.具体代码实现

问题描述:用粒子群优化算法求以下测试函数最小值
在这里插入图片描述

records=zeros(1,maxgeneration);
%% 粒子初始化
for i = 1:popsize
    pop(i,:) = (popmax-popmin)*rand(1,dim)+popmin;   
    V(i,:) = (Vmax-Vmin)*rand(1,dim)+Vmin;      
    fitness(i) = fun_fitness(pop(i,:));  
end
%% 更新个体极值和群体极值
p_bestposition = pop;  
p_bestfitness = fitness;   
[bestfitness, bestindex] = min(fitness); 
g_bestposition = pop(bestindex,:);   
g_bestfitness = bestfitness;   
%% 迭代
for i = 1:maxgeneration
    %更新惯性权重
    w=Wmax-i*(Wmax-Wmin)/maxgeneration;
    for j = 1:popsize
        % 更新速度
        V(j,:) = w*V(j,:) + c1*rand*(p_bestposition(j,:) - pop(j,:)) + c2*rand*(g_bestposition - pop(j,:));
        V(j,V(j,:)>Vmax) = Vmax;  
        V(j,V(j,:)popmax) = popmax;
        pop(j,pop(j,:)

测试函数:

function [y] = fun_fitness(x)
    y=100*(x(1)^2-x(2))^2+(1-x(1))^2;
end

运行得到的适应度变化曲线:

粒子群优化算法求函数最小值_第3张图片

你可能感兴趣的:(智能优化算法,算法,matlab)