我按照本文中的智能驱动程序模型: C++构建了一个流量模拟:https://towardsdatascience.com/simulating-traffic-flow-in-python-ee1eab4dd20f
总结一下我的执行情况:
Tile(s)的二维网格。Tile都有Road(s)的列表。为了简单起见,没有一条路会与自己合并成另一条路/分岔(每条路只能在它们的端点连接到其他道路)。如果一条道路违反了这一点,我会在合并/发散点将它分成两条路。Road都有Node(s)的列表。更新功能将连接点,我将有我的道路。这篇文章没有提到什么时候道路只是交叉其他道路(没有交通灯的指导),所以我开发了自己的系统。
在模拟开始之前,每个瓷砖都会在其道路内找到每个可能的交叉口,将穿过该交叉口的道路的位置和信息存储到单独的IntersectNode (与Node无关)中,然后将其抛入IntersectManager中。在更新循环中,管理器循环遍历所有节点,这些节点遍历所有相交的道路,并控制这些道路上车辆的速度。
当我回到执行交通灯时会出现问题:我想指出我想要的信号灯在哪里,因为道路是固定的(Ex:在1,3的开始,瓷砖(1,3)放一个灯)。但是交通灯是IntersectNode(s),现在似乎没有好的方法将两者分开(或者具体说明哪一个)。
那么,实现这个目标的最佳方式是什么呢?我并不是真的在寻找最大的效率,而是更容易实现、使用和重用。
编辑:较短的问题状态:在瓷砖内,交叉口是自动计算的,而交通灯是手动放置的。所以交通灯总是停在交叉口的顶部。问题是,交通灯和交叉口对汽车有不同的影响(就像在现实生活中一样)。所以,当交通灯已经亮起时,我需要消除交叉口的影响。
编辑2:要被视为“连接”,一条道路的端点必须是另一条道路的起点。“交叉”是指道路相互重叠时(例如,两条道路形成"X“形状时)。
发布于 2023-04-25 11:49:04
如果我正确地理解了这个问题,你只是在存储道路,在运行时在这个道路网络上生成一个图形,但是手动输入的信息有问题,比如影响这些运行时生成的交叉口行为的交通灯。
在这个图形表示中,边表示一个没有任何变化的路段。任何行为,如屈服、停止、速度变化等,都应该由节点来表示。
在我看来,解决办法似乎相当清楚。使用某种形式的编辑器在公路网上生成此图,并将其存储起来。这应该允许您对图形进行更改,以添加交通灯或其他任何东西。在添加新道路时,编辑器仍然具有方便的检测交叉口的功能,并相应地对图形进行更新。
由于这似乎是一个高度可视化的问题,我强烈推荐一个可视化编辑器来显示实际道路。试图在xml/json文件中手工输入坐标似乎很容易出错,而且对于更复杂的道路网络来说,其扩展性也不是很好。
https://softwareengineering.stackexchange.com/questions/445226
复制相似问题