计算车道中混合交通流的车队强度,首先我们分为三步走:第一步,建立初始交通流列表;第二步,随机化;第三步,计算车队强度。其中车队强度越高,车流的平均车头时距(headway)越小,更有利于交通。直接上代码:
import random
# 第一步,首先按照CAVs的渗透率来建立初始车辆列表
car_num = 10 # 输入1:车辆数量
cav_Per = 0.50 # 输入2:CAVs渗透率
CAVs_num = int(car_num*cav_Per) # 联网自动车辆的数量
HDVs_num = car_num - CAVs_num # 人工驾驶车辆的数量
flow_list1 = [] # 车道1的混合交通流
for i in range(car_num):
if i < HDVs_num:
flow_list1.append(0)
else:
flow_list1.append(1)
print(flow_list1) # 先生成一个未打乱的混合交通流
# 第二步,随机化
mixed_flow_list1 = flow_list1.copy() # 创建数组副本
random.shuffle(mixed_flow_list1) # 考虑随机化的车排长度
print(mixed_flow_list1)
# 第三步:计算车排强度(这里也是my paper中的一个公式)
p_str = 0 # 初始车排强度
T_CC = 0.9 # 三种跟车模式,分别是cav跟随cav、cav跟随hdv、hdv跟随车辆
T_CH = 1.2
T_HH = 1.5
for i in range(0, len(mixed_flow_list1)):
# 遍历车辆数
if i == len(mixed_flow_list1)-1:
# 如果是第一辆车
if mixed_flow_list1[i] == 1:
p_str = p_str + mixed_flow_list1[i]*T_CC
else:
p_str = p_str + mixed_flow_list1[i] * T_HH
else:
# case1:后车为hdv
if mixed_flow_list1[i] == 0:
p_str = p_str + mixed_flow_list1[i]*T_HH
# case2:cav跟随cav
elif mixed_flow_list1[i] + mixed_flow_list1[i+1] == 2:
p_str = p_str + mixed_flow_list1[i] * T_CC
# case3:cav跟随hdv
elif mixed_flow_list1[i] == 1 and mixed_flow_list1[i+1] == 0:
p_str = p_str + mixed_flow_list1[i] * T_CH
# 该车道车辆的车排强度。车排强度越大,车道中的平均车头时距越小
S_platoon = round(len(mixed_flow_list1)/p_str, 2)
print(S_platoon)