路面上有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()

运行结果:

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
#设置初始速度为32km/h(10m/s)
v_first=10
#设置最高速度(14m/s)初始速度为50km/h
v_max=14
#设置有N辆车
num_car=100
#就是路程为5000m
path=5000
#设置刚开始的时候汽车的位置
x = np.random.rand(num_car) * path
x_1=sorted(x)
#print(x_1)
#随机0.4概率减速
p=0.4
def car(d):x=np.random.rand()if 0<=x<=p:v_car=v_first-1else:v_car=v_firstif d<v_car:v_car=d-1if v_car>v_max:v_car=v_maxreturn v_car
#这个是模拟一秒内所有车位置的变化
z=[]
times=0
while True:times+=0.1for i in range(num_car):d=0#表名某辆车和前一个车的位置if i==num_car-1:d=path-x[i]+x[0]else:car_s1 = x[i]car_s2 = x[i + 1]d_first=car_s2-car_s1#表名某辆车的速度car_v1=car(d)if x[i]+car_v1*times>path:x[i]=x[i]+car_v1*times-pathelse:x[i] = x[i] + car_v1 * timesprint(x)z.append(x)plt.scatter(x, [times] * num_car, s=1, c='k', alpha=0.5)if times>10:break
print(z)
plt.tight_layout(pad=2)
plt.show()

运行结果:

##这就是卖家秀和买家秀么,QAQ
这里引用了一个大佬博客

9-Nagel-Schreckenberg交通流模型-公路堵车概率模型相关推荐

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

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

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

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

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

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

  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. 环形公路堵车概率模型

    公路堵车概率模型 Nagel-Schreckenberg交通流模型 路面上有N辆车,以不同的速度向前行驶, 模拟堵车问题. 有以下假设: 假设某辆车的当前速度是v. 若前方可见范围内没车,则它在下一秒 ...

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

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

最新文章

  1. 2021年春季学期-信号与系统-第八次作业参考答案-第十二小题
  2. 走出去广东谋定国际丰收节贸易会-林裕豪:从玉农业抓手
  3. Windows下FFTW的安装_史上最全
  4. 函数fork vfork
  5. 在Java里面使用instanceof的性能影响
  6. C++ —— C++程序编译的四个过程
  7. 名校博士被撤销学位,只因7行文字抄袭及1张互联网图片​……
  8. 转换流/序列化/反序列化
  9. 为什么Alpha多样性的输入数据会是它?
  10. sql azure 语法_如何将SQL数据迁移到Azure Cosmos DB
  11. 几行代码就搞定一个文字识别功能,同时还能转换成语音,畅快!
  12. java char 比较,为什么我在Java中使用char和int进行比较?
  13. 深入研究java.lang.Runtime类,Process类
  14. MySQL数据库使某个不是主键的字段唯一
  15. 深入浅出MFC 书中源码Frame1(C++11)
  16. Zookeeper-watcher机制源码分析(一)
  17. 从零开始学习node.js
  18. maven打包报错Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.5.2.RELEASE:repa
  19. 外贸版ChatGPT,每天节省5小时开发客户时间,可以用来干这些事情
  20. ET篇:master客户端学习(框架初始化流程的介绍)

热门文章

  1. 使用C#设计一个Windows应用程序——记事本
  2. Redis缓存(三)缓存异常的四个方面:数据同步、缓存雪崩、击穿、穿透
  3. 复旦大学智能感知与无人系统实验室诚聘海内外超级博士后/博士后
  4. 移动端H5页面编辑器开发实战--经验技巧篇
  5. 谷歌是如何以简洁赢取用户的
  6. macOS Monterey 12.3 (21E230) 虚拟机 IOS 镜像
  7. php自定义函数全局声明,【phpcms-v9】phpcms-v9中自定义全局函数文件:extention.func.php...
  8. 检测视频中的人脸,并画出矩形框
  9. stream_kws_cnn
  10. http://nxlhero.blog.51cto.com/962631/1666250?plg_nld=1plg_uin=1plg_auth=1plg_nld=1plg_usr=1plg_...