我想对我公司使用的软件编写时间进行单元测试。为了做到这一点,我想创建一组添加到定义值的随机数。
我希望能够控制参数:
例如,在250天内,一个人工作了2000个小时。 2000小时必须在250天内随机分发。每天花费的最长时间为9小时,最小金额为.25
我通过this问题解决了问题并找到了方法
diff(c(0, sort(runif(249)), 2000))
这导致1个大数字,249个小数字。这就是为什么我能够为生成的数字设置最小值和最大值。但我不知道从哪里开始。
答案 0 :(得分:0)
在三个约束中遇到任何两个问题你都没有问题,但这三个都可能是个问题。正如您所注意到的,生成添加到总和的N个随机数的标准方法是生成0..sum范围内的N-1个随机数,对它们进行排序,并获取差异。这基本上将你的和作为一个数字线,选择N-1个随机点,你的数字是这些点之间的分段。
但这可能与数字本身的约束不兼容。例如,如果您希望10个数字添加到1000,但每个数字必须小于100,该怎么办?那不行。即使您具有数学上可能的范围,强制遵守所有约束也可能意味着牺牲均匀性或其他所需的属性。
我怀疑唯一的方法是保持和约束,N约束,做标准的N-1,排序和差异,但限制单个randoms的分辨率到你想要的最小值(换句话说,而不是0..100,可能产生0..10倍10)。
或者,不是沿着线生成N-1个均匀随机点,而是在类似的低分辨率约束内沿线生成点的随机样本。