matlab粒子群算法程序源代码
时间: 2023-10-18 13:03:14 浏览: 148
Matlab粒子群算法程序源代码如下:
```matlab
%% 参数设定
n = 30; % 粒子数量
max_iter = 100; % 最大迭代次数
w = 0.7; % 惯性权重
c1 = 1.5; % 学习因子1
c2 = 1.5; % 学习因子2
%% 初始化粒子位置和速度
position = rand(n, 2); % 粒子位置范围在0-1之间
velocity = zeros(n, 2); % 初始速度为零
%% 计算适应度函数值
fitness = zeros(n, 1);
for i = 1:n
fitness(i) = objective_function(position(i, :));
end
%% 初始化最优位置和最优适应度
pbest_position = zeros(n, 2); % 个体最优位置
pbest_fitness = zeros(n, 1); % 个体最优适应度
gbest_position = zeros(1, 2); % 全局最优位置
gbest_fitness = Inf; % 全局最优适应度
%% 迭代计算
for iter = 1:max_iter
for i = 1:n
% 更新速度
velocity(i, :) = w * velocity(i, :) ...
+ c1 * rand(1) * (pbest_position(i, :) - position(i, :)) ...
+ c2 * rand(1) * (gbest_position - position(i, :));
% 限制速度范围
velocity(i, :) = max(velocity(i, :), -0.5);
velocity(i, :) = min(velocity(i, :), 0.5);
% 更新位置
position(i, :) = position(i, :) + velocity(i, :);
% 限制位置范围
position(i, :) = max(position(i, :), 0);
position(i, :) = min(position(i, :), 1);
% 更新适应度
fitness(i) = objective_function(position(i, :));
% 更新个体最优位置和适应度
if fitness(i) < pbest_fitness(i)
pbest_position(i, :) = position(i, :);
pbest_fitness(i) = fitness(i);
end
% 更新全局最优位置和适应度
if fitness(i) < gbest_fitness
gbest_position = position(i, :);
gbest_fitness = fitness(i);
end
end
end
%% 输出结果
disp('全局最优位置:');
disp(gbest_position);
disp('全局最优适应度:');
disp(gbest_fitness);
%% 定义适应度函数
function fitness = objective_function(x)
fitness = x(1)^2 + x(2)^2; % 适应度计算公式
end
```
以上是一个简单的粒子群算法程序,其中根据问题的具体需求,可以修改参数设置、适应度函数等部分。程序使用的适应度函数示例为简单的二维函数x1^2 + x2^2,可根据实际情况进行替换。在迭代计算过程中,根据粒子当前位置和速度更新粒子位置,并根据新位置计算适应度值。同时,更新个体最优位置和适应度,以及全局最优位置和适应度。最后,输出全局最优位置和适应度作为最终结果。
阅读全文