粒子群算法matlab代码怎么写
时间: 2023-11-11 07:00:59 浏览: 36
粒子群算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,它模拟了鸟群或鱼群等生物群体的行为,通过不断地迭代寻找最优解。下面是一个简单的粒子群算法的 MATLAB 代码示例:
```matlab
function [best_x, best_fval] = pso(fitness_func, dim, lb, ub, max_iter, swarm_size, w, c1, c2)
% fitness_func: 适应度函数
% dim: 变量维度
% lb: 变量下界
% ub: 变量上界
% max_iter: 最大迭代次数
% swarm_size: 粒子群大小
% w: 惯性权重
% c1: 学习因子1
% c2: 学习因子2
% 初始化粒子群
x = rand(swarm_size, dim) .* (ub - lb) + lb;
v = zeros(swarm_size, dim);
pbest_x = x;
pbest_fval = feval(fitness_func, x);
[best_fval, gbest_idx] = min(pbest_fval);
gbest_x = pbest_x(gbest_idx, :);
% 迭代寻找最优解
for iter = 1:max_iter
r1 = rand(swarm_size, dim);
r2 = rand(swarm_size, dim);
v = w .* v + c1 .* r1 .* (pbest_x - x) + c2 .* r2 .* (gbest_x - x);
x = x + v;
x(x < lb) = lb(x < lb);
x(x > ub) = ub(x > ub);
fval = feval(fitness_func, x);
update_idx = fval < pbest_fval;
pbest_x(update_idx, :) = x(update_idx, :);
pbest_fval(update_idx) = fval(update_idx);
[new_best_fval, new_gbest_idx] = min(pbest_fval);
if new_best_fval < best_fval
best_fval = new_best_fval;
gbest_x = pbest_x(new_gbest_idx, :);
end
end
best_x = gbest_x;
end
```
其中,`fitness_func` 是适应度函数,`dim` 是变量维度,`lb` 和 `ub` 分别是变量下界和上界,`max_iter` 是最大迭代次数,`swarm_size` 是粒子群大小,`w` 是惯性权重,`c1` 和 `c2` 分别是学习因子1和学习因子2。