我想使用SimPy构建生产网络的仿真模型,其中包含以下有关时间的特性:
为此,我想构建一个BroadcastPipe as given in the docs结合超时,使对象在不工作的几天内等待(对于工厂来说,需要额外的逻辑来模拟轮班)。这个BroadcastPipe只计算天数(假设每天24 * 60分钟),然后说“这是星期一,每个人”。然后,物体(工厂,轻型卡车和重型卡车)将单独处理此信息并采取相应行动。
现在,我想知道是否有一种优雅的方法可以将模拟时间链接到常规的Python Calender对象,以便轻松访问一周中的几天。这对于银行假期和不同开始日期的清晰度和增强功能非常有用。你有任何建议如何做到这一点? (或关于如何更好地建模的一般建议?)。提前谢谢!
答案 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...