美文网首页
Levy Flight 模型及Matlab实现

Levy Flight 模型及Matlab实现

作者: 吵吵人 | 来源:发表于2019-07-24 11:03 被阅读0次

    随机游走

    随机游走就是在任意维度的空间中,一个点随机地向任意方向前进任意长度的矩离,然后重复这个步骤。比如醉汉回家。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是分别计算出的一个随机长度,在进行移动。但是按照理论,应该是方向随机,长度按照公式计算。懒得改写了,使用时注意。
    每次运行的结果是不一样的。

    相关文章

      网友评论

          本文标题:Levy Flight 模型及Matlab实现

          本文链接:https://www.haomeiwen.com/subject/gbmtrctx.html