编辑:如果有人对这个问题进行了投票,请发表评论解释原因
我正在Java中实现一种叫做Biased Voter Model的特定算法,它模拟了社交网络用户的观点动态。
这里有一个特殊的步骤要求我:
With probability pi , set x = q1 ; else with probability pi , set x = q2,and so on.
If the above step did not set x, then:
– With probability αi , set x = q0 ; and
– With probability 1 − αi set x = q, where
q ∈ [q0 , q ∗ ] is chosen uniformly at random.
其中,pi和αi是随机选择的,并且始终是恒定的。 q1,q2...qn
是已知值。 'x'是我需要设置的。并且q *是q(i),它与q0的距离最近(最接近)。[注意:q0不是数组的一部分,也是已知的]
但是我不确定是什么短语“概率pi设置x = q1”?
我试过这样实现:
pi=(double)Math.round(Math.random()*10)/10;//sets a random number approximated to one decimal place
while(index<n){
double j=(double)Math.round(Math.random()*10)/10;
if(j>pi){
index++;
}
else{
x=q[index];
break;
}
}
然而,这只是第1部分。 q[]
包含q1,q2...qn
,对于每个索引,我生成一个随机数j
,如果它大于pi
,我会忽略该索引,然后转到下一个索引。
对于第二部分,我用αi检查j
。(以下只是一个伪代码,我没有在这里写完所有内容)
double j=(double)Math.round(Math.random()*10)/10;
if(j<αi)
{
temp1=q0;
}
double j=(double)Math.round(Math.random()*10)/10;
//randomly generate 'k' which takes on a value of either 0 or 1
if(j<(1-αi){
if(k==0)
temp2=q0;
else if(k==1)
temp2=q*;
}
if(temp1==temp2)
x=q0;
else
x=q*
我知道这个实现并不完全正确。我逻辑上哪里错了?什么是短语“概率pi设置x = q1”实际上是什么意思?
如需进一步参考,请查看this(第7页第5节)。
答案 0 :(得分:0)
我想你可能会过度思考它。
在节目开始时,在0到1之间随机选择pi
,因为pi
是概率。
Random random = new Random();
double pi = random.nextDouble(); // Choose a number between 0 and 1.
概率pi
设置x=q1
。选择0到1之间的另一个随机数。如果该数字小于pi
,则设置x = q1
。否则,请设置x = q
。这是正确的,因为在0和1之间均匀选择的随机数小于pi
的概率恰好等于pi
。
double t = random.nextDouble();
if (t < pi) x = q1;
else x = q;