0

我在 Python 中使用 Simpy 离散事件模拟来模拟工厂。该类resource允许我模拟一次可以由有限且固定数量的进程使用的资源(例如,具有有限数量的燃料泵的加油站)。粗略地说:进程必须请求这些资源才能成为用户,并且一旦完成就必须释放它们(例如,车辆到达加油站,使用燃油泵,如果有的话,完成后离开) .

资源具有有限且固定数量的可以由进程请求的槽。如果所有插槽都被占用,请求者将被放入队列中。如果一个进程释放了一个槽,则下一个进程从队列中弹出并获得一个槽。

就我而言,我有一个必须使用某些共享机器的进程列表。每个进程都与允许使用的机器的固定子集相关联。如果这个子集对于每个进程都是相同的,那么使用内置方法很容易实现这个问题,但是我在这个问题的变化中遇到了麻烦。

我试图将每台可用机器作为一个resource容量为一个的个体(而不是一个resource容量等于可用机器总数的单个),并使用该any_of方法将每个进程分配给其相应的允许子集的第一台可用机器机器。不幸的是,它不起作用。

有没有一种简单或自然的方法来实现这一点?提前致谢!

4

1 回答 1

1

您可以改用Storewith 机器。如果一台机器的容量为 1,则商店中的项目不需要是Resource实例(如示例中),而是可以是普通对象(实例object()就足够了)。

import simpy


def user(name, env, machine_store):
    machine = yield machine_store.get()
    with machine.request() as req:
        yield req
        print(name, 'got machine', machine, 'at', env.now)
        yield env.timeout(1)
    yield machine_store.put(machine)
    print(name, 'done at', env.now)


env = simpy.Environment()
machines = [simpy.Resource(env, 1) for i in range(2)]
machine_store = simpy.Store(env, len(machines))
machine_store.items = machines
for i in range(3):
    env.process(user(i, env, machine_store))
env.run()
于 2014-04-23T12:54:45.530 回答