机器学习算法基础8-Nagel-Schreckenberg交通流模型-公路堵车概率模型
文章目录
- 场景介绍
- 代码实现
场景介绍
路面上有n辆车,以不同的速度向前行驶, 模拟堵车问题。有以下假设:
1.假设某辆车的当前速度是v。
2.若前方可见范围内没车,则它在下一秒的车速提高到v+1,直到达到规定的最高限速。
3.若前方有车,前车的距离为d,且d < v,则它下 一秒的车速降低到d-1 。
4.每辆车会以概率p随机减速v-1。
代码实现
import numpy as np
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt# 对车辆的位移进行限制,当大于水平的公路长度时,则认为是拐外后的位移
def clip(x, path):for i in range(len(x)):if x[i] >= path:x[i] %= pathif __name__ == "__main__":# 缺省情况下,matplotlib是无法显示中文的,主要原因是没有指定中文字体(文件)# 在python代码中指定字体(只是其中一种解决方法)# 定义字体font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc', size=20)'''初始化定义'''path = 5000 # 环形公路的长度n = 100 # 公路中的车辆数目v0 = 50 # 车辆的初始速度p = 0.3 # 随机减速概率Times = 1000 # 模拟时间'''模拟车辆的位移和速度'''np.random.seed(0)# 模拟100辆车辆的位置x = np.random.rand(n) * path# 车辆位移进行排序# np.sort()与ndarray.sort()都可以,但有区别:np.sort()不改变输入;ndarray.sort()本地处理,不占用空间,但改变输入x.sort()# 将100个车辆的速度定义为50,并设为float类型数据# tile共有2个参数,A指待输入数组,reps则决定A重复的次数。整个函数用于重复数组A来构建新的数组,并设为float类型数据v = np.tile([v0], n).astype(np.float)'''画布大小'''plt.figure(figsize=(10, 8), facecolor='w')'''模拟在时间范围内的堵车情况'''for t in range(Times):# 绘图 x:车辆位置 [t]*n:时间plt.scatter(x, [t] * n, s=1, c='b', alpha=0.05)'''依次判断100辆车的速度和位移情况'''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:# 若前方可见范围内没车,则它在下一秒的车速提高到v+1,直到达到规定的最高限速。同时,每辆车会以概率p随机减速v-1。if np.random.rand() > p:v[i] += 1else:v[i] -= 1else:# 若前方有车,前车的距离为d,且d < v,则它下 一秒的车速降低到d-1 。v[i] = d - 1# 限制速度,v<0,则将v定义为0;v>150,则将v定义为150v = v.clip(0, 150)# 车辆的位移在增加,车在往前开x += v# 调用clipclip(x, path)# 坐标轴范围调整plt.xlim(0, path)plt.ylim(0, Times)# 标签,显示设置字体plt.xlabel('车辆位置', fontsize=16, fontproperties=font)plt.ylabel('模拟时间', fontsize=16, fontproperties=font)plt.title('环形公路车辆堵车模拟', fontsize=20,fontproperties=font)'''自动调整子图参数,使之填充整个图像区域'''plt.tight_layout(pad=2)'''画图'''plt.show(
图形中颜色越重的地方,说明很多车的位移相同,则说明发生了堵车的情况。如果颜色重的地方多,说明堵车严重。
随机减速概率越大,堵车越严重。
当随机概率为0.6时,
当随机概率为0.1时
机器学习算法基础8-Nagel-Schreckenberg交通流模型-公路堵车概率模型相关推荐
- 9-Nagel-Schreckenberg交通流模型-公路堵车概率模型
路面上有n辆车,以不同的速度向前行驶, 模拟堵车问题.有以下假设: 1.假设某辆车的当前速度是v. 2.若前方可见范围内没车,则它在下一秒的车速提高到v+1,直到达到规定的最高限速. 3.若前方有车, ...
- 机器学习算法基础知识
在我们了解了需要解决的机器学习问题的类型之后,我们可以开始考虑搜集来的数据的类型以及我们可以尝试的机器学习算法.在这个帖子里,我们会介绍一遍最流行的机器学习算法.通过浏览主要的算法来大致了解可以利用的 ...
- [Python机器学习]Nagel-Schreckenberg(交通流)模型
据 Nagel-Schreckenberg 模型,车辆的运动满足以下规则: 1. 假设当前速度是 v ,和前一辆车的距离为d. 2. 如果 d > v,它在下一秒的速度会提高到 v + ...
- 论文推荐 | 综述:自动驾驶背景下的交通流模型研究
导读 题目:<Automated vehicle-involved traffic flow studies: A survey of assumptions, models, speculat ...
- 交通流模型仿真(Traffic flow)
交通流模型,主要包括:宏观模型.微观模型.混合模型 交通模拟的一个 重要部分:是在不同的细节水平上描述车辆的运动.交通流建模与仿真的早期研究可以追溯到20世纪50年代,当时分别提出了宏观交通模型.微观 ...
- PanoSim仿真模型--交通流模型
5.2.1 正常交通流模型 PanoSim 内置仿真正常驾驶场景的随机交通,称之为正常交通流模型(或称之为随机交通模型).随机交通流模型的参数设置,请参看 4.2.1.3 Traffic Tools ...
- 【元胞自动机】元胞自动机双车道交通流模型含靠右行驶【含Matlab源码 231期】
⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...
- 【元胞自动机】基于matlab元胞自动机双车道交通流模型含靠右行驶【含Matlab源码 231期】
⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...
- 【元胞自动机】基于元胞自动机模拟双车道交通流模型含靠右行驶matlab源码
元胞自动机的初步理解 对元胞自动机的初步认识\ 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法.典型的元\ 胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状\ 态.变化规 ...
- 机器学习算法基础——数据降维
12.数据的降维之特征选择 特征选择 冗余:部分特征的相关度高,容易消耗计算性能 噪声:部分特征对预测结果有负影响 特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择 ...
最新文章
- 关于通过Sequential容器创建LeNet-5
- python处理大量excel数据-使用python将大量数据导出到Excel中的小技巧分享
- vue post请求后台django接口Forbidden (CSRF token missing or incorrect.)
- 系统工具源码设计页面
- 前端学习(497):布局之居中布局
- 【数据结构与算法】【算法思想】回溯算法
- 发布python项目到pypi,以便供他人用pip install安装
- 微软发布面向企业区块链网络的Coco Framework
- python提供了两种基本的数值类型_python数据分析(一) python当中的数据类型--数字和常用函数...
- [转]vs2005常用快捷键
- 微服务究竟是“灵丹”还是“毒药”?
- Python大屏看板最全教程之数据库连接
- 使用讯飞语音识别的空指针错误
- 总结HTMLT5高级的新特性
- 2D 动画调整 position 产生的位移问题
- 蓝桥 卷“兔”来袭编程竞赛专场-05棋盘加密 题解
- Dell戴尔笔记本电脑G16 7620原装出厂Windows11系统恢复原厂oem系统
- 工作站 显卡 测试软件,【戴尔Precision 3530移动图形工作站笔记本使用总结】配置|硬盘|显卡|屏幕|续航_摘要频道_什么值得买...
- flutter 仿网易云音乐(3)
- 报错:“TypeError: Cannot read property ‘0‘ of undefined“的原因