2016-11-03 2 views
0

Я хочу имитировать прибытие клиентов в определенные периоды времени (не генерируемые в соответствии со статистическим распределением). Время прибытия определяется в файле CSV, который я загружен в панд dataframe df:Как имитировать прибытие клиентов по расписанию

df.head() 

arrival_time start_service end_service waiting_time service_duration 
09:00:20  09:01:00  09:06:00  0.40  5.00 
09:01:00  09:02:20  09:04:00  1.20  1.40 

Это мой текущий код, но я не знаю, как заставить лиц (клиентов), чтобы прибыть в соответствии с графиком определенном в df, например на 09:00:20, затем на 09:01:00 и т. д. Я предполагаю, что также должен установить начальное время моделирования в Environment, но как я могу это сделать? (Мне не нужно в режиме реального времени моделирования):

import random 
import simpy 
import pandas as pd 

def source(env, df, counter): 
    for i, row in df.iterrows(): 
     c = client(env, 'Client%02d' % i, counter, row, time_in_bank=row["service_duration"]) 
     env.process(c) 

def client(env, name, counter, row, time_in_bank): 
    arrive = env.now # probably some changes to be done here 
    print('%s arrived at %7.4f' % (name,arrive)) 

    with counter.request() as req: 
     results = yield req 

     wait = env.now - row["waiting_time"] 

     print('%s waited %6.3f' % (name, wait)) 

     yield env.timeout(time_in_bank) 
     print('%s exited the office at %7.4f' % (name, env.now)) 


df = pd.read_csv("arrivals.csv",sep=",",header=0) 

env = simpy.Environment() 

counter = simpy.Resource(env, capacity=1) 
env.process(source(env, df.head(), counter)) 
env.run() 

ответ

0

Вам нужно:

  • новообращенный DateTime объекты меток времени и работать с этими
  • Определить initial_time что вы проходите до Environment()
  • Определите, как долго один шаг SimPy, например 1 step == 1 sec

Пример (с участием arrow):

import arrow 
import simpy 

start = arrow.get('2016-11-05T00:00:00') 
env = simpy.Environment(initial_time=start.timestamp) 

def proc(env): 
    print('Proc start at', env.now, arrow.get(env.now)) 
    yield env.timeout(10) # 10 seconds 
    print('Proc stop at ', env.now, arrow.get(env.now)) 

p = env.process(proc(env)) 
env.run(p) 

Выход:

Proc start at 1478304000 2016-11-05T00:00:00+00:00 
Proc stop at 1478304010 2016-11-05T00:00:10+00:00 
+0

У вас есть небольшой пример? – FiofanS

+0

Добавлен пример моего ответа –

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