Python是世界上最好的语言。
import random
import math
a0 = 6 # 车的正常加速度m/s^2
MAX_SPEED = 36 # 最大行驶速度m/s
L = 10 # 停车安全距离m
v0 = 20 # 车辆平均行驶速度,可视为车辆正常情况下速度m/s
scenes = ['被抢道', '跟驰', '停车启动', '随行', '靠近', '停车']
# 不会改变的参数
"""
在整个过程,前车与后车正常减速相同
"""
def action(scene, v1, v2): # 实际操作
t = 10 # 假设场景持续时间
a1 = 0
"""
对六种微观场景进行参数改变
"""
if scene == scenes[0]: # 被抢道的参数改变
x2 = 0
x1 = random.uniform(L, s0 - L)
v1 = v0
v2 = v0
a1 = 0
if scene == scenes[1]: # 跟驰的参数改变
x2 = 0
x1 = x2 + v2 * T
v1 = v0
v2 = v0
if random.random() < 1 / 2: # 随机生成加速和减速两种跟驰场景
a1 = a0
if random.random() >= 1 / 2:
a1 = -a0
if scene == scenes[2]: # 停车起步的参数改变
a1 = a0
v1 = 0
v2 = 0
x2 = 0
x1 = x2 + v2 * T
if scene == scenes[3]: # 随行的参数改变
v1 = v0
v2 = v0
x2 = 0
x1 = x2 + v2 * T
a1 = a0
if scene == scenes[4]: # 靠近的参数改变
v1 = random.randint(0, v0)
a1 = a0
v2 = v0
x2 = 0
x1 = x2 + v2 * T
if scene == scenes[5]: # 停车的参数改变
v1 = v0
v2 = v0
a1 = -a0
x2 = 0
x1 = x2 + v2 * T
if v1 <= 0:
v1 = 0
if v2 <= 0:
v2 = 0
for i in range(0, t):
if x1 - x2 < 125:
a2 = ld * (v1 - v2) # 车头间距受到前车影响
if i != 0:
v2 = v2 + a2 * T
v1 = v1 + a1 * T
if i == 0:
x1 = L + v2 * T
x1 = x1 + v1 * T
x2 = x2 + v2 * T
if math.fabs(v1 - v2) <= 0.2: # 车速差距较小,结束循环,以速度相等作为结束的标志
return v1, v2, x1, x2
if v2 > MAX_SPEED: # 后车车速大于MAX_SPEED,结束迭代
return v1, v2, x1, x2
if v1 <= 0:
v1 = 0
return v1, v2, x1, x2
if v2 <= 0:
v2 = 0 # 任何一个值为0,结束迭代
return v1, v2, x1, x2
return v1, v2, x1, x2 # 定义各部分迭代结束
for i in range(0, 100): # 定义输出情况个数
state = True # 定义初运行正常
v1, v2 = v0, v0 # v1前车速度 v2后车速度
a1, a2 = a0, a0 # 前车加速度m/s^2 后车加速度m/s^2
T = random.random() + 0.2 # 时间间隔,即反应时间s,设定为0.2s-1.2s
C = random.random() * 2 # 设定C的值为0-2
ld = C / T # 反应强度λ
if ld > 1 or ld < 0.1:
continue # 剔除太小的反应强度值
x2 = 0
x1 = x2 + v2 * T # 设定初始前后车间距
s0 = L + v2 * T # 车辆以正常速度行驶状态中的车头间距m,安全距离
scene = random.choice(scenes) # 随机产生场景
v1, v2, x1, x2 = action(scene, v1, v2)
print("------------\n")
if v2 > MAX_SPEED:
state = False
print("按照此模型,{}将可能导致后车速度超过了最大限制".format(scene))
if v2 * T + L > x1 - x2:
state = False
print("按照此模型,{}将可能导致车辆相撞".format(scene))
print("此时λ的值:{:.3} T的值:{:.3}".format(ld, T))
if state:
print("可以正常运行")
else:
print("模型在该情况出错")
print("运行一段时间后各参数的值:v1:{}m/s v2:{}m/s x1:{}m x2:{}m".format(round(v1, 2), round(v2, 2), round(x1, 2),
round(x2, 2)))
本文分享自 Python与MySQL 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!