首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Python SimPy中获取一个输入的多次输出间隔时间

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

Stack Overflow用户
提问于 2021-03-08 03:40:49
回答 4查看 94关注 0票数 0

我使用Python进行仿真。

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

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

代码语言:javascript
复制
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')
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-03-10 03:47:43

我用发电机的产量,它works.When得到一个单位材料,每3个单位时间输出2个股票。

代码语言:javascript
复制
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')
票数 0
EN

Stack Overflow用户

发布于 2021-03-08 04:48:32

我不确定您想要实现什么,但是delay不能工作,因为delay内部的yield不会屈服于函数外部。函数输出与编写yield env.timeout(x)不同。

delay(2)行改为env.timeout(2)将解决这个问题。

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

代码语言:javascript
复制
def delay(how_long):
    return env.timeout(how_long)

yield delay(2)
票数 0
EN

Stack Overflow用户

发布于 2021-03-08 05:45:27

我希望每两个单位的时间,以获得一些产品库存在5个循环,然后退出过程。将延迟(2)更改为env.timeout(2),则无法工作。

代码语言:javascript
复制
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')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66524022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档