0

我是 Simpy 的新用户。我有一个关于如何编码网络过程模型的问题,如图所示:

在此处输入图像描述

对于网络而言,产品需要按照其调度和资源的顺序在网络内的资源中移动。为了将产品移动到下一个资源,前面的两个资源需要可用。否则,产品必须在退出资源中等待(不能释放退出资源)。

此外,每个产品都有一个大小,用于计算通过每个资源(图中的块)的时间。当产品到达块序列的末尾时,它将在其他边排队并继续循环处理。

学习过Simpy的教程,但是对系列资源建模的方法不太了解。因此,如果有人能告诉我如何解决这个问题,将不胜感激。

import simpy

env = simpy.Environment()

B1 = simpy.Store(env, capacity=1)
B2 = simpy.Store(env, capacity=1)
B3 = simpy.Store(env, capacity=1)
B4 = simpy.Store(env, capacity=1)
B5 = simpy.Store(env, capacity=1)
B6 = simpy.Store(env, capacity=1)
B7 = simpy.Store(env, capacity=1)
B8 = simpy.Store(env, capacity=1)
B9 = simpy.Store(env, capacity=1)
B10 = simpy.Store(env, capacity=1)
B11 = simpy.Store(env, capacity=1)
B12 = simpy.Store(env, capacity=1)
B13 = simpy.Store(env, capacity=1)
B14 = simpy.Store(env, capacity=1)
B15 = simpy.Store(env, capacity=1)
B16 = simpy.Store(env, capacity=1)
B17 = simpy.Store(env, capacity=1)
B18 = simpy.Store(env, capacity=1)
B19 = simpy.Store(env, capacity=1)
B20 = simpy.Store(env, capacity=1)

def product_starter(env, B1, B11):

yield B1.put(1)
yield B11.put(2)
yield env.timeout(10)
yield B1.put(3)
yield B11.put(4)

def block(env, inblock, outblock , timeout):
    while True:
    product = yield inblock.get()
    yield env.timeout(timeout)
    yield outblock.put(product)
    print('product move')

env.process(product_starter(env, B1, B11))
env.process(block(env, B1, B2, 15))
env.process(block(env, B2, B3, 15))
env.process(block(env, B3, B4, 15))
env.process(block(env, B4, B5, 15))
env.process(block(env, B5, B6, 15))
env.process(block(env, B6, B7, 15))
env.process(block(env, B7, B8, 15))
env.process(block(env, B8, B9, 15))
env.process(block(env, B9, B10, 15))
env.process(block(env, B10, B11, 15))
env.process(block(env, B11, B12, 15))
env.process(block(env, B12, B13, 15))
env.process(block(env, B13, B14, 15))
env.process(block(env, B14, B15, 15))
env.process(block(env, B15, B16, 15))
env.process(block(env, B16, B17, 15))
env.process(block(env, B17, B18, 15))
env.process(block(env, B18, B19, 15))
env.process(block(env, B19, B20, 15))

env.run(until = 100)
4

0 回答 0