PSO算法的MATLAB代码
时间: 2023-11-26 22:19:19 浏览: 30
以下是一个简单的PSO算法的MATLAB代码:
%初始化种群和速度
num_particles = 20; %粒子数量
num_dimensions = 30; %维度数量
max_iterations = 50; %最大迭代次数
lb = -5.12; %搜索空间下限
ub = 5.12; %搜索空间上限
%随机生成初始位置和速度
positions = lb + (ub - lb) * rand(num_particles, num_dimensions);
velocities = zeros(num_particles, num_dimensions);
%初始化个体最优解和全局最优解
pbest_positions = positions;
pbest_values = inf(num_particles, 1);
gbest_position = zeros(1, num_dimensions);
gbest_value = inf;
%开始迭代
for iteration = 1:max_iterations
%更新速度和位置
for i = 1:num_particles
%计算适应度值
fitness = calculate_fitness(positions(i,:));
%更新个体最优解
if fitness < pbest_values(i)
pbest_values(i) = fitness;
pbest_positions(i,:) = positions(i,:);
end
%更新全局最优解
if fitness < gbest_value
gbest_value = fitness;
gbest_position = positions(i,:);
end
%更新速度和位置
velocities(i,:) = velocities(i,:) + rand(1,num_dimensions) .* (pbest_positions(i,:) - positions(i,:)) + rand(1,num_dimensions) .* (gbest_position - positions(i,:));
positions(i,:) = positions(i,:) + velocities(i,:);
%限制位置在搜索空间内
positions(i,:) = max(positions(i,:), lb);
positions(i,:) = min(positions(i,:), ub);
end
end
%计算适应度函数的值
function fitness = calculate_fitness(position)
fitness = sum(position.^2);
end