我已经在 simpy 中创建了一个火车模拟,但为了跟踪前方的火车,我打算使用字典,其中键值可以充当“信号”状态。这些键基本上是信号编号。前面的火车可以检查下一个信号灯是否为绿色,反之亦然。然而,代码似乎对其余信号工作正常,但我想检查信号 0 和信号 1,以便火车不会产生或不会离开。我没有输入整个代码,因为它只会让它变得冗长。这只是为了让我知道我想做什么。这是示例代码 -signal_dict={} def switchSignal(self,signal): if signal == 1 or signal == 0: signal_dict[signal]= False return signal_dict else: s[signal-1] = False return signal_dictdef switchSignal_2(self,signal): if signal == 1 or signal == 0: signal_dict[signal]= True return signal_dict else: signal_dict[signal-1] = True return signal_dictclass Train(object): def __init__(self,xxxx): xxxxxxx xxxxxxx def engagelock(self, car, drivetime,signals): with self.machine.request() as request: yield request for signal in range(0,signals): switchSignal(self,signal) while signal_dict.get(signal+1) is False : print(f"{now():s} {self.name:s} is waiting for Signal {signal+1} to turn GREEN") yield env.timeout(60) else: if isdelay()[0] == True: switchSignal(self,signal) time_delay=round(delay()[0],2) print(f"\n{now():s} {self.name:s} is experiencing a delay of {round((time_delay*10)/60,2)} min at Signal {signal}") print(signal_dict) yield env.timeout(round(time_delay*10,2)) switchSignal_2(self,signal) def process(self,k): here = 'London Old Oak Commons' dest = 'Birmingham Interchange' t1=env.now print(f"{now():s} {self.name:s} Departed from {here:s}") drivetime=timeTo(self.accel, self.maxV, d) yield env.process(self.engagelock(self.name,drivetime,k)) yield env.process(self.releaselock(self.name)) yield env.timeout(drivetime)
1 回答

SMILET
TA贡献1796条经验 获得超4个赞
我得到了这个工作,而不是双向链表,我只是创建了一个全局字典并保留了火车的标志,用于前面的信号和后面的信号。这样,每列火车都会检查下一个信号灯,如果是红色,就会减速到下一个信号灯。
添加回答
举报
0/150
提交
取消