1、簡介
這項研究介紹了云漂移優化(數位長)算法,這是一種創新的自然啟發的元啟發式方法來解決復雜的優化問題。CDO模仿受大氣力影響的云粒子的動態行為,在探索和利用之間取得了微妙的平衡。它具有自適應權重調整機制,可以改變云的實時漂移行為,從而在搜索空間中進行高效導航。使用基于云的漂移策略,數位長利用概率運動更有效地在優化環境中機動。該算法經過了各種既定的單峰和多模態基準函數的嚴格測試,與當代頂級優化技術相比,它展示了卓越的性能,具有更快的收斂速度、高魯棒性和卓越的解算精度。
2、算法
云是大氣中的動態形成,由懸浮在空氣中的水滴或冰晶組成。它們在地球的天氣模式和氣候調節中至關重要。云的生命周期和運動是受各種氣象因素影響的復雜過程。盡管云經常被單獨觀察到,但它們也可以形成跨越大地理區域的龐大系統,在大陸范圍內影響天氣條件。云運動的獨特之處在于它對不同大氣條件的適應性。在其初始階段,云形成緩慢,并在當地天氣模式的影響下逐漸移動。隨著它們的成熟和規模的增長,云可以在強風和壓力梯度的驅動下表現出快速和不可預測的運動。
這種行為允許云長距離旅行,影響跨區域的天氣狀況。云運動的主要特征之一是它能夠為生長和發展尋求有利的大氣條件。云自然地向含水量較高、溫度梯度適宜的地區吸引,這為它們的形成和持續提供了必要的條件。這種目標尋找行為對于云在動態大氣中的生存和進化至關重要。在受自然啟發的算法的背景下,搜索過程在邏輯上可以分為兩種傾向:探索和開發。探索鼓勵搜索代理突然移動并探索新的區域,而開發則側重于局部細化和優化。云通過其自適應運動和環境相互作用自然地執行這兩個功能和目標搜索。因此,如果我們能夠對這種行為進行數學建模,我們就可以基于云運動原理設計一種新的自然啟發算法。雖然接下來的模擬和討論強調了數位長算法在搜索空間內定位全局最優的有效性,但隨后的部分將使用各種數學函數和三個苛刻的現實世界問題來評估算法的性能。
CDO是一種受自然啟發的優化算法,基于對地球大氣中云的動態行為進行嚴格的數學建模。與通常使用線性或固定模型的傳統元啟發式方法不同,數位長獨特地利用了云運動的兩個自然階段——開發和探索。這兩個階段相互作用,以實現高效的搜索空間探索和智能收斂以獲得最佳解決方案。在該算法中,每個搜索代理(人造云)根據其相對于其他代理的性能獲得動態權重,類似于大氣中較重和更活躍的云如何對周圍云的方向產生更大的影響。
此外,為了防止過早收斂,使用遞減概率因子對云中的隨機運動和意外擾動(如天氣突變)進行數位長模擬。所有這些步驟都被設計成一個全面而連貫的過程,包括:隨機初始化、動態加權、雙峰位置更新(沉浸/探索)、自適應隨機擾動和智能收斂條件。
2.1 問題定義
給定一個優化問題,其目標是最小化(或最大化)目標函數 f(x)f(x)f(x)在有界搜索空間 Ω\OmegaΩ內,目標是找到:
min?x∈Ωf(x)(1) \min_{x \in \Omega} f(x) \tag{1} x∈Ωmin?f(x)(1)
其中 Ω={x∈Rd∣lb≤xi≤ub}\Omega = \{x \in \mathbb{R}^d | lb \leq x_i \leq ub\}Ω={x∈Rd∣lb≤xi?≤ub},lblblb和 ububub分別是解的第 iii維的下界和上界。
2.2 初始化
算法以 NNN個候選解(云)在搜索空間內的隨機初始化開始,確保對整個空間的無偏探索:
Xi0=lb+(ub?lb)?U(0,1),?i∈{1,2,…,N}(2) X_i^0 = lb + (ub - lb) \cdot U(0, 1), \quad \forall i \in \{1, 2, \ldots, N\} \tag{2} Xi0?=lb+(ub?lb)?U(0,1),?i∈{1,2,…,N}(2)
其中 U(0,1)U(0, 1)U(0,1)表示在范圍 [0, 1] 上的均勻隨機分布。此步驟模擬了天空中云粒子的隨機初始分布,其中初始位置未知且分散。
2.3 權重自適應
每個云(或粒子)根據其相對于群體中其他粒子的適應度值被分配一個動態權重。這權重決定了粒子受其他粒子位置影響的程度。每個云的權重基于適應度函數更新:
wi,j={1+(0.3+0.7?U(0,1))?log?10(f??Xi(j)f??fmax?+1),if?i≤N21?(0.3+0.7?U(0,1))?log?10(Xi(j)?f?S+1),otherwise(3) w_{i,j} = \begin{cases} 1 + (0.3 + 0.7 \cdot U(0, 1)) \cdot \log_{10} \left( \frac{f^* - X_i(j)}{f^* - f_{\max}} + 1 \right), & \text{if } i \leq \frac{N}{2} \\ 1 - (0.3 + 0.7 \cdot U(0, 1)) \cdot \log_{10} \left( \frac{X_i(j) - f^*}{S} + 1 \right), & \text{otherwise} \end{cases} \tag{3} wi,j?=????1+(0.3+0.7?U(0,1))?log10?(f??fmax?f??Xi?(j)?+1),1?(0.3+0.7?U(0,1))?log10?(SXi?(j)?f??+1),?if?i≤2N?otherwise?(3)
其中 f?f^*f?是迄今為止找到的最佳適應度值,S=f??fmax?+εS = f^* - f_{\max} + \varepsilonS=f??fmax?+ε,其中 ε\varepsilonε是一個小值以避免除以零。這種權重自適應允許算法關注適應度較低的粒子,允許適應度較低的粒子探索新區域。適應性權重更新公式中的值0.3和0.7是基于廣泛的經驗調整確定的。它們使得縮放因子在 [0.3, 1.0] 范圍內可控變化,確保有效多樣性的同時自適應平衡探索和開發動態。
這種方法復制了云的自然行為,其中主要大氣力影響附近粒子。在數學術語中,這類似于進化算法中常見的適應度比例選擇方法。通過不斷修改權重,CDQ防止早期收斂并繼續有效探索,即使在后期階段。
2.4 位置更新
每個云的位置通過探索和開發行為的組合迭代更新,決定每個云的位置。
2.4.1 開發階段:局部細化
在此階段,云向迄今為止找到的最佳解(即全局最佳位置)移動。位置更新方程為:
Xi(t+1)(j)=X?(j)+0.8?vb(j)?(wi,j?XA(j)?XB(j))(4) X_i^{(t+1)}(j) = X^*(j) + 0.8 \cdot v_b(j) \cdot (w_{i,j} \cdot X_A(j) - X_B(j)) \tag{4} Xi(t+1)?(j)=X?(j)+0.8?vb?(j)?(wi,j??XA?(j)?XB?(j))(4)
其中 X?(j)X^*(j)X?(j)是迭代 ttt時的最佳已知解。vb(j)~U(?0.2a,0.2a)v_b(j) \sim U(-0.2a, 0.2a)vb?(j)~U(?0.2a,0.2a)表示受因子 a=atanh(?t/T+1)a = \text{atanh}(-t/T + 1)a=atanh(?t/T+1)影響的小隨機調整,控制開發程度。這種細化行為模擬了云在初始運動后如何逐漸細化其形狀,根據最佳附近解調整其位置。
2.4.2 探索階段:全局搜索
在探索階段,算法通過允許云在搜索空間內隨機移動來確保搜索的多樣性:
Xi(t+1)(j)=vc(j)?Xi(j)(5) X_i^{(t+1)}(j) = v_c(j) \cdot X_i(j) \tag{5} Xi(t+1)?(j)=vc?(j)?Xi?(j)(5)
其中 vc(j)~U(?0.2b,0.2b)v_c(j) \sim U(-0.2b, 0.2b)vc?(j)~U(?0.2b,0.2b)是另一個影響粒子運動的隨機因子,其參數隨時間遞減,使算法從探索轉向開發。
2.5 隨機擾動
一些云可能會隨機重新初始化,以防止過早收斂并引入算法后期階段的探索。這以概率 zzz發生,隨著算法的進展而減小:
Xi(j)=lb+(ub?lb)U(0,1),with?probability?z=0.002+0.003?(1?tT)(6) X_i(j) = lb + (ub - lb)U(0, 1), \quad \text{with probability } z = 0.002 + 0.003 \cdot \left( 1 - \frac{t}{T} \right) \tag{6} Xi?(j)=lb+(ub?lb)U(0,1),with?probability?z=0.002+0.003?(1?Tt?)(6)
這種隨機化模擬了大氣條件中不可預測的變化,可以改變漂移云的路徑,確保搜索即使在最后階段也能繼續。這種技術類似于遺傳算法中的模擬退火或變異算子。它模擬了突然的天氣變化,使漂移的云重新定向,確保即使在后期階段也能繼續探索。通過引入偶爾的大擾動,算法保持了有效逃離局部最優并細化全局解的能力。
2.6 收斂:全局最優
當最佳解的適應度值達到預定閾值 ε\varepsilonε或達到最大迭代次數 TTT時,算法收斂:
Stop?if?f?≤ε?or?t=T(7) \text{Stop if } f^* \leq \varepsilon \text{ or } t = T \tag{7} Stop?if?f?≤ε?or?t=T(7)
在最后階段,搜索更加本地化,因為云收斂于全局最優,類似于云形成穩定的靜止模式。CDQ算法的整體流程可以總結如下:
- 初始化:在搜索空間內隨機初始化 NNN個云。
- 權重自適應:根據兩個階段更新權重。
- 探索和開發:根據兩個階段更新位置。
- 隨機擾動:引入隨機重新初始化以避免過早收斂。
- 收斂檢查:當適應度達到迭代限制的閾值時停止。
動態權重調整、概率兩階段搜索方法和隨機重新初始化的整合有助于算法可靠地收斂于全局最優。非線性控制函數(如 atanh\text{atanh}atanh和 tanh?\tanhtanh)的引入促進了探索和開發階段之間的平穩過渡。這些函數使算法能夠在搜索強度上自適應地管理,而無需突然改變參數,從而實現穩定的收斂行為。云漂移優化(CDO)算法模擬了云的自然行為,通過探索和開發優化云。運動的數學建模,結合自適應行為(如權重調整和隨機擾動),使算法能夠避免局部最優并收斂于各種優化問題的全局解。圖1展示了云和目標之間的基本相互作用和校正行為。
圖1展示了云群中的基本相互作用和校正行為。它強調了三個關鍵力:吸引力:云在一定距離內相互吸引,鼓勵它們更接近。排斥力:當云太接近時,排斥力將它們推開,防止重疊并確保有效的搜索空間探索。目標區域:“這代表目標區域,這些力幫助引導云朝向這個最優區域。吸引力和排斥力之間的相互作用幫助引導云朝向這個最優區域。圖2展示了這些力如何平衡探索(搜索新區域)和開發(專注于有希望的區域),使群體能夠有效地找到最佳解決方案。圖2展示了使用該方程在2D空間中20個人工云的行為。在圖中,20個人工云被要求在10次迭代中找到全局最優解。
function [Best_fitness, Best_position, Convergence_curve] = CDO(N, Max_iter, lb, ub, dim, fobj)% InitializationBest_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 parametersz = 0.005; % Initial probability of random movementStoppingThreshold = 1e-300; % Lower stopping threshold for higher precisionwhile it <= Max_iter% Evaluate objective function for each solutionfor i = 1:NX(i, :) = min(max(X(i, :), lb), ub); % Keep solutions within boundsAllFitness(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 dynamicallyfor i = 1:Nfor j = 1:dimif i <= (N / 2)weight(SmellIndex(i), j) = 1 + (0.3 + 0.7 * rand()) * log10((bestFitness - SmellOrder(i)) / S + 1);elseweight(SmellIndex(i), j) = 1 - (0.3 + 0.7 * rand()) * log10((SmellOrder(i) - bestFitness) / S + 1);endendend% Update the best solution found so farif bestFitness < Best_fitnessBest_position = X(SmellIndex(1), :);Best_fitness = bestFitness;end% Stop early if precision target is reachedif Best_fitness < StoppingThresholddisp(['Converged at iteration ', num2str(it)]);break;end% Adjust control parameters dynamicallya = 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 positionsfor i = 1:Nif rand < z% Random reinitialization of some solutionsX(i, :) = min(max((ub - lb) .* rand(1, dim) + lb, lb), ub);elsep = 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:dimr = rand();A = randi([1, N]);B = randi([1, N]);if r < p% Exploitation phaseX(i, j) = Best_position(j) + 0.8 * vb(j) * (weight(i, j) * X(A, j) - X(B, j));else% Exploration phaseX(i, j) = vc(j) * X(i, j);end% Fine-tuning in the final iterationsif it > 0.9 * Max_iterX(i, j) = X(i, j) * (1 - 1e-12 * randn());endendendX(i, :) = min(max(X(i, :), lb), ub);end% Store convergence dataConvergence_curve(it) = Best_fitness;it = it + 1;end
end
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