粒子群算法matlab实例
时间: 2023-06-23 20:10:17 浏览: 40
粒子群算法(Particle Swarm Optimization, PSO)是一种优化算法,它模拟了鸟群或鱼群等群体的行为,通过不断调整粒子的位置和速度来找到最优解。下面是一个使用Matlab实现的简单的PSO实例。
```matlab
% 目标函数
fun = @(x) x(1)^2 + x(2)^2;
% 定义粒子群大小和维度
n = 20; % 粒子数目
d = 2; % 变量维度
% 定义搜索范围
lb = [-10,-10]; % 下限
ub = [10,10]; % 上限
% 初始化粒子群
x = repmat(lb,n,1) + rand(n,d).*repmat((ub-lb),n,1);
v = zeros(n,d);
% 初始化全局最优解和个体最优解
pbest = x;
gbest = x(1,:);
pbestval = fun(pbest);
gbestval = fun(gbest);
% 设置参数
w = 0.8; % 惯性权重
c1 = 2; % 自我认知学习因子
c2 = 2; % 社会认知学习因子
maxiter = 100; % 最大迭代次数
% 迭代寻优
for iter = 1:maxiter
% 更新速度和位置
v = w.*v + c1.*rand(n,d).*(pbest-x) + c2.*rand(n,d).*(repmat(gbest,n,1)-x);
x = x + v;
% 边界处理
x(x < lb) = lb(x < lb);
x(x > ub) = ub(x > ub);
% 计算适应度值
fx = fun(x);
% 更新个体最优解
newidx = fx < pbestval;
pbestval(newidx) = fx(newidx);
pbest(newidx,:) = x(newidx,:);
% 更新全局最优解
[tmpval,tmpidx] = min(pbestval);
if tmpval < gbestval
gbestval = tmpval;
gbest = pbest(tmpidx,:);
end
% 显示迭代过程
disp(['Iteration ' num2str(iter) ', Best Fitness Value = ' num2str(gbestval)]);
end
```
在运行上述代码之后,会输出每次迭代的最优适应度值,最后得到的`gbest`就是最优解。需要注意的是,粒子群算法的结果通常是一个近似最优解,而不是完美的最优解。因此,需要根据实际情况进行调整和优化。