我正在努力实现组合方法算法,该算法说明如下:
作文方法 生成rando变量的另一种方法是组合方法。假设X具有CDF(累积分布函数)Fx,我们希望模拟X的值。
我们可以写
其中Fj也是CDF,pj> 0表示所有j和Sum(Pj)= 1
合成算法:
1. Generate I distributed on the non-negative integers so that:
P(I=j) = Pj
2. If I = j, then simulate Yj from Fj
3. Set X= Yj
这是我在python中的实现,我不确定的部分是当我设置
时Yj = F[j](random.random())
因为我认为我应该使用F [j]的倒数。我想澄清一下这条线是否正确。
以下是算法的其余部分:
def composition_method(F,p):
X =[None]*len(p) #Inicializando list of size p
cont=True
while(cont):
for j in range (0,len(p)):
#1.Generate I, non negative integer sych that P(I=j)= Pj
I = inverse_transform(p)
#2. if I=j, simulate Yj from Fj
if(I=j):
Yj = F[j](random.random())
#3. Sets X= Yj
X[j]=Yj
cont = False
#4. Verififying x does not have None elements
for(elm in X):
if(elm==None):
cont =True
任何帮助都将受到高度赞赏:)
答案 0 :(得分:1)
F j 是为两个属性选择的累积分布函数。 1)在适当的权重下,它们组成你感兴趣的F x ,2)它们本身应该很容易生成。最常见的方法是使用inversion。另一种可能性是convolution。细节取决于F j 的具体集合。
如果你不熟悉反转或卷积,你真的不应该跳进作文。