🧄Python智能驱动数学模型和泰勒级数-贝塞尔曲线模拟微观交通
Python | NumPy | 督能驱动模型(IDM) | 泰勒级数 | 贝塞尔曲线 | 微观交通 | pygame | scipy | 动力学方程 | 高速公路 | 双向交叉口 | 选回路口 | 发散钻石交汇处 | 减速区 | 停止区
模拟交通流量背后的主要原因是在没有真实世界的情况下生成数据。 您可以使用在软件上运行的模型来预测交通流量,而不是测试如何在现实世界中,管理交通系统或使用传感器收集数据的新想法。 这有助于加速交通系统的优化和数据收集。 模拟是比实际测试更便宜、更快的替代方案。
训练机器学习模型需要庞大的数据集,收集和处理这些数据集既困难又昂贵。通过模拟流量以程序方式生成数据可以很容易地适应所需的确切数据类型。
在本文中,我将解释为什么交通模拟很重要,比较不同的交通建模方法,并展示我的模拟。
为了分析和优化交通系统,我们首先必须对交通系统进行数学建模。这样的模型应该基于输入参数(道路网络几何形状、每分钟车辆数、车速……)真实地表示交通流量。
交通系统模型通常分为三类,具体取决于它们运行的级别:
微观模型:分别代表每辆车并尝试复制驾驶员行为。
宏观模型:从交通密度(每公里车辆数)和交通流量(每分钟车辆数)两个方面描述车辆的整体运动。它们通常类似于流体流动。
介观模型:是结合了微观和宏观模型特征的混合模型;他们将流量建模为车辆的“数据包”。
在本文中,我将使用微观模型。
交通模型
微观驾驶员模型描述了单个驾驶员/车辆的行为。因此,它必须是一个多智能体系统,也就是说,每辆车都使用来自其环境的输入自行运行。
智能驱动模型
2000 年,Treiber, Hennecke et Helbing 开发了一种称为智能驾驶员模型的模型。 它将第 i 个车辆的加速度描述为它的变量和它前面的车辆的变量的函数。 动力学方程定义为:
在解释这个模型背后的直觉之前,我应该解释一些符号代表什么。
原理
假设车辆沿直线路径移动,并假设遵守以下等式:
为了更好地理解方程,我们可以将它的项一分为二。我们有自由道路加速和交互加速。
路网模型
随机车辆生成
def generate_vehicle(self):
total = sum(pair[0] for pair in self.vehicles)
r = randint(1, total+1)
for (weight, config) in self.vehicles:
r -= weight
if r <= 0:
return Vehicle(config)
def update(self):
"""Add vehicles"""
if self.sim.t - self.last_added_time >= 60 / self.vehicle_rate:
road = self.sim.roads[self.upcoming_vehicle.path[0]]
if len(road.vehicles) == 0\\
or road.vehicles[-1].x > self.upcoming_vehicle.s0 + self.upcoming_vehicle.l:
self.upcoming_vehicle.time_added = self.sim.t
road.vehicles.append(self.upcoming_vehicle)
self.last_added_time = self.sim.t
self.upcoming_vehicle = self.generate_vehicle()
Python模拟
车辆
我们将使用泰勒级数来近似求解本文建模部分中讨论的动力学方程。
车辆动态运行
交通灯
路况
在现实世界中,道路有曲线。虽然从技术上讲,我们可以在此模拟中通过手写许多道路的坐标来近似曲线来创建曲线,但我们可以在程序上做同样的事情。
我将为此使用贝塞尔曲线。
测试路型
高速公路入口
双向交叉口
迂回
发散钻石交汇处
源代码
Last updated