公路堵车概率模型Python(Nagel-Schreckenberg交通流模型)
路面上有N辆车,以不同速度向前行驶,模拟堵车问题。有以下假设:
- 假设某辆车的当前速度是 v
- 如果 前方可见范围内没车,下一秒车速提高到 v+1
- 如果 前方有车,前车的距离为 d ,且 d < v ,则 下一秒车速降低到 d - 1
- 每辆车会以概率 p 随机减速 v - 1
Python代码如下:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt def clip(x, path):
for i in range(len(x)):
if x[i] >= path:
x[i] %= path if __name__ == "__main__":
# 输出中文(黑体SinHei),仿宋(fangsong)
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False path = 5000 # 环形公路长度
n = 100 # 公路中的车辆数目
v0 = 50 # 车辆的初始速度
p = 0.3 # 随机减速概率
Times = 3000 # 模拟次数3000 np.random.seed(0) # 种子设为0 -> 生成的随机数都相同
x = np.random.rand(n)*path # 列表x生成100*5000个随机数
x.sort() # 对x升序排序
v = np.tile([v0], n).astype(float) # 将v0重复n次并转换为浮点型赋给数组v中的n个元素 plt.figure(figsize=(9, 7), facecolor='w') # 创建图像高9英寸宽7英寸,背景色:white = #FFFFFF
for t in range(Times): # 每一次是图中的一行数据
# 测试4行数据
# if t not in [100, 150, 175, 1000]:
# continue
plt.scatter(x, [t]*n, s=1, c='k', alpha=0.05) # 横轴x,纵轴t*n(t从0到2999,n=100)
for i in range(n): # 对于每一行数据
# 本车当前速度为v
# 如果 前方有车 && 前车的距离d < 车速v:下一秒车速 = d-1
# 如果 没车:加速到 v+1
# 每辆车以概率p随机减速v-1
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] += 1
else:
v[i] -= 1
else:
v[i] = d - 1
v = v.clip(0, 150) # 保证车速是正向的,在0-150之间
x += v # 位移就是一秒钟时间的速度,速度v之和就是位移x
clip(x, path)
plt.xlim(0, path) # x的取值范围x limit=0-5000
plt.ylim(0, Times)
plt.xlabel('车辆位置', fontsize=14)
plt.ylabel('模拟时间', fontsize=14)
plt.title('环形公路车辆堵车模拟', fontsize=18)
plt.tight_layout(pad=2) # pad越小,坐标轴越靠边
# plt.savefig('环形公路车辆堵车模拟.png')
plt.show()
结果:
以上为本人在b站听了邹博老师陆家嘴学堂视频课之后的结果。
公路堵车概率模型Python(Nagel-Schreckenberg交通流模型)的更多相关文章
- python dpkt解析ssl流
用法:python extract_tls_flow.py -vr white_pcap/11/2018-01-10_13-05-09_2.pcap -o pcap_ssl_flow.txt & ...
- python+ mysql存储二进制流的方式
很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家可以不用担心,因为我说过了,是存储一些很小的图片,几K的,没有问题的! 再者,在这里我们是想 ...
- Python web前端 04 盒子模型
Python web前端 04 盒子模型 盒子模型是由内容(content).内边距(padding).外边距(margin).边框(border)组成的 一.边框 border #border 边框 ...
- JavaScript的事件、DOM模型、事件流模型以及内置对象详解(三)
JS中的事件 JS中的事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresize ...
- JS的事件绑定、事件流模型
.t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.JS事件 (一)JS事件分类 1.鼠标事件:click/dbclick ...
- 基于Python的信用评分卡模型分析(二)
上一篇文章基于Python的信用评分卡模型分析(一)已经介绍了信用评分卡模型的数据预处理.探索性数据分析.变量分箱和变量选择等.接下来我们将继续讨论信用评分卡的模型实现和分析,信用评分的方法和自动评分 ...
- java web应用调用python深度学习训练的模型
之前参见了中国软件杯大赛,在大赛中用到了深度学习的相关算法,也训练了一些简单的模型.项目线上平台是用java编写的web应用程序,而深度学习使用的是python语言,这就涉及到了在java代码中调用p ...
- 控制论模型&心流模型&波模型
1.控制论模型 这是对设定的目标,通过多次输入和输出,反馈调节,最终达成目标的方法.广泛运用于自然科学与社会科学中.反馈的周期长短决定了调节精度的大小以及达到目标的速度.反馈结果与目标背离的立即纠正, ...
- 深入理解JS的事件绑定、事件流模型
一.JS事件 (一)JS事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresi ...
- JS事件流模型
JS事件流模型 事件捕获Event Capturing是一种从上而下的传播方式,以click事件为例,其会从最外层根节向内传播到达点击的节点,为从最外层节点逐渐向内传播直到目标节点的方式. 事件冒泡E ...
随机推荐
- 这年头,谁的好友列表还没有躺一个ChatGPT啊?
你要是说这个,我可不困了 大家好,我最近开始使用一款非常有趣的AI机器人,它叫做ChatGPT.ChatGPT是一款独特的聊天机器人,它可以进行智能对话,回答你的问题,还可以学习你的语言习惯,使得对话 ...
- 自建kms2种方法,亲测有效
你还在用网上那种坑爹的Ghost盗版系统吗?内置各种辣鸡.流氓软件,新系统?纯净版Ghost系统?不存在的~ 在开始自建KMS服务器之前,我觉得很有必要给大家分享一个神站,没错就是MSDN! 地址:h ...
- [Linux]常用命令之【YUM】
1 YUM的简介 什么是yum源? Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora.RedHat/RHEL.SUSE以及CentOS等Linux发行版中 ...
- python从shp文件中读取经纬度数据
python从shp文件中读取经纬度数据 没有接触过GIS的人来说shp文件很陌生而且很难打开查看,好在python可以从中提取出自己想要的数据 pyshp库的安装 python的pyshp库可以实现 ...
- mysql迁移:xtrabackup迁移mysql5.7.32
问题描述:利用外部xtrabackup工具来做迁移mysql数据库,或者恢复数据库 xtrabackup迁移mysql 1.环境 mysql源库 mysql目标迁移库 IP 192.168.163.3 ...
- Active Record Associations
The Types of Associations 在 Rails 中,可以通过 ActiveRecord 来定义不同类型的关联关系(Associations),包括以下几种: belongs_to: ...
- 这可能是最全面的MySQL面试八股文了
什么是MySQL MySQL是一个关系型数据库,它采用表的形式来存储数据.你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列).行代表每一行数据,列代表该行中的每个值.列上的值是 ...
- 当Serverless遇到Regionless:现状与挑战
摘要:本文尝试基于分析现有的学术文章,剖析Serverless与Regionless并存时,在性能提升和成本控制两个方向的现状与挑战 本文分享自华为云社区<当Serverless遇到Region ...
- spring事务传播的Propagation.REQUIRES_NEW以及NEVER MANDATORY验证,及其失效的诡异问题
NEVER 不使用事务,如果当前事务存在,则抛出异常 验证: @Service public class PrService { @Autowired PrDao dao; @Transactiona ...
- spring xml配置中引用java配置不能用ClassPathXmlApplicationContext
现在的目的是想测试在xml配置中引用java配置的bean CD唱片的接口: package v4.c2; public interface CompactDisc { void play(); } ...