PSO算法的matlab代码
时间: 2023-09-14 12:08:47 浏览: 42
以下是一个简单的PSO算法的matlab代码示例:
```
% 定义问题的目标函数
function [f] = objective_function(x)
f = sum(x.^2);
end
% PSO算法
function [best_pos, best_val] = pso(obj_func, n_vars, n_particles, max_iter, lb, ub)
% 初始化粒子位置和速度
pos = lb + (ub-lb)*rand(n_particles,n_vars);
vel = zeros(n_particles,n_vars);
% 初始化最佳位置和最佳值
best_pos = pos;
best_val = obj_func(best_pos);
% 迭代
for i = 1:max_iter
% 更新粒子速度和位置
vel = vel + rand(n_particles,n_vars).*(best_pos-pos) + rand(n_particles,n_vars).*(repmat(mean(best_pos)-pos,n_particles,1));
pos = pos + vel;
% 边界处理
pos = max(pos,lb);
pos = min(pos,ub);
% 更新最佳位置和最佳值
val = obj_func(pos);
for j = 1:n_particles
if val(j) < best_val(j)
best_pos(j,:) = pos(j,:);
best_val(j) = val(j);
end
end
end
end
% 示例
n_vars = 2; % 变量的数量
n_particles = 20; % 粒子的数量
max_iter = 100; % 最大迭代次数
lb = [-5,-5]; % 变量的下界
ub = [5,5]; % 变量的上界
[obj_func, ~] = @objective_function; % 目标函数
[best_pos, best_val] = pso(obj_func, n_vars, n_particles, max_iter, lb, ub);
disp(['最优解:', num2str(best_pos)]);
disp(['最优值:', num2str(best_val)]);
```