有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

编辑:如果有人否决这个问题,请留下评论解释原因
我正在用Java实现一个特定的算法,称为有偏见的投票人模型,该模型模拟社交网络用户的意见动态
这里有一个特殊的步骤需要我:

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*也是距离q0最小的q(i)。[注意: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;
        }
         }

然而,这只是第一部分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) 个答案

  1. # 1 楼答案

    我想你可能想得太多了

    1. 在程序开始时,在0和1之间随机选择pi,因为pi是一种概率

       Random random = new Random();
       double pi = random.nextDouble(); // Choose a number between 0 and 1.
      
    2. 概率pix=q1。在0和1之间选择另一个随机数。如果该数字小于pi,则设置x = q1。否则,设置x = q。这是正确的,因为在0和1之间均匀选择的随机数小于pi的概率正好等于pi

      double t = random.nextDouble();
      if (t < pi) x = q1;
      else x = q;