离散事件建模Simpy如何建模复杂的依赖关系?

2024-09-28 01:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Simpy的新手,我很难弄清楚如何为具有复杂依赖关系的进程调度器建模。你知道吗

我的问题的高级摘要

  • 我有一个仓库,通过入口接收装有物品的箱子。盒子被放入队列中等待处理。你知道吗
  • 每个箱子都有一个目的地房间,必须用传送带运到那里。传送带服务于多个房间。你知道吗
  • 操作员查看队列中的箱子,仅当传送带和目的地房间都可用时,才将箱子放在适当的传送带上。操作员按顺序发送方框,但跳过无法处理的方框。你知道吗
  • 一旦盒子在房间内打开,就需要一定的时间来存放物品。在此期间,房间不能接收其他箱子。你知道吗
  • 在物品被储存后,空盒子被送到仓库的出口,使用的传送带和它进来的传送带是一样的。你知道吗
  • 操作员随时了解哪些传送带和房间是空闲的。你知道吗

我的问题是如何模拟这个操作符。到目前为止,我还没有找到一种优雅的方法来在Simpy中实现这一点。我基本上希望有一个过程,只有在满足以下三个条件时才会被唤醒:a)一个房间是免费的;b)队列中有一个指向这个房间的盒子,c)到达房间的腰带是免费的。你知道吗

任何想法,建议或现有的例子指针是非常感谢。谢谢您!你知道吗


Tags: 关系队列进程调度物品仓库盒子房间
1条回答
网友
1楼 · 发布于 2024-09-28 01:24:48

你可能想看看

https://simpy.readthedocs.io/en/latest/topical_guides/resources.html#res-type-store

 from collections import namedtuple

 Machine = namedtuple('Machine', 'size, duration')
 m1 = Machine(1, 2)  # Small and slow
 m2 = Machine(2, 1)  # Big and fast

 env = simpy.Environment()
 machine_shop = simpy.FilterStore(env, capacity=2)
 machine_shop.items = [m1, m2]  # Pre-populate the machine shop

 def user(name, env, ms, size):
     machine = yield ms.get(lambda machine: machine.size == size)
     print(name, 'got', machine, 'at', env.now)
     yield env.timeout(machine.duration)
     yield ms.put(machine)
     print(name, 'released', machine, 'at', env.now)


 users = [env.process(user(i, env, machine_shop, (i % 2) + 1))
          for i in range(3)]
 env.run()

关于盒子和房间,我建议您使用2个不同的资源库(资源类)来建模。你知道吗

a)一个房间是免费的;(检查房间的资源库是否是空的)
b) 队列中有一个为这个房间指定地址的框(在namedtuple中定义框和房间),您可以使用get\u queue进行检查

c)通往房间的安全带是免费的。(类似于a点)

相关问题 更多 >

    热门问题