本文详细代码见我的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实现相关推荐

  1. [Python机器学习]Nagel-Schreckenberg(交通流)模型

    据 Nagel-Schreckenberg 模型,车辆的运动满足以下规则: 1.   假设当前速度是 v ,和前一辆车的距离为d. 2.   如果 d > v,它在下一秒的速度会提高到 v + ...

  2. 交通流模型仿真(Traffic flow)

    交通流模型,主要包括:宏观模型.微观模型.混合模型 交通模拟的一个 重要部分:是在不同的细节水平上描述车辆的运动.交通流建模与仿真的早期研究可以追溯到20世纪50年代,当时分别提出了宏观交通模型.微观 ...

  3. 论文推荐 | 综述:自动驾驶背景下的交通流模型研究

    导读 题目:<Automated vehicle-involved traffic flow studies: A survey of assumptions, models, speculat ...

  4. PanoSim仿真模型--交通流模型

    5.2.1 正常交通流模型 PanoSim 内置仿真正常驾驶场景的随机交通,称之为正常交通流模型(或称之为随机交通模型).随机交通流模型的参数设置,请参看 4.2.1.3 Traffic Tools ...

  5. 【元胞自动机】元胞自动机双车道交通流模型含靠右行驶【含Matlab源码 231期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  6. 【元胞自动机】基于matlab元胞自动机双车道交通流模型含靠右行驶【含Matlab源码 231期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  7. 【元胞自动机】基于元胞自动机模拟双车道交通流模型含靠右行驶matlab源码

    元胞自动机的初步理解 对元胞自动机的初步认识\ 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法.典型的元\ 胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状\ 态.变化规 ...

  8. 交通流预测python代码_Python 3 amp; Keras 实现基于神经网络的交通流预测

    交通流量预测在智能交通(ITS)系统中占有重要地位,是实现交通诱导的前提.准确实时的短时交通流预测有助于更好的分析路网交通状况,对路网交通规划和交通优化控制有非常重要的作用.随着交通数据采集技术的不断 ...

  9. 元胞自动机交通流模型c++_MATLAB——含出入匝道的交织区快速路元胞自动机模型...

    输出效果 本模型为包含一条变速车道和出入匝道的快速路交织区仿真模型. 车道编号 换道规则和不含出入匝道的路段的区别在于换道分为自由换道和强制换道.车辆在不同区域有不同换道状态,而车辆本身又有出匝道和直 ...

  10. 【元胞自动机】基于元胞自动机实现多车道不同间距交通流模型附Matlab源码

    1 简介 车辆的行驶受到本车道以及邻近车道前后邻近车辆的影响,在城市交 通中机非混合对车辆行走的影响尤为复杂.通过研究路段上机非混合通行交通流的本质特性,综合考虑非机动车对机动车换道规则及加减速规则的 ...

最新文章

  1. 剑指offer:树的子结构
  2. 最强去马赛克AI来了,分分钟回到无马世界,连像素风《我的世界》人物都能复原...
  3. 网络推广平台浅析通常网站关键词优化密度该如何把控呢?
  4. HDU_1075 What Are You Talking About(Trie 树)
  5. Disgruntled Judge UVA - 12169
  6. linux操作系统adsl 上网设置,Linux操作系统下ADSL拨号上网详细步骤
  7. L3-020 至多删三个字符 [DP]
  8. redisTemplate.opsForValue()中方法讲解
  9. linux VPS上装FTP
  10. 通过AT指令控制ESP8266
  11. 斯坦福 CS228 概率图模型中文讲义 六、变量消除
  12. JAVA学习-JAVA实现客户端与服务器端的TCP通信
  13. 搭建Git本地服务器(转)
  14. 法兰克机器人外部自动_行业数据 | 服务机器人销售额创新纪录:全球增长32
  15. 20届校招-携程笔试题-表达式解析
  16. 线性代数————思维导图(上岸必备)(二次型)
  17. Python数据获取及分析 获取豆瓣电影 评论 星级 时间
  18. 国产处理器的逆袭机会——RISC-V
  19. 推荐一款STM32F030K6T6兼容替换灵动MM32F031K6T6
  20. 凯文·凯利:最伟大的产品还没有被创造出来

热门文章

  1. c语言小程序跑马灯,小程序横向跑马灯效果(3种方式)
  2. 《新概念模拟电路》系列电子书下载
  3. 如何选择合适的代理IP?以下3点需要注意
  4. 用Java做一个及时翻译工具
  5. Linux统计代码行数
  6. 三星note9刷android11,【极光ROM】-【三星NOTE9 N960X-845】-【V17.0 Android-Q-TG1】
  7. 阿昌教你Linux密码忘记后如何重置
  8. c语言编程运行符号是什么,c语言编程用的符号有哪些
  9. 操作记录-2020-11-13:精简代码处理ChIP_seq数据
  10. Hive 窗口函数如何设置窗口大小