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 楼答案
我想你可能想得太多了
在程序开始时,在0和1之间随机选择
pi
,因为pi
是一种概率概率
pi
集x=q1
。在0和1之间选择另一个随机数。如果该数字小于pi
,则设置x = q1
。否则,设置x = q
。这是正确的,因为在0和1之间均匀选择的随机数小于pi
的概率正好等于pi