欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

Nagel-Schreckenberg(交通流)模型——python实现

发布时间:2023/12/20 python 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Nagel-Schreckenberg(交通流)模型——python实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本文详细代码见我的github仓库 AI_ML_DataAnalysis_DataVisualization_Classic-Examples

Nagel-Schreckenberg模型是高速公路交通模拟的理论模型。该模型由德国物理学家Kai Nagel和Michael Schreckenberg于20世纪90年代初开发。它本质上是用于道路交通流量的简单元胞自动机模型,其可以再现交通拥堵,即,当道路拥挤时显示平均车速减慢。
现在模拟一个场景,在一个环形公路上,所有车围成一个圆,每辆车有一定的概率减速.当后面的车的车速比它前面相邻的车车速快时,即将产生追及问题时,后面的车就必须减速,这样就会导致各种不同情况的拥堵.
模拟代码如下:
减速概率p,车辆初速度v都可以手动改变,以测试不同情况
ns.ttc是一个字库,需要导入
当减速概率p为0.5时:

# -*- coding: utf-8 -*-from matplotlib.font_manager import * import matplotlib.pyplot as plt import numpy as npmyfont = FontProperties(fname='ns.ttc') matplotlib.rcParams['axes.unicode_minus'] = False np.random.seed(0)def Run(path=5000, n=100, v0=60, ltv=120, p=0.3, times=3000):'''path = 5000.0 # 道路长度n = 100 # 车辆数目v0 = 60 # 初始速度ltv = 120 # 最大限速p = 0.3 # 减速概率times = 3000 # 模拟的时刻数目'''# x保存每辆车在道路上的位置,随机初始化x = np.random.rand(n) * pathx.sort()# v保存每辆车的速度,初速度相同v = np.ones(n) * v0plt.figure(figsize=(5, 4), facecolor='w')# 模拟每个时刻for t in range(times):plt.scatter(x, [t] * n, s=1, c='k', alpha=0.05)# 模拟每辆车for i in range(n):# 计算当前车与前车的距离,注意是环形车道if x[(i + 1) % n] > x[i]:d = x[(i + 1) % n] - x[i]else:d = path - x[i] + x[(i + 1) % n]# 根据距离计算下一秒的速度if v[i] < d:if np.random.rand() > p:v[i] += 1else:v[i] -= 1else:v[i] = d - 1# 对速度进行限制v = v.clip(0, ltv)# 一秒后,车辆的位置发生了变化x += v# 注意是环形车道x = x % path# 展示plt.xlim(0, path)plt.ylim(0, times)plt.xlabel(u'车辆位置', fontproperties=myfont)plt.ylabel(u'模拟时间', fontproperties=myfont)plt.title(u'交通模拟(车道长度%d,车辆数%d,初速度%s,减速概率%s)' % (path, n, v0, p), fontproperties=myfont)# plt.tight_layout(pad=2)plt.show()if __name__ == '__main__':# Run(v0=0)# Run(v0=20)# Run(v0=40)# Run(v0=60)# Run(p=0.0)# Run(p=0.1)# Run(p=0.3)Run(p=0.5) # Run(p=0.8) # Run(p=1.0)

运行结果:

图中线条越密集的地方代表越有可能发生堵车的情况

当p=0时,也就是不减速,你会发现所有车匀速行驶,不会出现堵车情况

当p=0.3时

当p=0.8时:

极端现象,车辆直接堵死了,就像北京环内一样,当p=1时:

所以可以得出结论:减速概率越大,交通拥挤概率越大,越容易堵车

总结

以上是生活随笔为你收集整理的Nagel-Schreckenberg(交通流)模型——python实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。