function [best_solution, best_fitness] = woa_algorithm(obj_function, num_variables, lb, ub, num_whales, max_iterations)
% 参数:
% obj_function: 优化的目标函数
% num_variables: 决策变量的数量
% lb: 变量的下界
% ub: 变量的上界
% num_whales: 鲸的数量
% max_iterations: 最大迭代次数
% 初始化鲸群
whales_position = repmat(lb, num_whales, 1) + rand(num_whales, num_variables) .* (repmat(ub, num_whales, 1) - repmat(lb, num_whales, 1));
whales_fitness = zeros(num_whales, 1);
% 主循环
for iter = 1:max_iterations
a = 2 - iter * (2 / max_iterations); % 衰减参数
% 更新鲸的位置和适应度
for i = 1:num_whales
whales_fitness(i) = obj_function(whales_position(i, :));
if whales_fitness(i) < 0
whales_fitness(i) = 0; % 如果适应度小于0,将其设为0
end
end
[sorted_fitness, sorted_index] = sort(whales_fitness);
best_whale_position = whales_position(sorted_index(1), :);
best_whale_fitness = sorted_fitness(1);
% 更新鲸的位置
for i = 1:num_whales
r1 = rand(); % 随机数
r2 = rand(); % 随机数
A = 2 * a * r1 - a; % 更新参数A
C = 2 * r2; % 更新参数C
distance_to_best = abs(C * best_whale_position - whales_position(i, :)); % 与最优鲸的距离
new_position = best_whale_position - A * distance_to_best;
% 边界检查
new_position = max(new_position, lb);
new_position = min(new_position, ub);
whales_position(i, :) = new_position;
end
end
% 找到最佳解
[best_fitness, best_index] = min(whales_fitness);
best_solution = whales_position(best_index, :);
end