Random 如何生成范围内的随机整数
我正在写的一个程序要求我模拟基因的突变。如果基因的某个实例(J)被选择进行突变,它必须随机成为备选基因的预定义子集之一。这些离散基因由0到K-1范围内的整数标记,其中K等于等位基因总数 因此,基本上,我需要帮助编写代码,随机选择一个0到K-1范围内不等于J的整数。非常感谢您的帮助Random 如何生成范围内的随机整数,random,fortran,fortran90,fortran95,Random,Fortran,Fortran90,Fortran95,我正在写的一个程序要求我模拟基因的突变。如果基因的某个实例(J)被选择进行突变,它必须随机成为备选基因的预定义子集之一。这些离散基因由0到K-1范围内的整数标记,其中K等于等位基因总数 因此,基本上,我需要帮助编写代码,随机选择一个0到K-1范围内不等于J的整数。非常感谢您的帮助 program randtest implicit none real*4 :: u(5) integer :: i(5) integer :: k = 4 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
另一个编辑:感谢到目前为止的所有帮助,我提出了以下内容,它忽略了我不能等于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
对于集合{0,1,…,K-1},确实可以使用答案中给出的方法。复杂的是,J(0你可能会在这里找到你的答案:根据链接,用[0,K-2]替换[0,5](假设J在该区间内)。谢谢,到目前为止,我已经得出了以下结论。程序randtest implicit none real*4::u(5)integer::I(5)integer::K=4 integer,维度(1)::seed=(/2817/)call random\u seed(put=seed)调用随机数i=floor((k+1)*u)print*,i结束程序测试