【问题标题】:Generating customers according to schedule in simpy在 simpy 中按计划生成客户
【发布时间】:2019-04-02 06:54:56
【问题描述】:

我正在尝试使用 Simpy v3 模拟特定时间的客户到达(不是根据统计分布生成的)。到达时间在我加载到 pandas 数据框的 csv 文件中定义。

在先前版本的 Simpy (v2.2) 中,激活函数“at”有一个参数,它将在特定实例激活客户 activate(c,c.visit(timeInBank),at=5.0)。 如何在 Simpy 版本 3 中执行此操作??

数据框“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 

.

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

【问题讨论】:

    标签: python simulation simpy


    【解决方案1】:

    simpy.util 中有一个start_delayed 函数可能适合您的需要。

    import random
    import simpy
    from simpy.util import start_delayed
    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"])
            # Some code to format timestamp to seconds
            delay = timestamp_to_seconds(row["arrival_time"])
            start_delayed(env, c, delay)   
    
    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()
    

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 2020-04-07
      • 2013-12-06
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      相关资源
      最近更新 更多