✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
个人主页:小嗷犬的个人主页
个人网站:小嗷犬的技术小站
个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
粒子群算法是一种启发式算法,它的核心是思想是利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的可行解。
粒子群算法属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的“交叉”和“变异”操作。
粒子群算法包括以下几个步骤:
MATLAB 中的粒子群算法函数为 particleswarm
,其基本语法为:
[x,fval] = particleswarm(fun,nvars,lb,ub)
其中,fun
为目标函数,nvars
为变量个数,lb
为变量下界,ub
为变量上界,x
为最优解,fval
为最优值。
例1
最小化两个变量的简单函数,目标函数为:
fun = @(x)x(1)*exp(-norm(x)^2);
求解:
nvars = 2;
[x,fval] = particleswarm(fun,nvars)
得:
x =
629.4474 311.4814
fval =
0
事实上,这个结果与最优解相差甚远:
fsurf(@(x,y)x.*exp(-(x.^2+y.^2)))
所以粒子群算法更适用于求解有边界的问题。
例2
同例1,但是加入了边界条件:
lb = [-10,-15];
ub = [15,20];
求解:
fun = @(x)x(1)*exp(-norm(x)^2);
nvars = 2;
[x,fval] = particleswarm(fun,nvars,lb,ub)
得:
x =
-0.7071 -0.0000
fval =
-0.4289
这个结果就与最优解十分相近了。