模拟投币机的现实统计分布

时间:2019-04-25 14:18:10

标签: c statistics simulation poisson

说我有3种不同的硬币类型。例如:10p,50p和1£。 我知道一天中每种类型的平均插入硬币数量:

  • 10p:上午10点至下午4点之间为50点,其余时间为30点
  • 50p:上午11点至晚上7点之间为30点,其余时间为10点
  • 1英镑:下午1点至下午3点之间为10,其余时间为2点

在我的代码中,我有一个每秒调用一次的函数:

typedef enum
{
    none,
    p10,
    p50,
    P1
} CoinType;

CoinType toosCoin(time_t now) // called every second
{
    CoinType coin = none;
    // do some math

    return coin;
}

我想模拟上述参数描述的分布,但是我不确定哪种方法都不适合使用最佳方法。

然后,代码将根据所选硬币(如果有)激活一条物理I / O线,以触发电子板上的输入。这是对硬件和固件的“压力测试”。需要这些发行版才能为固件提供逼真的数据。

我想我需要类似泊松分布的东西,但我不了解如何将P.参数绑定到上述约束。

1 个答案:

答案 0 :(得分:1)

您似乎想使用一组non-homogeneous Poisson processes,这是一种表示费率随时间变化的奇特方法。泊松发生之间的时间量具有与泊松率相同的指数分布。由于您使用一秒的离散时间步长对此建模,因此您可以使用geometric distribution很好地近似指数。您只需将速率转换为秒,然后转换为给定秒数内发生的概率。

我将以10便士硬币为例,其他情况也类似。有两种不同的费率:从上午10点到下午4点为50个硬币/ 6小时,其余时间为30个硬币/ 18小时。由于一小时有3600秒,因此它们分别转换为每秒5/2160和1/2160的速率。这些反过来又可以看作是每秒获得硬币的概率。请注意,这些概率是基于泊松假设的近似值,该假设是您在足够短的时间间隔内不会出现两次或多次出现。我怀疑您会认为,鉴于投币的机制,这是一秒钟的合理假设。

如果您购买了该产品,那么生活将会很轻松。调用函数时,生成一个介于0.0和1.0之间的统一浮点随机数。如果它小于或等于与当前时间相关的概率,则您得到10p硬币,否则就没有。 (如果您更喜欢使用整数数学,则生成一个1到2160之间均匀分布的int,并且如果它在上午10点到下午4点之间小于或等于5,或者在一天的其余时间内小于等于1,则您会得到一个硬币。请确保使用模2160获取随机数,以免引入modulo bias。)

起泡,冲洗并重复其他硬币类型。概率将不同,但以相同的方式计算。只需确保对不同的硬币类型使用独立的/独立的随机数即可。