粒子群优化matlab代码
时间: 2023-11-25 22:17:45 浏览: 18
以下是粒子群优化的MATLAB代码:
function [best_solution, best_fitness] = PSO(fitness_func, dim, lb, ub, swarm_size, max_iter)
% fitness_func: 适应度函数句柄
% dim: 变量维度
% lb: 变量下界
% ub: 变量上界
% swarm_size: 粒子数
% max_iter: 迭代次数
% best_solution: 最佳解
% best_fitness: 最佳适应度
% 初始化粒子位置和速度
position = repmat(lb, swarm_size, dim) + rand(swarm_size, dim) .* repmat(ub-lb, swarm_size, 1);
velocity = rand(swarm_size, dim) .* repmat(ub-lb, swarm_size, 1) / 2;
% 计算适应度
fitness = feval(fitness_func, position);
% 初始化个体最佳位置和适应度
pbest_position = position;
pbest_fitness = fitness;
% 初始化全局最佳位置和适应度
[best_fitness, i] = min(pbest_fitness);
best_solution = pbest_position(i, :);
% 开始迭代
for t = 1:max_iter
% 更新速度和位置
velocity = velocity + rand(swarm_size, dim) .* (pbest_position - position) + rand(swarm_size, dim) .* repmat(best_solution, swarm_size, 1) - position;
position = position + velocity;
% 边界处理
position(position < lb) = lb(position < lb);
position(position > ub) = ub(position > ub);
% 计算适应度
fitness = feval(fitness_func, position);
% 更新个体最佳位置和适应度
update = fitness < pbest_fitness;
pbest_position(update, :) = position(update, :);
pbest_fitness(update) = fitness(update);
% 更新全局最佳位置和适应度
[tmp_best_fitness, i] = min(pbest_fitness);
if tmp_best_fitness < best_fitness
best_fitness = tmp_best_fitness;
best_solution = pbest_position(i, :);
end
end
end
% 示例适应度函数
function f = fitness_func(x)
f = sum(x.^2, 2);
end
% 示例调用方式
[best_solution, best_fitness] = PSO(@fitness_func, 2, -10, 10, 50, 100);