灰狼优化算法MATLAB代码
时间: 2023-09-08 20:15:22 浏览: 118
灰狼优化算法(Grey Wolf Optimizer,GWO)是一种基于自然界灰狼群体行为的优化算法,由Mirjalili等人于2014年提出。下面是MATLAB代码实现:
```matlab
function [bestSol, bestFit] = GWO(fobj, dim, lb, ub, maxIter, N)
% 参数:
% fobj:目标函数句柄
% dim:问题维度
% lb:变量下界
% ub:变量上界
% maxIter:最大迭代次数
% N:狼群大小
% 初始化狼群
pos = bsxfun(@plus, lb, bsxfun(@times, rand(N, dim), (ub-lb)));
vel = zeros(N, dim);
fit = feval(fobj, pos);
[bestFit, bestIdx] = min(fit);
bestSol = pos(bestIdx, :);
% 迭代
for iter = 1:maxIter
a = 2 - 2 * iter / maxIter; % 计算a值
for i = 1:N
for j = 1:dim
A(i,j) = 2 * a * rand() - a; % 计算A值
C(i,j) = 2 * rand(); % 计算C值
D(i,j) = abs(C(i,j) * bestSol(j) - pos(i,j)); % 计算D值
X1(i,j) = bestSol(j) - A(i,j) * D(i,j); % 计算X1
X2(i,j) = bestSol(j) - A(i,j) * D(i,j) + C(i,j) * vel(i,j); % 计算X2
X3(i,j) = bestSol(j) - A(i,j) * D(i,j) + C(i,j) * (2 * rand() - 1) * abs(lb(j) - ub(j)); % 计算X3
end
% 选择最好的下一代狼
f1 = feval(fobj, X1(i,:));
f2 = feval(fobj, X2(i,:));
f3 = feval(fobj, X3(i,:));
if f1 < fit(i)
pos(i,:) = X1(i,:);
fit(i) = f1;
elseif f2 < fit(i)
pos(i,:) = X2(i,:);
fit(i) = f2;
elseif f3 < fit(i)
pos(i,:) = X3(i,:);
fit(i) = f3;
end
end
% 更新最优解
[newBestFit, newBestIdx] = min(fit);
if newBestFit < bestFit
bestFit = newBestFit;
bestSol = pos(newBestIdx, :);
end
% 更新速度
vel = rand(N, dim) .* vel + (bestSol - pos) .* repmat(A, 1, dim);
end
end
```
使用方法:
1. 定义目标函数句柄,如:
```matlab
fobj = @(x) sum(x.^2);
```
2. 调用GWO函数,如:
```matlab
dim = 10; % 变量个数
lb = -10 * ones(1, dim); % 变量下界
ub = 10 * ones(1, dim); % 变量上界
maxIter = 100; % 最大迭代次数
N = 20; % 狼群大小
[bestSol, bestFit] = GWO(fobj, dim, lb, ub, maxIter, N);
```
其中bestSol是最优解,bestFit是最优解对应的目标函数值。