WOA算法MATLAB实现

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值