三维鲸鱼算法Matlab代码
时间: 2024-01-22 17:42:26 浏览: 25
三维鲸鱼算法是一种优化算法,用于求解非线性优化问题。以下是Matlab代码实现:
```
function [best, fmin] = whale_algorithm(func, dim, lb, ub, max_iter)
% 参数说明:
% func:目标函数句柄
% dim:搜索空间维度
% lb:搜索空间下限
% ub:搜索空间上限
% max_iter:最大迭代次数
% 初始化鲸群
pop_size = 30; % 鲸群大小
X = repmat(lb, pop_size, 1) + rand(pop_size, dim) .* repmat(ub-lb, pop_size, 1);
fitness = feval(func, X);
best = X(1, :); % 最优解
fmin = fitness(1); % 最优解的函数值
% 迭代
for iter = 1:max_iter
a = 2 - iter * (2 / max_iter); % a参数
A = repmat(a, pop_size, 1); % 鲸群半径
r = rand(pop_size, dim); % 随机向量
C = 2 * r - 1; % C参数
p = rand(pop_size, dim); % p参数
b = 1; % b参数
l = (a-1) * rand(pop_size, 1) + 1; % l参数
% 更新鲸群位置
for i = 1:pop_size
if fitness(i) < fmin
best = X(i, :);
fmin = fitness(i);
end
for j = 1:dim
if p(i, j) < 0.5
if abs(C(i, j)) < 1
X(i, j) = best(j) - A(i) * C(i, j);
else
rand_whale = ceil(pop_size * rand); % 随机选择一个鲸鱼
X(i, j) = X(rand_whale, j) - A(i) * C(i, j);
end
else
dist = abs(best(j) - X(i, j));
X(i, j) = dist * exp(b * l(i)) * cos(2 * pi * l(i)) + best(j);
end
end
end
% 计算新位置的函数值
fitness = feval(func, X);
end
end
```
在调用该函数时,需要先定义目标函数func,并指定搜索空间的维度dim、下限lb、上限ub和最大迭代次数max_iter。例如:
```
% 定义目标函数
func = @(x) sum(x.^2);
% 搜索空间维度为3,下限为-10,上限为10,最大迭代次数为100
best = whale_algorithm(func, 3, -10, 10, 100);
```
该示例中,目标函数为x的平方和,搜索空间维度为3,下限为-10,上限为10,最大迭代次数为100。调用whale_algorithm函数后,返回最优解best。