用Python实现Le'vy flight

Le'vy flight 是一种随机游走(random walk)算法,每一步的步长从一个heavy tail分布函数中采样,这里选择了柯西分布。

import math
import torch
import numpy as np


# def Cauchy_Distribution(x, gamma=1, x0=0):
#     factor1 = 1/(math.pi*gamma)
#     denominator = (x - x0)**2 + gamma**2
#     numerator = gamma**2
#     return factor1 * numerator / denominator

xs = [0]
ys = [0]
for i in range(100):
    c = np.random.standard_cauchy(2)
    nx = xs[-1] + c[0]
    ny = ys[-1] + c[1]
    xs.append(nx)
    ys.append(ny)

from visdom import Visdom
viz = Visdom()
viz.line(Y=torch.Tensor(ys), X=torch.Tensor(xs))
生成的图像如下。可见多数步长都比较小,但是大步长也占有相当的比例,这就是Le'vy flight的特点。

matlab:

function [z] = levy(n,m,beta)
% This function implements Levy's flight. 

% Input parameters
% n     -> Number of steps 
% m     -> Number of Dimensions 
% beta  -> Power law index  % Note: 1 < beta < 2
% Output 
% z     -> 'n' levy steps in 'm' dimension

    num = gamma(1+beta)*sin(pi*beta/2); % used for Numerator 
    den = gamma((1+beta)/2)*beta*2^((beta-1)/2); % used for Denominator
    sigma_u = (num/den)^(1/beta);% Standard deviation
    u = random('Normal',0,sigma_u^2,n,m); 
    v = random('Normal',0,1,n,m);
    z = u./(abs(v).^(1/beta));
    
end

参考:https://www.cnblogs.com/lyrichu/p/7209529.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值