我正在编写的一个程序要求我模拟基因的突变。如果选择该基因的某个实例(J)进行突变,则它必须随机地成为可选基因的预定义子集之一。这些离散基因由0到K-1范围内的整数来标记,其中K等于等位基因总数。
所以基本上,我需要帮助写代码随机选择一个在0到K-1范围内的整数不等于J。任何帮助都是非常感谢的!
另一个编辑:感谢到目前为止的所有帮助,我提出了以下内容,这忽略了我不能等于J的要求。然而,我遇到的另一个问题是这个过程必须重复多次,并且由于每次使用相同的种子,i的值总是相同的。我应该如何确保种子值不会在每一代都保持不变?再一次,我们非常感谢您的帮助!
program randtest
implicit none
real*4 :: u(5)
integer :: i(5)
integer :: k = 4
integer, dimension (1) :: seed = (/2817/)
call random_seed(put=seed)
call random_number(u)
i = floor((k+1)*u)
print *, i
end program randtest
发布于 2014-05-01 21:10:55
对于集合{0,1,...,K-1},确实可以使用the other question答案中给出的方法。J (0<=J<=K-1)的复杂性可以通过在采样时拒绝J来处理。
然而,更好的方法是注意有K-2个有效整数:{0,1,...,J-1,J+1,...,K-1}。因此,使用该方法在{0,1,...,K-2}上生成一个整数,并将任何可能受拒绝J影响的内容上移。
call random_number(u)
i = FLOOR((K-1)*u) !this would be how I would define the range
if (i.ge.J) i=i+1
https://stackoverflow.com/questions/23407641
复制相似问题