线性跟驰模型车头间距

线性跟驰模型中车头间距的变化

import matplotlib.pyplot as plt
import numpy as np


class Linear():
    """
    a(n+1)=C*(v(n)-v(n+1)),a为T时间后的加速度
    C=λ*T
    λ=1/(e*T)
    假设初始8辆车正常运行

    后车跟随前车,分别8->7->6->5->4->3->2->1
    """

    def __init__(self, C):
        """初始化参数,舍弃0车,假定v0为平衡状态速度,其中1位前车,8为尾车"""
        self.L = 5
        self.C = C
        self.T = 1
        self.a = [0] * 9
        self.v = [20] * 9
        self.x = [0] * 9
        self.s = [self.v[0] * self.T + self.L] * 8
        self.x[8] = 0
        for i in range(8, 1, -1):
            self.x[i - 1] = self.x[i] + self.L + self.v[0] * self.T
        self.acce = []
        self.acce.append(self.a[1:])
        self.speed = []
        self.speed.append(self.v[1:])
        self.disp = []
        self.disp.append(self.x[1:])
        self.gap = []
        self.gap.append(self.s[1:])

    def alter_acce(self):
        if self.a[1] == 0:
            self.a[1] = 6
        # self.a[1] = -self.a[1]

    def get_acce(self):
        for i in range(2, 9):
            self.a[i] = self.C * (self.v[i - 1] - self.v[i])
            self.a[i] = round(self.a[i], 2)

    def get_speed(self):
        for i in range(1, 9):
            self.v[i] = self.v[i] + self.a[i] * self.T
            self.v[i] = round(self.v[i], 2)

    def get_disp(self):
        for i in range(1, 9):
            self.x[i] = self.v[i] * self.T + 0.5 * self.a[i] * self.T * self.T + self.x[i]
            self.x[i] = round(self.x[i], 2)

    def get_gap(self):
        for i in range(1, 8):
            self.s[i] = self.x[i] - self.x[i + 1]
            self.s[i] = round(self.s[i], 2)

    def run(self):
        for i in range(0, 100):
            if i == 0:
                self.alter_acce()
            if i != 0:
                self.a[1] = 0
            self.get_acce()
            self.acce.append(self.a[1:])
            self.get_disp()
            self.disp.append(self.x[1:])
            self.get_speed()
            self.speed.append(self.v[1:])
            self.get_gap()
            self.gap.append(self.s[1:])
            if self.judge_end() <= 7 and self.judge_end() >= 1:
                print("第{}个单位时间的时候第{}辆车和第{}辆车发生了碰撞".format(i + 1, self.judge_end(), self.judge_end() + 1))
                # break
        # self.draw_acce()
        # self.draw_speed()
        # self.draw_disp()
        self.draw_gap()

    def output(self):
        """
        It is for test!
        :return:
        """
        pass

    def judge_end(self):
        for i in range(1, 8):
            if self.x[i] - self.x[i + 1] <= self.L:
                return i
        return 0

    def draw_acce(self):
        new_acce = np.transpose(self.acce)
        plt.title("accelerated speed-time")
        for i in new_acce:
            plt.plot(i)
        plt.ylabel("accelerated velocity m/s^2")
        plt.xlabel("time /T")
        plt.show()

    def draw_speed(self):
        new_speed = np.transpose(self.speed)
        plt.title("speed-time")
        for item in new_speed:
            plt.plot(item)
        plt.ylabel("velocity m/s")
        plt.xlabel("time /T")
        plt.show()

    def draw_disp(self):
        new_disp = np.transpose(self.disp)
        plt.title("displacement-time C={}".format(self.C))
        for item in new_disp:
            plt.plot(item)
        plt.ylabel("displacement m")
        plt.xlabel("time /T")
        plt.show()

    def draw_gap(self):
        plt.title("gap-time C={}".format(self.C))
        plt.axis([0,100,5,80])
        new_gap = np.transpose(self.gap)
        for item in new_gap:
            plt.plot(item)
        plt.ylabel("gap m")
        plt.xlabel("time /T")
        plt.show()


# C = input("请输入C的值:")
for i in range(1,30,3):
    linear = Linear(i/10)
    linear.run()
    print("此时C的值是{},T的值是{}s".format(linear.C, linear.T))

原文发布于微信公众号 - Python与MySQL(Python_Rick)

原文发表时间:2018-11-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

迁移学习:如何将预训练CNN当成特征提取器

深度学习的魅力在于预训练好的模型能够对完全不同的数据集进行分类。这种能力内用了这些深度神经网络结构(在ImageNet数据集上进行过训练)的预训练权重并把其应用...

48860
来自专栏程序员的知识天地

如何用Python实现神奇切图算法seam carving?

我们把时钟拨到 11 年前,2007 年,在第 34 届 SIGGRAPH 2007 数字图形学年会上,以色列的两位教授 Shai Avidan 和 Ariel...

25330
来自专栏机器之心

听说你用JavaScript写代码?本文是你的机器学习指南

40660
来自专栏人工智能LeadAI

C++实现神经网络之一 | Net类的设计和神经网络的初始化

闲言少叙,直接开始 既然是要用C++来实现,那么我们自然而然的想到设计一个神经网络类来表示神经网络,这里我称之为Net类。由于这个类名太过普遍,很有可能跟其他人...

34050
来自专栏AI研习社

自定义损失函数Gradient Boosting

互联网上有很多关于梯度提升的很好的解释(我们在参考资料中分享了一些选择的链接),但是我们注意到很少有人提起自定义损失函数的信息:为什么要自定义损失函数,何时需要...

2.8K30
来自专栏人工智能头条

Google | 用神经网络作画

9820
来自专栏云时之间

什么是自编码?

各位小伙伴们,大家好,今天让我们来如何用神经网络来处理非监督的学习,也就是AutoEncoder,自编码。 首先,我们听到自编码,一定会想到,AutoEncod...

370100
来自专栏小小挖掘机

windows下使用word2vec训练维基百科中文语料全攻略!(三)

训练一个聊天机器人的很重要的一步是词向量训练,无论是生成式聊天机器人还是检索式聊天机器人,都需要将文字转化为词向量,时下最火的词向量训练模型是word2vec,...

38850
来自专栏奇点大数据

Pytorch神器(3)

上次我们的连载讲到用最简便的方法,也就是pip方法安装Pytorch。大家都成功了吧。

15310
来自专栏ATYUN订阅号

【技术】使用深度学习自动为图像添加字幕(PyTorch)

深度学习现在发展十分迅猛,每天都会出现多种应用程序。而想要了解深度学习的最好方法就是亲自动手。尽可能尝试自己做项目。这将帮助你更深入地了解它们,并帮助你成为更好...

14450

扫码关注云+社区

领取腾讯云代金券