PSO代码matlab
时间: 2023-10-25 18:11:18 浏览: 93
以下是一个简单的粒子群优化(PSO)算法的 Matlab 代码:
```matlab
function [x, fval] = pso(fitnessfcn, nvars)
% PSO: Particle Swarm Optimization
% fitnessfcn: 适应度函数
% nvars: 变量个数
% 初始化参数
n = 20; % 粒子数
w = 0.7; % 惯性权重
c1 = 1.5; % 学习因子1
c2 = 1.5; % 学习因子2
maxiter = 100; % 最大迭代次数
% 初始化粒子位置和速度
x = rand(n, nvars); % 粒子位置
v = rand(n, nvars); % 粒子速度
% 初始化个体最优位置和适应度值
pbest = x; % 个体最优位置
pbestval = feval(fitnessfcn, x); % 个体最优适应度值
% 初始化全局最优位置和适应度值
[gbestval, gbestidx] = min(pbestval); % 全局最优适应度值和索引
gbest = pbest(gbestidx, :); % 全局最优位置
% 迭代优化
for iter = 1:maxiter
% 更新粒子速度和位置
v = w * v + c1 * rand(n, nvars) .* (pbest - x) + c2 * rand(n, nvars) .* (repmat(gbest, n, 1) - x);
x = x + v;
% 边界处理
x(x > 1) = 1;
x(x < 0) = 0;
% 更新个体最优位置和适应度值
pbestval_new = feval(fitnessfcn, x);
idx = pbestval_new < pbestval; pbest(idx, :) = x(idx, :);
pbestval(idx) = pbestval_new(idx);
% 更新全局最优位置和适应度值
[gbestval_new, gbestidx_new] = min(pbestval); if gbestval_new < gbestval
gbestval = gbestval_new;
gbest = pbest(gbestidx_new, :);
end
% 输出迭代信息
fprintf('Iteration %d: Best Fitness Value = %f\n', iter, gbestval);
end
% 返回最优解和适应度值
x = gbest;
fval = gbestval;
end
```
其中,`fitnessfcn` 是适应度函数,`nvars` 是变量个数。在使用时,只需要将适应度函数作为第一个参数传入即可。
阅读全文