【问题标题】:Simpy: simulation with two types of processesSimpy:使用两种类型的过程进行模拟
【发布时间】:2017-04-03 09:37:03
【问题描述】:

我想模拟一家有两种客户的商店:普通客户和 VIP。

我不想为这些客户提供先进先出的服务。相反 - 无论队列是什么样子 - 我想为有机会 p 的 VIP 和有机会 1-p 的普通客户提供服务。

我知道 Simpy 的基础知识,但我不知道如何实现收银员挑选下一个要服务的客户的不同方式。

【问题讨论】:

  • 你能澄清一下你的问题吗?

标签: python simpy queueing


【解决方案1】:

简单的方法是创建两个 Simpy Store,Regular 和 VIP:

import simpy
import random

# create 2 stores
env = simpy.Environment()
regularStore = simpy.Store(env)
vipStore = simpy.Store(env)

# populate (you can use any generate process here)
regularStore.put('customer')
vipStore.put('VIP')

def server(env, regularStore, vipStore, p):
    # create the choose process
    if random.random() <= p:
        pickCustomer = yield vipStore.get()
    else:
        pickCustomer = yield regularStore.get()

    print(pickCustomer)

env.process(server(env, regularStore, vipStore, 0.30))
env.run()

【讨论】:

    【解决方案2】:

    以下代码没有使用 Simpy,但它可以说明您需要什么。如果 VIP 和普通客户中的一个或两个不需要按到达顺序保留,那么您可以将它们放在 Python 集中,就像我在这里为 VIP 所做的那样。另一方面,如果它们必须以 FIFO 顺序提供服务,那么您可以使用 Python 队列,就像我在这里为 Normals 所做的那样。我为每个容器添加了一些元素。 (很明显,您的代码将添加某种 Simpy 对象,而不是单个字符。)如果均匀分布的伪随机偏差低于 p,则选择 Normal(这与您想要的相一致) ,我认为)并返回;否则,VIP。

    >>> VIPs = set (['1', '2', '3'])
    >>> from queue import Queue
    >>> Normals = Queue()
    >>> Normals.put('a')
    >>> Normals.put('b')
    >>> Normals.put('c')
    >>> p = 0.75
    >>> def selectCustomer(VIPs, Normals, p):
    ...     from random import random
    ...     if random() < p:
    ...         return Normals.get()
    ...     else:
    ...         return VIPs.pop()
    ...     
    >>> selectCustomer(VIPs, Normals, p)
    '2'
    >>> selectCustomer(VIPs, Normals, p)
    'a'
    >>> selectCustomer(VIPs, Normals, p)
    '1'
    >>> selectCustomer(VIPs, Normals, p)
    'b'
    

    【讨论】:

    • 这可能会有所帮助。我打算使用 simpy,因为它是一个离散事件模拟器。因为我对等待时间感兴趣,所以 ... simpy 似乎很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2021-03-19
    • 2014-09-22
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多