gpt4 book ai didi

algorithm - 将一个数字分成三个有约束的桶

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:01 24 4
gpt4 key购买 nike

是否有一种好的算法可以将随机生成的数字分成三个桶,每个桶都有关于它们可能包含的总数的限制。

例如,假设我随机生成的数字是 1,000,我需要将它分成桶 a、b 和 c。

These ranges are only an example. See my edit for possible ranges.
Bucket a may only be between 10% - 70% of the number (100 - 700)
Bucket b may only be between 10% - 50% of the number (100 - 500)
Bucket c may only be between 5% - 25% of the number (50 - 250)
a + b + c must equal the randomly generated number

您希望分配的金额是完全随机的,这样除了所有三个桶都在其百分比平均值附近的机会外,桶 a 达到其最大值的机会与桶 c 的机会相同。

编辑:以下情况很可能始终为真:a + b + c 的低端 < 100%,a + b + c 的高端 > 100%。这些百分比仅用于指示 a、b 和 c 的可接受值。如果 a 是 10% 而 b 和 c 是它们的最大值(分别为 50% 和 25%),则必须重新分配数字,因为总数不等于 100%。这正是我试图通过找到一种方法一次性分配这些数字来避免的情况。

我想找到一种方法,一次性在它们的范围内随机选择这些数字。

最佳答案

这个问题等同于在 N 维对象中选择一个随机点(在您的示例中 N=3),该对象由方程定义(在您的示例中):

0.1  <= x  <= 0.7
0.1 <= y <= 0.5
0.05 <= z <= 0.25
x + y + z = 1 (*)

很明显,由于最后一个等式 (*),其中一个坐标是多余的,即选择 x 和 y 的值决定了 z。

消除 (*) 和其他方程之一给我们留下一个 (N-1) 维框,例如

0.1 <= x  <= 0.7
0.1 <= y <= 0.5

被不平等所削减

0.05 <= (1 - x - y) <= 0.25 (**)

源自 (*) 和 z 的方程。这基本上是穿过盒子的对角线条纹。

为了结果统一,我会重复采样(N-1)维的盒子,并接受第一个满足(**)的采样点。单程解决方案最终可能会出现有偏分布。

关于algorithm - 将一个数字分成三个有约束的桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8139233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com