gpt4 book ai didi

python - 离散事件排队模拟

转载 作者:行者123 更新时间:2023-11-28 22:08:00 25 4
gpt4 key购买 nike

我一直在尝试实现单个服务器队列。我改编了一些 pseudocode从 Norm Matloff 的 Simpy 教程到 Python,代码是 here .现在我正在努力寻找某种方法来计算工作/客户的平均等待时间。

此时我的大脑已经打结了!任何指针、想法、技巧或伪代码将不胜感激。

最佳答案

您应该知道每位顾客何时到达队列中。当他们到达服务器时,您应该将服务的客户数量加一,并累积他等待的时间。在模拟结束时,您只需将累积时间除以客户数量,即可得到工作/客户的平均等待时间。

核心问题是考虑不同的事件并根据这些事件更新统计数据。

您的模拟应该将模拟的所有结构初始化为合理的状态:

  • 将客户队列初始化为没有人
  • 将任何服务客户数初始化为 0
  • 将所有累积等待时间初始化为 0
  • 初始化当前系统时间为0

一旦所有系统都已初始化,您就可以创建一个客户到达的事件。这通常由一些给定的分布决定。生成系统事件将需要更新系统的统计信息。此时您可以选择生成所有工作/客户到达时间。每个客户的服务时间也是您将从给定分布中生成的东西。

然后您必须处理每个事件并相应地更新统计信息。例如,当第一个顾客到达时,队列从模拟开始到当前时间一直是空的。队列中顾客的平均数量可能是一个感兴趣的参数。您应该将 0 * 经过的秒数累积到一个累加器中。一旦客户到达空队列,您应该生成服务时间。下一位客户将在给定工作完成之前或之后到达。如果下一个客户在前一个客户得到服务之前到达,那么您将他添加到队列中(累积没有人等待的事实)。根据接下来发生的事件,您必须累积该时间间隔内发生的统计信息。服务器的空闲时间也是此类模拟中感兴趣的参数。

为了让事情更清楚,考虑一下有 18 个人在排队并且服务器已经为第一位客户完成了一项工作这一事实。第 18 位顾客到达与第一个人工作完成之间的时间间隔是要添加到累加器的加权平均值。例如有 18 人排队 4 秒。

服务器没有空闲,所以你应该从队列中取出一个条目并开始处理下一个作业。这项工作将花费一些时间,通常是从某些分布中定义的。如果下一位顾客在当前工作完成之前到达,则 17 人排队的事实将添加到您的加权值中。

同样在基础层面上,您正在积累系统中相关事件之间的统计数据:

while (current_time < total_simulation_time)
handle_next_event
generate_subsequent_events
accumulate_statistics
update_current_time
endwhile

Display "Average wait time: " accumulated_wait_time / number_of_customers_served

希望能有所帮助它似乎有点冗长。

关于python - 离散事件排队模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742776/

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