You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交通模拟系统左侧车道首位无更新问题及代码修正咨询

小型交通模拟系统问题排查与修复

问题现象

运行时左侧车道(lane_1)首位始终无车辆更新,运行快照如下:

[.....], (G), [.....]
[.....], (G), [...S.]
[.....], (G), [..SS.]
[.....], (G), [.SSS.]
[...S.], (G), [.SSS.]
[..SS.], (G), [.SSS.]
[.SSS.], (G), [.SSW.]
[.SSS.], (G), [.SWS.]
[.SSS.], (G), [.WSS.]
[.SSW.], (G), [.SSS.]
[.SWS.], (G), [.SSW.]
[.WSS.], (G), [.SWW.]
[.SSS.], (G), [.WWS.]
[.SSW.], (G), [.WSW.]
[.SWW.], (G), [.SWS.]
[.WWS.], (G), [.WSS.]
[.WSW.], (G), [.SSS.]
[.SWS.], (G), [.SSW.]
[.WSS.], (G), [.SWS.]
[.SSS.], (G), [.WSW.]

Final state:
[.SSW.], (G), [.SWW.]

预期效果

期望目的地为'S'的车辆能出现在左侧车道首位,预期运行效果如下:

[.....] (G) [.....]   []
    [.....] (G) [....S]   []
    [.....] (G) [...SS]   []
    [.....] (G) [..SSS]   []
    [.....] (G) [.SSSS]   []
    [.....] (G) [SSSSS]   []
    [....S] (G) [SSSSW]   []
    [...SS] (G) [SSSWS]   []
    [..SSS] (R) [SSWSS]   []
    [.SSS.] (R) [SSWSS]   ['S']
    [SSS..] (G) [SSWSS]   ['S', 'W']
    [SS..S] (G) [SWSSS]   ['W', 'W']
    [S..SS] (G) [WSSSW]   ['W', 'S']
    [..SSW] (G) [SSSWW]   ['S', 'W']
    [.SSWS] (G) [SSWWS]   ['W', 'S']
    [SSWSS] (G) [SWWSW]   ['S', 'S']
    [SWSSS] (G) [WWSWS]   ['S', 'S']
    [WSSSW] (G) [WSWSS]   ['S', 'W']
    [SSSWW] (R) [SWSSS]   ['W', 'S']
    [SSWW.] (R) [SWSSS]   ['W', 'S', 'W']
    [SWW..] (G) [SWSSS]   ['W', 'S', 'W', 'W']
    [WW..S] (G) [WSSSW]   ['S', 'W', 'W', 'S']
    [W..SW] (G) [SSSWS]   ['W', 'W', 'S', 'W']
    [..SWS] (G) [SSWSW]   ['W', 'S', 'W', 'W']
    [.SWSS] (G) [SWSWW]   ['S', 'W', 'W']
    [SWSSS] (G) [WSWWS]   ['W', 'W', 'S']
    [WSSSW] (G) [SWWSW]   ['W', 'S']
    [SSSWS] (G) [WWSWW]   ['S']
    [SSWSW] (R) [WSWWS]   []
    [SWSW.] (R) [WSWWS]   []
    [WSW..] (G) [WSWWS]   ['W']
    [SW..W] (G) [SWWSW]   ['S']
    [W..WS] (G) [WWSWS]   []
    [..WSW] (G) [WSWS.]   []

Destinations类工作逻辑

该类负责生成固定序列的车辆目的地,逻辑如下:

  • 初始化时定义了一个长度为100的元组_arrivals,其中:
    • 0代表本次无车辆生成
    • 1代表生成目的地为'W'的车辆
    • 2代表生成目的地为'S'的车辆
  • _internal_time作为内部计数器,记录当前使用序列的索引位置
  • step()方法每次执行时:
    1. 获取当前_internal_time对应的_arrivals元素值
    2. 将_internal_time加1,超过序列长度时取模循环
    3. 根据元素值返回对应目的地:1返回'W',2返回'S',0返回None

修正TrafficSystem的step方法

原step方法逻辑混乱,未遵循指定流程,且存在调用is_green时未加括号的错误(self.light.is_green是方法引用,需改为self.light.is_green())。以下是遵循指定流程修正后的step方法:

修正后的TrafficSystem类

class TrafficSystem:
    """Defines a traffic system"""

    def __init__(self):
        self.time = 0
        self.destinations = ds.Destinations()
        self.lane_1 = tc.Lane(5)
        self.lane_2 = tc.Lane(5)
        self.light = tc.Light(10, 8)

    def snapshot(self):
        print(
            f"{self.lane_1.__str__()}, {self.light.__str__()}, {self.lane_2.__str__()}")

    def step(self):
        # 1. 移除左侧车道的首位车辆
        self.lane_1.remove_first()
        # 2. 调用左侧车道的step方法
        self.lane_1.step()
        # 3. 若信号灯为绿色,将右侧车道的首位车辆移至左侧车道
        if self.light.is_green():
            first_vehicle = self.lane_2.remove_first()
            if first_vehicle is not None:
                self.lane_1.enter(first_vehicle)
        # 4. 调用信号灯的step方法
        self.light.step()
        # 5. 调用右侧车道的step方法
        self.lane_2.step()
        # 6. 调用Destinations的step方法,若返回目的地则创建车辆并加入右侧车道末尾
        dest = self.destinations.step()
        if dest is not None:
            new_vehicle = tc.Vehicle(dest, self.time)
            self.lane_2.enter(new_vehicle)
        # 更新系统时间
        self.time += 1

    def in_system(self):
        pass

    def print_statistics(self):
        pass

修正说明

  • 严格按照指定的6步流程执行,确保每一步顺序正确
  • 修复了is_green的调用错误,改为调用方法self.light.is_green()
  • 新增系统时间self.time作为车辆的borntime,符合Vehicle类的初始化要求
  • 处理右侧车道移车时的空值情况,避免将None加入左侧车道

内容的提问来源于stack exchange,提问作者user17079709

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:10:22