如何从excel中加起来固定总和的不同时间间隔生成随机数?

时间:2017-10-20 18:38:47

标签: excel algorithm random sum intervals

我需要从13个不同的时间间隔生成13个数字,这些数字将加起来为1360.在下面的图表中," index"表示13个不同数字的索引。平均值表示间隔的平均值(平均值)。范围将是平均值的正负15%,如下所示。 我更倾向于根据N的正态分布生成随机数(平均值,平均值的7.5%)。我将其取回。没有正常分布。请使用+ - 15%作为间隔的硬限制。

如果有人能想出如何在excel中做到这一点会很棒。算法也将受到赞赏。

total
equal : (a: Nat) -> (b: Nat) -> Maybe ((a == b) = True)
equal Z Z = Just Refl
equal (S l) (S r) = equal l r
equal _ _ = Nothing

3 个答案:

答案 0 :(得分:0)

获取这样的随机数

num = Int ((300 - 200 + 1) * Rnd + 200) //between 200 and 300

Click here for more information

并且随机数需要是总和减去你已经得到的总和,最后一个将是剩下的。

例如:(如果我们有4个数字总计为100)

A is a random number between 0 to 100 //lets say 42
then B is a random number between 0 to (100-42) => 0 to 78 //lets say 18
then C is a random number between 0 to (100-42-18) => 0 to 40 //lets say 25
then, in the end D is 100-42-18-25 => D is 15

*100-42-18-25 is the same as 100-Sum(A,B,C) 

答案 1 :(得分:0)

这是我的示例基于低和高生成随机数。

column F中的公式只是RANDBETWEEN

=RANDBETWEEN($D2,$E2)

然后,您可以使用以下column G的公式得到结果总是等于1360:

=F2/SUM($F$2:$F$14)*1360

所以cell G15总是1360,这是所有这13个区间的总和。

答案 2 :(得分:0)

我会通过增加平均值对表格进行排序:

enter image description here

并使用列作为辅助值(上面的列H)。

我们的想法是在进入下一行时保持目前与最终目标完美目标的偏差。完美意味着每个随机值都与该行的平均值一致。如果值比平均值小2,则该2将出现在下一行的H列中。为该下一行生成的随机数将不针对给定的平均值,但是比平均值小2。随机数的范围将适当减少,以便永远不会超过低值/高值。

通过首先对行进行排序,我们可以确定此校正均值将始终位于下一行的低/高范围内,因此始终可以在那里生成可接受的随机数。

最终值将以不同方式计算:它将是实现目标总和所需的余数。出于与上述相同的原因,该值保证在低/高范围内。

使用的公式如下:

   |                       F                          |              H
 --+--------------------------------------------------+------------------------------
 2 | =RANDBETWEEN(D2, E2)                             |
 3 | =RANDBETWEEN(B3+H3-C3+ABS(H3), B3+H3+C3-ABS(H3)) | =SUM($B$2:$B2)-SUM($F$2:$F2)
 4 |      (copy above formula)                        | (copy above formula)
...|              ...                                 |         ...
13 |      (copy above formula)                        | (copy above formula)
14 | =SUM($B$2:$B14)-SUM($F$2:$F13)                   |

理论上,行首先不需要需要,但是公式不能像上面那样被复制,但必须引用正确的行。这会让它变得非常复杂。

如果绝对有必要按索引列(A,B,C ...)的顺序显示行,则使用另一张表格执行上述操作。然后在主工作表中使用另一个工作表中的VLOOKUP将值读入F列。所以在F2你会有:

=VLOOKUP(A2, OtherSheet!$A$2:$F$14, 6, 0)