Lévy 飛行是基于 Lévy 分布的隨機搜索過程. Lévy 飛行是一種隨機行走, 其中步長服從 Lévy 分布. 它通過模擬自然界中動物在尋找食物或遷徙過程中, 采取的長距離跳躍和短距離滑行相結合的移動模式. 其核心特點是步長的概率分布為重尾分布, 即存在相對較高的概率出現大跨步, 這使得動物能夠在廣闊的范圍內進行搜索.
與傳統的隨機游走策略相比, Lévy 飛行策略具有以下優(yōu)勢:
* 提高搜索效率: 通過長距離跳躍, Lévy 飛行策略能夠快速擴大搜索范圍, 提高搜索效率;
* 跳出局部最優(yōu)解: Lévy 飛行策略在搜索過程中偶爾會出現大跨步, 有助于跳出局部最優(yōu)解, 尋找全局最優(yōu)解;
* 適應性強: Lévy 飛行策略適用于各種復雜環(huán)境, 能夠有效應對路徑規(guī)劃中的不確定性.
因此, Lévy 飛行算法作為一種高效的優(yōu)化路徑規(guī)劃方法, 目前被廣泛應用于智能優(yōu)化算法中, 如麻雀搜索算法、鯨魚優(yōu)化算法、粒子群優(yōu)化算法、蜣螂優(yōu)化算法等等.
Mantegna 算法是 Mantegna 于 1994 年提出的用于模擬對稱 Lévy 穩(wěn)定過程. 根據 Mantegna 算法, 可以通過生成兩個正態(tài)分布的數據計算得到服從 Lévy 分布的數據. 采用北太天元數值計算通用軟件來實現該算法的代碼如下:
function [s] = levyrnd(beta, m, n) %LEVYRND - Mantegna 算法生成對稱 Lévy 穩(wěn)定分布隨機數組. % % 用法: % levyrng(beta); - 生成單個服從參數為 beta 的 Lévy 分布數據; % levyrng(beta, m); - 生成 m x m 維服從參數為 beta 的 Lévy 分布矩陣; % levyrng(beta, m, n); - 生成 m x n 維服從參數為 beta 的 Lévy 分布矩陣. % % 示例: % >> rng(1234); % >> levyrnd(1.8) % 0.5299 % >> levyrnd(0.5, 2) % 0.7074 -0.0853 % -2.1705 -219.2879 % >> levyrnd(1.1, 2, 3) % -0.6688 0.2140 -1.8900 % -3.4959 0.2340 -24.1111 % narginchk(1, 3); if nargin == 1 m = 1; n = 1; elseif nargin == 2 n = m; end % 計算 u ~ N(0, sigma^2) 的方差 num = gamma(1 + beta) * sin(pi * beta / 2); den = gamma((1 + beta)/2) * beta * 2^((beta - 1)/2); sigma = (num / den)^(1/beta); % 生成隨機變量 u 和 v, v ~ N(0, 1). u = normrnd(0, sigma, m, n); v = normrnd(0, 1, m, n); % 生成 Lévy 分布數據 s = u ./ abs(v).^(1/beta); end
利用 Mantegna 算法, 可以生成一系列的服從 Lévy 分布的隨機步長, 模擬 Lévy 飛行. 值得注意的是, 隨機游走是在任意維度空間中, 一個點隨機地向任意方向前進任意長度的距離, 然后不斷的重復.
我們模擬從原點出發(fā), 隨機向任意方向前進步長為 $s$ 的 Lévy 飛行. 模擬過程如下:
clear;
clc;
% Lévy 分布參數
beta = 1.5;
% Lévy 飛行步數
n = 1000;
% 生成隨機方向
angles = 2 * pi * rand(n, 1);
% 初始化數據
x = zeros(n + 1, 1);
y = zeros(n + 1, 1);
% 生成 Lévy 步長
s = levyrnd(beta, n, 1);
% 循環(huán)游走
for i = 1:n
x(i + 1) = x(i) + cos(angles(i)) * s(i);
y(i + 1) = y(i) + sin(angles(i)) * s(i);
end
% 繪制 Lévy 飛行隨機游走
plot(x, y);
title("Levy 飛行策略");
xlabel("x");
ylabel("y");得到的結果如圖所示:

