粒子群优化算法matlab代码
时间: 2023-06-29 08:19:14 浏览: 88
以下是一个简单的粒子群优化算法的 MATLAB 代码示例:
```matlab
function [gbest, fit_gbest] = PSO(fun, dim, lb, ub, max_iter, pop_size)
% 初始化种群
pop = lb + (ub - lb) .* rand(pop_size, dim);
% 初始化速度
v = zeros(pop_size, dim);
% 初始化个体最优位置和适应度
pbest = pop;
fit_pbest = feval(fun, pbest);
% 初始化全局最优位置和适应度
[fit_gbest, gbest_idx] = min(fit_pbest);
gbest = pbest(gbest_idx,:);
% 迭代
for i = 1:max_iter
% 更新速度和位置
v = v + rand(pop_size, dim) .* (pbest - pop) + rand(pop_size, dim) .* (gbest - pop);
pop = pop + v;
% 边界处理
pop(pop < lb) = lb(pop < lb);
pop(pop > ub) = ub(pop > ub);
% 计算适应度
fit_pop = feval(fun, pop);
% 更新个体最优位置和适应度
idx = fit_pop < fit_pbest;
pbest(idx,:) = pop(idx,:);
fit_pbest(idx) = fit_pop(idx);
% 更新全局最优位置和适应度
[tmp_fit, tmp_idx] = min(fit_pbest);
if tmp_fit < fit_gbest
fit_gbest = tmp_fit;
gbest = pbest(tmp_idx,:);
end
end
end
```
其中,`fun` 是要优化的目标函数,`dim` 是变量的维度,`lb` 和 `ub` 分别是变量的下界和上界,`max_iter` 是最大迭代次数,`pop_size` 是种群大小。
使用时只需要将优化目标函数写成 MATLAB 函数形式,并调用 `PSO` 函数即可。例如,要优化的目标函数为 Rosenbrock 函数,则代码如下:
```matlab
function f = rosenbrock(x)
f = sum(100 * (x(2:end) - x(1:end-1).^2).^2 + (1 - x(1:end-1)).^2);
end
[gbest, fit_gbest] = PSO(@rosenbrock, 2, [-5,-5], [5,5], 100, 50);
```
其中,`@rosenbrock` 表示 Rosenbrock 函数,`2` 表示变量的维度,`[-5,-5]` 和 `[5,5]` 分别是变量的下界和上界,`100` 是最大迭代次数,`50` 是种群大小。优化结果保存在 `gbest` 和 `fit_gbest` 中。
阅读全文