我在SimPy模拟中遇到了一个问题,其中多个事件以错误的顺序同时发生。具体来说,我正在对一条生产线建模,在该生产线中,机器会定期发生故障并接受维护。在t1
时间修理一台机器时,它应该在那时恢复生产。但是,事件发生的顺序是
当我想要的时候
是否可以更改事件执行的顺序?
答案 0 :(得分:1)
我建议更改您的代码以避免出现您描述的情况。您描述的代码设计对事件处理的时间/顺序很敏感,即使您正确地确定了事件的顺序,其他代码也会在以后的版本中出错。
如果更改代码设计,以便生产机器等待维修而不是定期检查,则应该避免该问题。
该过程将是:
答案 1 :(得分:0)
当多个进程同时调用componentDidUpdate(){
if(this.props.user.associatedID){
console.log("Ok now we're good");
}
else{
console.log("Still waiting!");
}
}
时,似乎出现了问题。这是我找到的解决方案:
self.env.timeout(1)
此代码产生我期望的输出。
class machine:
def __init__(self, env, process_time):
self.env = env
self.process_time = process_time
self.remaining_process_time = process_time
self.failed = False
self.parts_made = 0
env.process(self.production())
def production(self):
while True:
while self.remaining_process_time:
if random.random() < 0.1:
# machine fails
print(f'Machine failed at t={self.env.now}')
self.failed = True
yield self.env.process(self.maintenance())
print(f'Resuming production at t={self.env.now}\n')
yield self.env.timeout(1)
self.remaining_process_time -= 1
self.parts_made += 1
self.remaining_process_time = self.process_time
def maintenance(self):
print(f'Starting repair at t={self.env.now}')
ttr = random.randint(1,8)
print(f'TTR={ttr}')
yield self.env.timeout(ttr)
self.remaining_process_time = self.process_time
print(f'Finished repair at t={self.env.now}')
random.seed(1234)
env = simpy.Environment()
system = machine(env, 5)
env.run(until=50)