如何生成随机数直到差值之和为 3000?

How to generate random numbers until sum of difference is 3000?

我需要生成随机数,直到满足条件(每个随机数的差之和为3000。)。

并且已经从截断的正态分布中生成了随机数。

我已经尝试使用 while 循环 while(1) 和 if ,但它没有正常工作。

如何根据条件生成新的随机数序列?

truncnorm_rn <- rtruncnorm(1000,0,30,0,1)

a <- 0
b <- 0
c <- 0 # sum of diffrences between truncnorm random number 
d <- NULL # New sequnce with condition

while(1){
         a <- truncnorm_rn[1]
         b <- truncnorm_rn[2]
         c <- sum(a - b)
         if(c > 3000) break
}

您要求的是以下内容。这将生成一个 new 大小为 1,000 的截断正态序列,直到该序列中所有数字的绝对差异大于 3,000。

library(truncnorm)

abs_diff <- 0
i <- 0

while(abs_diff <= 3000) {
  
  i <- i + 1
  series <- rtruncnorm(n = 1000, a = 0, b = 30, mean = 0, sd = 1)
  abs_diff <- sum(abs(diff(series)))
  
}

# the iteration where the sum of absolute differences is > 3,000
i
# the series of numbers that satisfied the condition
series

但是,我不知道您的条件是否会满足截断法线的那些参数(至少很快)。我 运行 这进行了 125k 次迭代并且不满足条件。如果您更改 meansd(请参阅下面的示例代码),您将在更合理的时间内找到满足条件的系列。

abs_diff <- 0
i <- 0

while(abs_diff <= 3000) {
  
  i <- i + 1
  series <- rtruncnorm(n = 1000, a = 0, b = 30, mean = 5, sd = 2.6)
  abs_diff <- sum(abs(diff(series)))
  
}