Python: 如何创建具有给定分布的距离网络?

Python: how to create a distance network with a given distribution?

我有 N 个代理要放置在一个网格 n x n 中,遵循(截断的 Levy)分布

px = (r + r0)**(-beta)*exp(-r/k)

每个代理有两个最喜欢的单元格:homework 并且 px 是每个代理从 homework 移动的概率距离 r.

def returnLevy(r, beta):
    r0 = 100
    k = 1500
    px = (r + r0)**(-beta)*exp(-r/k)
    return px

我已经计算了网格中所有单元格之间的距离,所以

allDistances.head(5):

    distances   cell_a  cell_b  
0   1.322959      0       1 
1   0.717737      0       2 
2   0.454170      0       3 
3   0.321495      0       4 
4   0.454248      0       5 

我想知道是否有一种方法可以按照上述分布为每个代理随机分配距 homework 的距离 r。最后我想要一个数据框:

agentsCells 

    distance    home    work    
0   1.322959     320    1089    
1   0.717737      4      765    
2   0.454170     2100    388    

您可以使用 scipy 定义您自己的自定义 pdf 并使用它来计算您的概率密度的有用指标

import scipy.stats as st

class LevyPDF(st.rv_continuous):
    def _pdf(self,r):
        r0 = 100
        k = 1500
        return (r + r0)**(-beta)*exp(-r/k) #Normalized over its range [minValue,maxValue]

my_cv = LevyPDF(a=minValue, b=maxValue, name='LevyPDF')

要随机抽取值,您必须首先计算累积分布函数 (cdf),然后将其取反得到 icdf。现在可以使用它来绘制 pdf 之后的随机值(您可以找到更多详细信息 )。 如果您已经计算出 cdf,您可以使用 my_cv.cdf().

的数值结果来检查您的结果