如何在Python SimPy中获取一个输入的多次输出间隔时间

2024-10-06 13:48:20 发布

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

我使用Python Simpy进行模拟

我想从一个单位的原材料(factory.materials)生成产品库存(factory.stock)。 我拿到一单位原料后, 我不想等待一次生成一个成品库存, 我希望每次在一定的时间间隔生成多个库存, 例如,我得到一个单位的原材料,得到树时间的产品库存,每次得到5个产品,间隔6个单位时间

但是我的代码delay()用于延迟时间,但它不起作用。 如果我用收益率来延迟,它会多次得到我的原材料,我只想得到一个单位的原材料

import simpy

class Factory():
    def __init__(self, env):
        self.materials = simpy.Container(env, capacity = 10000, init = 9000)
        self.stock = simpy.FilterStore(env, capacity = 10000) 
        
def create_stock(env, factory):
    while True:
        print('time:{0} materials:{1} stock:{2}'.format(env.now,factory.materials.level,len(factory.stock.items)))
        yield factory.materials.get(1)
        
        for i in range(5):
            for j in range(2):
                factory.stock.put({'order_id': 'order_id', 'id':j})
            delay(2)
        
        yield env.timeout(1)

        
def delay(how_long):
    yield env.timeout(how_long)   
    
env = simpy.Environment()

factory = Factory(env)
on_process = env.process(create_stock(env, factory))


print('start...')
env.run(until = 30)
print('end')


Tags: selfenv产品factorydefstock库存时间
3条回答

我不确定您想要实现什么,但是delay不起作用,因为yield内部delay没有屈服于函数外部。具有函数成品率与写入yield env.timeout(x)是不同的

delay(2)行更改为env.timeout(2)将解决该问题

如果你真的想要一个函数来完成它,你可以这样做

def delay(how_long):
    return env.timeout(how_long)

yield delay(2)

我想每2个单位的时间得到一些产品库存在5个循环,然后退出过程。 将延迟(2)更改为环境超时(2),它将不起作用

import simpy
class Factory():
    def __init__(self, env):
        self.materials = simpy.Container(env, capacity = 10000, init = 9000)
        self.stock = simpy.FilterStore(env, capacity = 10000) 

def create_stock(env, factory):
    while True:
        print('time:{0} materials:{1} stock:{2}'.format(env.now,factory.materials.level,len(factory.stock.items)))
        yield factory.materials.get(1)

        for i in range(5):
            for j in range(2):
                factory.stock.put({'order_id': 'order_id', 'id':j})
            env.timeout(2)

        yield env.timeout(0)



env = simpy.Environment()

factory = Factory(env)
on_process = env.process(create_stock(env, factory))


print('start...')
env.run(until = 30)
print('end')

我使用发电机的产量,它是有效的。当得到一个单位的材料时,每3个单位的时间生产2个库存

import simpy
class Factory():
    def __init__(self, env):
        self.materials = simpy.Container(env, capacity = 10000, init = 9000)
        self.stock = simpy.FilterStore(env, capacity = 10000) 

def create_stock(env, factory):
    while True:
        #print('time:{0} materials:{1} stock:{2}'.format(env.now,factory.materials.level,len(factory.stock.items)))
        yield factory.materials.get(1)

        for i in range(5):
            yield from get_stock()

        

def get_stock():
    print('time:{0} materials:{1} stock:{2}'.format(env.now,factory.materials.level,len(factory.stock.items)))

    for i in range(2):
        factory.stock.put({'order_id': '', 'id':i})
    yield env.timeout(3)
    
    
env = simpy.Environment()

factory = Factory(env)
on_process = env.process(create_stock(env, factory))


print('start...')
env.run(until = 200)
print('end')

相关问题 更多 >