我已經在 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
提交
取消