公路堵车概率模型:Nagel-Schreckenberg 模型模拟

举报
是Dream呀 发表于 2022/04/18 15:24:03 2022/04/18
【摘要】 公路堵车概率模型:Nagel-Schreckenberg 模型模拟

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
🏅🏅🏅Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨

Nagel-Schreckenberg交通流模型

路面上有N辆车,以不同的速度向前行驶,模拟堵车问题。有以下假设:
1.假设某辆车的当前速度是v。
2.若前方可见范围内没车,则它在下一秒的车速提高到v+1,直到达到规定的最高限速。
3.若前方有车,前车的距离为d,且d < v,则它下一秒的车速降低到d - 1 。
4.每辆车会以概率p随机减速v - 1。
Nagel-Schreckenberg 模型模拟:

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__":
    mpl.rcParams['font.sans-serif'] = ['Fangsong']  # 设置字体
    mpl.rcParams['axes.unicode_minus'] = False  # 不显示负号坐标

    path = 5000     # 环形公路的长度
    n = 100         # 公路中的车辆数目
    v0 = 50          # 车辆的初始速度
    p = 0.3         # 随机减速概率
    Times = 3000

    np.random.seed(0)
    x = np.random.rand(n) * path
    x.sort()
    v = np.tile([v0], n).astype(np.float)

    plt.figure(figsize=(9, 7), 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] += 1
                else:
                    v[i] -= 1
            else:
                v[i] = d - 1
        v = v.clip(0, 150)
        x += v
        clip(x, path)
    plt.xlim(0, path)
    plt.ylim(0, Times)
    plt.xlabel('车辆位置', fontsize=14)
    plt.ylabel('模拟时间', fontsize=14)
    plt.title('环形公路车辆堵车模拟', fontsize=18)
    plt.tight_layout(pad=2)
    plt.show()

模型预测结果:
在这里插入图片描述

初始车速对NS模型的影响

在这里插入图片描述

减速概率对NS模型的影响

在这里插入图片描述
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了

❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~

在这里插入图片描述
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。