将Simpy模拟时间链接到Python日历以进行为期一周的特定操作

时间:2015-08-19 13:22:44

标签: python calendar weekday simpy

我想使用SimPy构建生产网络的仿真模型,其中包含以下有关时间的特性:

  • 植物从周一到周五工作(两班八小时)
  • 除周日外,重型卡车在一周中的所有日子开车
  • 轻型卡车在一周的所有日子开车,包括星期天

为此,我想构建一个BroadcastPipe as given in the docs结合超时,使对象在不工作的几天内等待(对于工厂来说,需要额外的逻辑来模拟轮班)。这个BroadcastPipe只计算天数(假设每天24 * 60分钟),然后说“这是星期一,每个人”。然后,物体(工厂,轻型卡车和重型卡车)将单独处理此信息并采取相应行动。

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

2 个答案:

答案 0 :(得分:2)

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

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())

答案 1 :(得分:0)

您可以使用datetime module并创建一个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...