2025年8月最新优化算法——云漂移优化算法

注:该算法已按照智能优化算法APP标准格式进行整改,可直接集成到APP中,方便大家与自己的算法进行对比。

云漂移优化算法(Cloud Drift Optimization Algorithm, CDO)的灵感源自天空中云团的灵动变幻。那些在大气力作用下悠然漂移、聚散自如的云粒子,藏着探索与开发的精妙平衡 —— 既会随风远行探索未知空域,又能在特定区域汇聚深耕。科研人员从中汲取智慧,将云的动态特性转化为独特的优化逻辑:通过自适应权重调整模拟云的实时漂移行为,借概率性移动策略在搜索空间中灵活穿梭。这种模拟自然的算法,正以高效的导航能力和稳健的性能,在复杂优化问题中展现出独特优势。

该成果于2025年8月最新发表于计算机领域期刊Discover Computing,出显著的应用潜力。

1 算法原理详解

(1)算法初始化

在初始阶段,算法通过在搜索空间中随机设定  个候选解(云),以实现对整个搜索域的无偏覆盖:

其中  表示在区间 [0, 1] 上的均匀随机分布。该步骤模拟了天空中云粒子的随机初始分布,其初始位置未知且呈离散分布。

(2)权重自适应

每个云(或粒子)根据其相对于群体中其他粒子的适应度值被赋予一个动态权重。该权重决定了粒子受到自身位置及其他粒子位置影响的强度。每个云的权重依据适应度函数进行更新:

其中  表示迄今为止找到的最优适应度值。 ,其中  为所有云中的最差适应度值,  为避免除零而引入的极小常数。该权重自适应机制使算法能够更多地关注适应度较优的粒子,同时允许适应度较差的粒子探索新的区域。在自适应权重更新公式中取值 0.3 与 0.7,系通过大量实证调参获得,其作用是控制缩放因子在区间 [0.3, 1.0] 内变化,从而在保持群体多样性的同时,自适应地平衡探索与开发过程。

该方法模拟了云的自然行为,即主要的大气力会作用于其邻近的粒子。从数学角度来看,这类似于进化算法中常见的基于适应度比例的选择机制。通过持续调整权重,CDO 能够避免过早收敛,并在后期阶段仍保持有效的探索能力。

(3)开发阶段:局部优化

在该阶段,云体逐步向迄今为止找到的最优解(即全局最优位置)移动。其位置更新方程为:

其中  表示在迭代  时刻已知的最优解,  表示一个受因子  影响的小随机调整,该因子用于控制开发程度。此精炼行为模拟了云在初始运动后逐渐调整形态的过程,即基于邻近最优解不断修正其位置。

(4)探索阶段:全局搜索

在探索环节中,算法通过允许云在搜索空间内的随机运动来实现种群多样性,以避免陷入局部最优:

其中  表示影响粒子运动的另一随机因子。参数  随时间递减,使算法逐步从探索阶段过渡到开发阶段。该阶段模拟了大气中云的随机漂移,确保算法通过鼓励探索新区域来避免陷入局部最优。该策略源于不可预测的大气条件下云的随机漂移行为,使得即便表现较差的粒子也有机会探索新的区域,这对于跳出局部最优至关重要。通过引入随机参考点,算法能够促进种群多样性,避免停滞,并在多峰优化场景下提升鲁棒性。

(5)随机扰动机制

为了避免算法过早陷入收敛,并在后期阶段保持探索特性,部分云可能会被随机重置。其发生概率为 ,且该概率会随着算法运行逐步降低:

该随机化机制模拟了大气条件的不可预测变化,这些变化可能改变漂移云的运动轨迹,从而确保即使在算法后期仍能继续搜索。此技术类似于模拟退火或遗传算法中的变异操作。通过引入偶尔的大幅扰动,算法能够保持跳出局部最优的能力,并有效优化全局解。

下图展示了一个概念性框架,说明了云体与目标区域之间的相互作用。图中揭示了云群内部的基本交互和修正行为,并强调了三种关键作用力:吸引力:当云体处于一定距离时,会相互吸引,促使它们靠拢;排斥力:当云体过于接近时,排斥力会将它们分开,防止过度拥挤,并保证搜索空间的有效探索;目标区:表示云体试图到达的目标区域。吸引力与排斥力的相互作用引导云群向该最优区域靠近。图中显示了吸引力与排斥力如何在探索(发现新区域)与利用(集中于有潜力的区域)之间实现平衡,使云群能够高效收敛至最佳解。

所提出的CDO算法的完整流程如下图所示。

2 结果展示

3、MATLAB核心代码

%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 云漂移优化算法(Cloud Drift Optimization Algorithm, CDO)
function [Best_fitness, Best_position, Convergence_curve] = CDO(N, Max_iter, lb, ub, dim, fobj)
    disp('Enhanced Cloud Drift Optimization (CDO) is optimizing your problem');
    
    % Initialization
    Best_position = zeros(1, dim);
    Best_fitness = inf;
    AllFitness = inf * ones(N, 1);
    weight = ones(N, dim);
    X = initialization(N, dim, ub, lb);
    Convergence_curve = zeros(1, Max_iter);
    it = 1;
    search_history = X;

    % Algorithm parameters
    z = 0.005;  % Initial probability of random movement
    StoppingThreshold = 1e-300;  % Lower stopping threshold for higher precision
    while it <= Max_iter
        % Evaluate objective function for each solution
        for i = 1:N
            X(i, :) = min(max(X(i, :), lb), ub);  % Keep solutions within bounds
            AllFitness(i) = fobj(X(i, :));
        end
        
        % Sort solutions based on fitness values
        [SmellOrder, SmellIndex] = sort(AllFitness);
        bestFitness = SmellOrder(1);
        worstFitness = SmellOrder(N);
        S = bestFitness - worstFitness + eps;
        
        % Update weights dynamically
        for i = 1:N
            for j = 1:dim
                if i <= (N / 2)
                    weight(SmellIndex(i), j) = 1 + (0.3 + 0.7 * rand()) * log10((bestFitness - SmellOrder(i)) / S + 1);
                else
                    weight(SmellIndex(i), j) = 1 - (0.3 + 0.7 * rand()) * log10((SmellOrder(i) - bestFitness) / S + 1);
                end
            end
        end
        
        % Update the best solution found so far
        if bestFitness < Best_fitness
            Best_position = X(SmellIndex(1), :);
            Best_fitness = bestFitness;
        end
        
        % Stop early if precision target is reached
        if Best_fitness < StoppingThreshold
            disp(['Converged at iteration ', num2str(it)]);
            break;
        end
        
        % Adjust control parameters dynamically
        a = atanh(-it / Max_iter + 1);
        b = 1 - it / Max_iter;
        z = 0.002 + 0.003 * (1 - it / Max_iter);  % Reduce random jumps over iterations

        % Update particle positions
        for i = 1:N
            if rand < z
                % Random reinitialization of some solutions
              X(i, :) = min(max((ub - lb) .* rand(1, dim) + lb, lb), ub);
            else
                p = tanh(abs(AllFitness(i) - Best_fitness));
                vb = unifrnd(-0.2 * a, 0.2 * a, 1, dim);
                vc = unifrnd(-0.2 * b, 0.2 * b, 1, dim);
                for j = 1:dim
                    r = rand();
                    A = randi([1, N]);
                    B = randi([1, N]);
                    if r < p
                        % Exploitation phase
                        X(i, j) = Best_position(j) + 0.8 * vb(j) * (weight(i, j) * X(A, j) - X(B, j));
                    else
                        % Exploration phase
                        X(i, j) = vc(j) * X(i, j);
                    end
                    % Fine-tuning in the final iterations
                    if it > 0.9 * Max_iter
                         X(i, j) = X(i, j) * (1 - 1e-12 * randn());
                    end
                end
            end
            X(i, :) = min(max(X(i, :), lb), ub);
        end
        % Store convergence data
        Convergence_curve(it) = Best_fitness;
        it = it + 1;
    end
end

参考文献

[1] Alibabaei Shahraki, M. Cloud drift optimization algorithm as a nature-inspired metaheuristic. Discov Computing 28, 173 (2025). https://doi.org/10.1007/s10791-025-09671-6.

完整代码获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘个代码_

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值