用MATLAB写一段灰狼算法
时间: 2023-07-19 13:14:58 浏览: 40
好的,下面是用MATLAB实现的灰狼算法:
```matlab
function [best, fbest] = grey_wolf_optimizer(fobj, dim, lb, ub, max_iter)
% Grey Wolf Optimizer (GWO) for numerical optimization
% fobj: objective function to minimize
% dim: number of dimensions or variables
% lb: lower bound of variables
% ub: upper bound of variables
% max_iter: maximum number of iterations
% initialize the positions of grey wolves
alpha = rand(1,dim) .* (ub-lb) + lb;
beta = rand(1,dim) .* (ub-lb) + lb;
delta = rand(1,dim) .* (ub-lb) + lb;
% initialize the best solution found so far
best = alpha;
fbest = fobj(best);
% main loop
for t = 1:max_iter
% update the positions of grey wolves
for i = 1:3
A(i,:) = 2 * rand(1,dim) - 1; % randomization factor
C(i,:) = 2 * rand(1,dim); % scale factor
D(i,:) = abs(C(i,:) .* delta - alpha); % distance vector
X1(i,:) = alpha - A(i,:) .* D(i,:); % new position
A(i,:) = 2 * rand(1,dim) - 1; % randomization factor
C(i,:) = 2 * rand(1,dim); % scale factor
D(i,:) = abs(C(i,:) .* beta - alpha); % distance vector
X2(i,:) = beta - A(i,:) .* D(i,:); % new position
A(i,:) = 2 * rand(1,dim) - 1; % randomization factor
C(i,:) = 2 * rand(1,dim); % scale factor
D(i,:) = abs(C(i,:) .* delta - beta); % distance vector
X3(i,:) = delta - A(i,:) .* D(i,:); % new position
end
% select the best 3 positions
X = [X1; X2; X3];
F = zeros(1,9);
for i = 1:9
F(i) = fobj(X(i,:));
end
[F, idx] = sort(F);
X = X(idx,:);
% update alpha, beta, and delta
alpha = X(1,:);
beta = X(2,:);
delta = X(3,:);
% update the best solution found so far
if fobj(alpha) < fbest
best = alpha;
fbest = fobj(alpha);
end
end
end
```
其中,`fobj`是要最小化的目标函数,`dim`是变量的数量,`lb`和`ub`是变量的下限和上限,`max_iter`是最大迭代次数。输出参数`best`是找到的最优解,`fbest`是最优解对应的目标函数值。
使用时,可以定义一个目标函数,例如:
```matlab
function y = sphere(x)
y = sum(x.^2);
end
```
然后调用`grey_wolf_optimizer`函数,例如:
```matlab
best = grey_wolf_optimizer(@sphere, 10, -100*ones(1,10), 100*ones(1,10), 100);
```
这表示要最小化的目标函数是`sphere`,变量的数量是10,下限和上限都是-100和100,最大迭代次数是100。运行后,`best`就是找到的最优解。