C 模拟投币机的真实统计分布

C 模拟投币机的真实统计分布,c,statistics,simulation,poisson,C,Statistics,Simulation,Poisson,假设我有3种不同的硬币类型。例如:10便士、50便士和1英镑。 我知道每天每种硬币的平均插入数量: 10点:上午10点到下午4点之间50点,其余时间30点 50点30分,上午11点到晚上7点,其余时间10点 1:10在下午1点到3点之间,2在一天的其余时间 在我的代码中,我有一个每秒调用一次的函数: typedef enum { none, p10, p50, P1 } CoinType; CoinType toosCoin(time_t now) // c

假设我有3种不同的硬币类型。例如:10便士、50便士和1英镑。 我知道每天每种硬币的平均插入数量:

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

看起来你想使用一组,这是一种奇特的方式来表示速率随时间而变化。泊松发生之间的时间量具有与泊松发生率相同的指数分布。由于您使用一秒钟的离散时间步长对此进行建模,因此可以使用。您只需要将速率转换为秒,然后再转换为给定秒内发生的概率

我将以10便士硬币为例,其他硬币也会这样做。有两种不同的费率:上午10点到下午4点,每6小时50枚硬币,其余时间每18小时30枚硬币。因为一个小时有3600秒,所以它们分别转换为每秒5/2160和1/2160的速率。反过来,这些可以被视为每秒获得一枚硬币的概率。请注意,这些概率是基于泊松假设的近似值,即在足够小的时间间隔内永远不会出现两次或两次以上的事件。我想你可以说,考虑到投币机制,这是一个合理的假设

如果你相信这一点,那么生活就容易了。调用函数时,生成一个介于0.0和1.0之间的统一浮点随机数。如果它小于或等于与当前时间相关联的概率,你得到一枚10便士硬币,否则你没有。(如果您更喜欢整数数学,则生成一个均匀分布在1和2160之间的整数,如果在上午10点到下午4点之间小于或等于5,或者在一天的其余时间小于或等于1,则您将得到一枚硬币。请确保不要使用模2160来获得随机数,以免引入。)


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

没有足够的描述来完成正确的工作。这是课堂作业吗?应该还有更多。这不是课堂作业!!!我在问题中说。我开发了一个硬件板,我需要触发它的输入,以现实的方式对它进行压力测试。如果缺少信息,告诉我我必须添加的内容,而不是简单的否决-这不太可能改善问题。我没有投票。是的,但问题不在于这样一个场景的有效性——它只与如何编码有关。你得到了我所需要的。谢谢你非常清楚的解释。根据你的提示,我还可以在一天中甚至在不同的日子里添加几个概率不同的“窗口”。听起来不错。工作日、周末、发薪日和大型体育赛事都会有所不同。