模拟硬币机的真实统计分布

问题描述 投票:-1回答:1

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

  • 10p:50在上午10点到下午4点之间,其余时间为30点
  • 50p:30在上午11点到晚上7点之间,其余时间为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.参数绑定到上面的约束。

c statistics simulation poisson
1个回答
1
投票

看起来你想要使用一套non-homogeneous Poisson processes,这是一种说明费率随时间变化的奇特方式。泊松出现之间的时间量具有指数分布,其速率与泊松相同。由于您使用一秒的离散时间步长对其进行建模,因此您可以使用geometric distribution获得指数的非常好的近似值。您只需将速率转换为秒,然后转换为给定秒内发生的概率。

我将使用10p硬币作为示例,其他人也是如此。有两个不同的费率:50个硬币/从上午10点到下午4点6小时,30个硬币/ 18小时,其余时间。由于一小时有3600秒,因此它们分别转换为每秒5/2160和1/2160的速率。反过来,这些可以被视为获得硬币的每秒概率。请注意,这些概率是基于泊松假设的近似值,即在足够小的时间间隔内永远不会出现两次或更多次出现。我怀疑你可以认为,考虑到硬币进给的机制,这是一秒钟内的合理假设。

如果你买它,那么生活很容易。调用函数时,生成介于0.0和1.0之间的统一浮点随机数。如果它小于或等于与当前时间相关的概率,你得到一个10便士硬币,否则你没有。 (如果你更喜欢整数数学,那么生成一个在1到2160之间均匀分布的int,如果它在上午10点到下午4点之间小于或等于5,或者在一天的剩余时间内为1,那么你得到一枚硬币。只需要确保不使用modulo 2160来获取随机数,以免你介绍modulo bias。)

为其他硬币类型进行泡沫,冲洗和重复。概率将不同,但以相同的方式计算。只需确保为不同的硬币类型使用单独/独立的随机数。

© www.soinside.com 2019 - 2024. All rights reserved.