鲸鱼优化算法matlab代码
时间: 2023-11-25 16:58:12 浏览: 96
鲸鱼优化算法(Whale Optimization Algorithm,WOA)是一种新兴的启发式优化算法,模拟了鲸鱼群体中的捕食行为和社会行为,具有全局收敛性和高精度的优化能力。以下是鲸鱼优化算法的MATLAB实现代码:
```
function [bestSol, bestFit] = WOA(fitnessfun, dim, lb, ub, max_iter, pop_size, a=2)
% 参数说明:
% fitnessfun: 适应度函数句柄,例如 @(x) x.^2
% dim: 搜索空间的维度
% lb: 搜索空间的下界
% ub: 搜索空间的上界
% max_iter: 最大迭代次数
% pop_size: 种群规模
% a: 控制参数,取值范围[0, 2]
% 初始化种群
pop = rand(pop_size, dim) .* (ub - lb) + lb;
fit = feval(fitnessfun, pop);
[bestFit, bestIdx] = min(fit);
bestSol = pop(bestIdx, :);
for iter = 1:max_iter
a = 2 - iter * (2 / max_iter); % 更新控制参数
for i = 1:pop_size
r1 = rand(); % 随机数
r2 = rand();
A = 2 * a * r1 - a; % 计算系数A
C = 2 * r2; % 计算系数C
% 随机选择三个解
idxs = randperm(pop_size, 3);
X1 = pop(idxs(1), :);
X2 = pop(idxs(2), :);
X3 = pop(idxs(3), :);
% 计算差分向量D
D = abs(C .* X1 - pop(i, :)) - abs(C .* X2 - pop(i, :));
D = A .* D;
% 更新位置
newPop = pop(i, :) + rand(1, dim) .* D;
newPop(newPop > ub) = ub;
newPop(newPop < lb) = lb;
% 更新适应度
newFit = feval(fitnessfun, newPop);
if newFit < fit(i)
fit(i) = newFit;
pop(i, :) = newPop;
end
% 更新全局最优解
if newFit < bestFit
bestFit = newFit;
bestSol = newPop;
end
end
end
end
```
使用时,只需要定义适应度函数、搜索空间的维度、搜索空间的上下界、最大迭代次数和种群规模即可。例如,要使用鲸鱼优化算法求解目标函数$f(x)=x_1^2+x_2^2$的最小值,搜索空间为$x_1 \in [-10, 10]$,$x_2 \in [-5, 5]$,种群规模为50,最大迭代次数为1000,可以这样调用:
```
fitnessfun = @(x) x(:, 1).^2 + x(:, 2).^2;
dim = 2;
lb = [-10, -5];
ub = [10, 5];
max_iter = 1000;
pop_size = 50;
[a, b] = WOA(fitnessfun, dim, lb, ub, max_iter, pop_size);
```
其中,$a$为最优解,$b$为最优解对应的适应度值。
阅读全文