2015-08-19 7 views
0

Я хочу построить имитационную модель производственной сети с Simpy включает в себя следующие функции в отношении времени:Linking Simpy время моделирования в Python календарь на неделю день конкретные действия

  • Растения работают с понедельника по пятницу (с двумя сменами по 8 часов)
  • Тяжелые грузовики ездят на все дни недели, кроме воскресенья
  • Легкие грузовики привод на все дни недели, включая воскресенье

Для для этой цели я хочу построить BroadcastPipe as given in the docs в сочетании с таймаутами, чтобы объекты ожидали в течение дней, когда они не работают (для установок требуется дополнительная логика для моделирования сдвигов). Этот BroadcastPipe будет просто считать дни (в течение 24 * 60 минут на каждый день), а затем скажет «Понедельник, все». Затем объекты (заводские, легкие и тяжелые грузовики) будут обрабатывать эту информацию индивидуально и действовать соответствующим образом.

Теперь, интересно, есть ли элегантный способ связать время моделирования с обычными объектами календаря Python, чтобы легко получить доступ к дням недели. Это было бы полезно для ясности и усовершенствований, таких как праздничные дни и различные стартовые дни. У вас есть советы, как это сделать? (или общие рекомендации о том, как лучше моделировать?). Заранее спасибо!

ответ

1

Я обычно установить дату начала и определить его быть равным времени моделирования (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()) 
+0

Именно то, что мне было нужно. +1 для указания стрелки – mondano

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... 

 Смежные вопросы

  • Нет связанных вопросов^_^