粒子群Matlab代码
时间: 2023-07-02 18:05:01 浏览: 43
以下一个基本粒子群算法的 Matlab 代码:
```
% 粒子群算法
clc; clear; close all;
%% 参数设置
Np = 20; % 粒子数目
D = 2; % 搜索维度
max_g = 200; % 最大迭代次数
w = 0.7; % 惯性权重
c1 = 2; % 学习因子1
c2 = 2; % 学习因子2
%% 初始化
x = rand(Np, D); % 粒子位置
v = rand(Np, D); % 粒子速度
pbest = x; % 个体最佳位置
gbest = x(1, :); % 全局最佳位置
for i = 1:Np
fval(i) = fitness(x(i, :)); % 计算目标函数值
end
pbest_fval = fval; % 个体最佳目标函数值
[best_fval, idx] = min(fval); % 全局最佳目标函数值
%% 迭代
for g = 1:max_g
for i = 1:Np
v(i, :) = w * v(i, :) + c1 * rand(1, D) .* (pbest(i, :) - x(i, :)) + c2 * rand(1, D) .* (gbest - x(i, :)); % 更新速度
x(i, :) = x(i, :) + v(i, :); % 更新位置
fval(i) = fitness(x(i, :)); % 计算目标函数值
if fval(i) < pbest_fval(i) % 更新个体最佳位置
pbest(i, :) = x(i, :);
pbest_fval(i) = fval(i);
end
end
[best_fval_new, idx_new] = min(fval); % 更新全局最佳位置
if best_fval_new < best_fval
best_fval = best_fval_new;
gbest = x(idx_new, :);
end
disp(['第', num2str(g), '次迭代,全局最优解为:', num2str(best_fval), ',最优解点为:', mat2str(gbest)]);
end
%% 目标函数(示例)
function fval = fitness(x)
fval = 0;
for i = 1:length(x)
fval = fval + x(i)^2;
end
end
```
上述代码实现了一个简单的粒子群算法,并且包含了一个示例的目标函数 `fitness`。其中,`x` 为粒子位置,`v` 为粒子速度,`pbest` 为个体最佳位置,`gbest` 为全局最佳位置,`fval` 为目标函数值。在每次迭代中,根据速度更新粒子位置,计算目标函数值,并更新个体最佳位置和全局最佳位置。