随机游走
随机游走就是在任意维度的空间中,一个点随机地向任意方向前进任意长度的矩离,然后重复这个步骤。比如醉汉回家。levy flight(莱维飞行)是随机游走的一种。研究表明很多的生物活动的轨迹,甚至是人都是符合levy flight的。
LevyFlight
前提条件
- 无限的均方位移MSD
- 符合幂律分布(重尾)
其中的幂律分布涉及到一个重尾分布的概念。以指数分布为分界线,我们把时下降速度更快的称为 Thin-tailed distribution ,如正态分布。幂律分布也属于重尾分布。适用于对那些离峰值较远的稀有事件也会有相当的概率发生的情况。重尾分布作为一个大的类别,还包含三个重要的子类别,分别是肥尾分布(Fat-tailed distribution),长尾分布(Long-tailed distribution)和次指数分布(Subexponential distribution)。
当一个现象呈现出幂律分布的时候,考虑可能符合Levy Flight分布。
参考:https://blog.csdn.net/dymodi/article/details/54231728
levy flight的具体介绍可参考:Brockmann D , Hufnagel L , Geisel T . The scaling laws of human travel[J]. Nature, 2006, 439(7075):462-465.下图来自与该文章的附件部分。
另外,也可参考Yang X S. Nature-Inspired Metaheuristic Algorithms[M]. 2008.
Matlab实现一个简单的Levy Flight
clc;
clear;
x = [0,0];
y = [0,0];
beta = 3/2;
alpha_u = (gamma(1+beta)*sin(pi*beta/2)/(gamma(((1+beta)/2)*beta*2^((beta-1)/2))))^(1/beta);
alpha_v = 1;
for i=1:1000
u=normrnd(0,alpha_u,1);
v=normrnd(0,alpha_v,1);
s = u/(abs(v))^(1/beta);
x(:,1) = x(:,2);
x(:,2) = x(:,1)+1*s;
u=normrnd(0,alpha_u,1);
v=normrnd(0,alpha_v,1);
s = u/(abs(v))^(1/beta);
y(:,1) = y(:,2);
y(:,2) = y(:,1)+1*s;
plot(x,y);
hold on;
end
axis square;
以第二篇文章的理论为基础,实现代码如上。不足之处在于X,Y是分别计算出的一个随机长度,在进行移动。但是按照理论,应该是方向随机,长度按照公式计算。懒得改写了,使用时注意。
每次运行的结果是不一样的。