粒子群算法代码matlab
时间: 2023-08-05 11:00:19 浏览: 116
粒子群算法(Particle Swarm Optimization,PSO)是一种优化算法,可以用于求解函数最优化问题。下面是一个基于Matlab的粒子群算法示例代码:
```matlab
function [gbest,gbest_fit]=pso(func, dim, range, num_particles, num_iterations)
% 初始化粒子群的位置和速度
particles.pos = unifrnd(range(1),range(2),[num_particles,dim]);
particles.vel = zeros(num_particles,dim);
% 初始化个体最佳位置和适应度
particles.pbest_pos = particles.pos;
particles.pbest_fit = inf(num_particles,1);
% 初始化全局最佳位置和适应度
[pbest_fit,pbest_index] = min(func(particles.pbest_pos));
gbest = particles.pbest_pos(pbest_index,:);
gbest_fit = pbest_fit;
% 开始迭代
for iter=1:num_iterations
for i=1:num_particles
% 更新速度
particles.vel(i,:) = particles.vel(i,:) + ...
2*rand(1,dim).*(particles.pbest_pos(i,:)-particles.pos(i,:)) + ...
2*rand(1,dim).*(gbest-particles.pos(i,:));
% 更新位置
particles.pos(i,:) = particles.pos(i,:) + particles.vel(i,:);
% 边界处理
particles.pos(i,:) = min(max(particles.pos(i,:), range(1)), range(2));
% 更新个体最佳位置和适应度
curr_fit = func(particles.pos(i,:));
if curr_fit < particles.pbest_fit(i)
particles.pbest_pos(i,:) = particles.pos(i,:);
particles.pbest_fit(i) = curr_fit;
end
% 更新全局最佳位置和适应度
if curr_fit < gbest_fit
gbest = particles.pos(i,:);
gbest_fit = curr_fit;
end
end
end
end
% 使用示例
func = @(x) sum(x.^2, 2); % 目标函数为多元变量的平方和
dim = 2; % 变量维数
range = [-5, 5]; % 变量取值范围
num_particles = 50; % 粒子数目
num_iterations = 100; % 迭代次数
[gbest, gbest_fit] = pso(func, dim, range, num_particles, num_iterations);
disp('全局最佳位置:');
disp(gbest);
disp('全局最佳适应度:');
disp(gbest_fit);
```
该代码实现了一个简单的粒子群算法,用于求解函数最优化问题。用户需要指定目标函数、变量维数、变量取值范围、粒子数目和迭代次数。程序会返回全局最佳位置和适应度。在示例中,目标函数为多元变量的平方和,变量维数为2,取值范围为-5到5,粒子数目为50,迭代次数为100。用户可以根据具体问题进行相应的修改和扩展。
阅读全文