使用一些已知概率,设置变量的值

时间:2014-06-05 08:28:14

标签: java eclipse algorithm social-networking probability

编辑:如果有人对这个问题进行了投票,请发表评论解释原因 我正在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节)。

1 个答案:

答案 0 :(得分:0)

我想你可能会过度思考它。

  1. 在节目开始时,在0到1之间随机选择pi,因为pi是概率。

     Random random = new Random();
     double pi = random.nextDouble(); // Choose a number between 0 and 1.
    
  2. 概率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;