灰狼搜索算法的matlab代码
时间: 2023-09-24 15:02:30 浏览: 31
灰狼搜索算法是一种基于自然界中灰狼群体行为的优化算法,它可以用来解决多种优化问题,例如函数优化、机器学习等。下面是一个简单的 Matlab 代码实现:
```matlab
function [best_pos, best_fit] = GWO(fitness, dim, lb, ub, max_iter, N)
% fitness: 目标函数句柄
% dim: 变量维度
% lb: 下界
% ub: 上界
% max_iter: 最大迭代次数
% N: 狼群数量
% 初始化灰狼位置和适应度
pos = repmat(lb, N, dim) + rand(N, dim) .* (repmat(ub-lb, N, 1));
fit = arrayfun(fitness, pos);
% 初始化最优位置和适应度
[best_fit, idx] = min(fit);
best_pos = pos(idx, :);
% 开始迭代
for t = 1:max_iter
% 计算灰狼的适应度
for i = 1:N
if fit(i) < best_fit
best_fit = fit(i);
best_pos = pos(i, :);
end
end
% 更新灰狼位置
a = 2 - t * (2 / max_iter); % 衰减因子
for i = 1:N
r1 = rand(); r2 = rand();
A = 2 * a * r1 - a; % 距离 alpha 最近的狼
C = 2 * r2; % 随机独立变量
D = abs(C * best_pos - pos(i, :));
X1 = best_pos - A * D; % 更新位置
r1 = rand(); r2 = rand();
A = 2 * a * r1 - a; % 距离 beta 最近的狼
D = abs(C * best_pos - pos(i, :));
X2 = best_pos - A * D; % 更新位置
r1 = rand(); r2 = rand();
A = 2 * a * r1 - a; % 距离 delta 最近的狼
D = abs(C * best_pos - pos(i, :));
X3 = best_pos - A * D; % 更新位置
pos(i, :) = (X1 + X2 + X3) / 3; % 更新位置
pos(i, :) = max(pos(i, :), lb); % 确保位置在边界内
pos(i, :) = min(pos(i, :), ub);
fit(i) = fitness(pos(i, :)); % 更新适应度
end
end
end
```
使用方法:
1. 定义目标函数句柄 `fitness`,例如:
```matlab
fitness = @(x) sum((x-0.5).^2);
```
2. 调用函数进行优化:
```matlab
best_pos = GWO(fitness, 2, [-5,-5], [5,5], 100, 50);
```
这里使用灰狼搜索算法对二维 Rosenbrock 函数进行优化,搜索范围为 $[-5,5]$,最大迭代次数为 $100$,狼群数量为 $50$。