2

我想用 SimPy 构建一个生产网络的仿真模型,包括以下关于时间的特性:

  • 工厂周一至周五工作(两班 8 小时)
  • 除周日外,重型卡车全天行驶
  • 轻型卡车在一周中的所有日子都在行驶,包括周日

为此,我想构造一个文档中给出的 BroadcastPipe 并结合超时使对象在它们不工作的日子里等待(对于植物来说,需要额外的逻辑来模拟班次)。这个 BroadcastPipe 只会计算天数(假设每天 24*60 分钟)然后说"It's Monday, everyone"。然后,对象(工厂、轻型和重型卡车)将单独处理这些信息并采取相应的行动。

现在,我想知道是否有一种优雅的方法可以将模拟时间链接到常规 Python Calender 对象,以便轻松访问一周中的几天。这对于银行假期和不同的开始日期等清晰度和增强功能很有用。你有什么建议如何做到这一点?(或关于如何更好地建模的一般建议?)。提前致谢!

4

2 回答 2

4

我通常设置一个开始日期,并定义为与仿真时间相等(Environment.now) 0。由于 SimPy 的仿真时间没有固有的单位,我也将其定义为以秒为单位。使用箭头,我可以从当前模拟时间轻松计算实际日期和时间:

import arrow
import simpy

start = arrow.get('2015-01-01T00:00:00')
env = simpy.Environment()

# do some simulation ...

current_date = start.replace(seconds=env.now)
print('Curret weekday:', current_date.weekday())
于 2015-08-19T20:04:02.053 回答
0

您可以使用datetime 模块并创建一个day_of_week对象,但您仍然需要计算经过的时间:

import datetime
# yyyy = four digit year integer
# mm = 1- or 2-digit month integer
# dd = 1- or 2-digit day integer

day_of_week = datetime.datetime(yyyy, mm, dd).strftime('%a')

if day_of_week == 'Mon':
    # Do Monday tasks...
elif day_of_week == 'Tue':
    # Tuesday...
于 2015-08-19T13:32:53.833 回答