def mainroad_newveh(self, vehid, *args): cf_p, lc_p = IDM_parameters() kwargs = { 'route': ['exit'], 'maxspeed': cf_p[0] - 1e-6, 'relax_parameters': 15, 'shift_parameters': [-1.5, 1.5] } self.newveh = hs.Vehicle(vehid, self, cf_p, lc_p, **kwargs)
def mainroad_newveh(self, vehid, *args): if np.random.rand() < split_ratio: route = ['road 2', 'exit'] else: route = ['road 3', 'exit 2'] cf_p = [35, 1.3, 2, 1.1, 1.5] lc_p = [-8, -20, .6, .1, 0, .2, .1, 20, 20] kwargs = {'route': route, 'maxspeed': cf_p[0]-1e-6, 'relax_parameters':8.7, 'shift_parameters': [-2, 2], 'hdbounds':(cf_p[2]+1e-6, 1e4)} self.newveh = hs.Vehicle(vehid, self, cf_p, lc_p, **kwargs)
def mainroad_newveh(self, vehid, *args): cf_p, lc_p = IDM_parameters() kwargs = { 'route': ['exit'], 'maxspeed': cf_p[0] - 1e-6, 'relax_parameters': 8.7, 'shift_parameters': [-2, 2], 'hdbounds': (cf_p[2] + 1e-6, 1e4) } self.newveh = hs.Vehicle(vehid, self, cf_p, lc_p, **kwargs)
speed_limit=[0, 50], show_ID=False) #%% havsim.plotting.animatetvhd(meas, None, platooninfo, [998, 1013]) #%% FD plots import havsim.simulation as hs from havsim.simulation.simulation_models import OVMVehicle import math import numpy as np import matplotlib.pyplot as plt from havsim.simulation.models import IDM_parameters #IDM spd-hd, flow-density cf_p, unused = IDM_parameters() tempveh = hs.Vehicle(-1, None, cf_p, None, maxspeed=cf_p[0] - 1e-6) spds = np.arange(0, cf_p[0], .01) hds = np.array([tempveh.get_eql(i, input_type='v') for i in spds]) fig, ax = plt.subplots() plt.plot(hds, spds, 'C0') plt.ylabel('speed (m/s)') plt.xlabel('headway (m)') flows = np.array([tempveh.get_flow(i) for i in spds]) density = np.divide(flows, spds) fig, ax2 = plt.subplots() plt.plot(density * 1000, flows * 3600) plt.ylabel('flow (veh/hr)') plt.xlabel('density (veh/km)') #OVM spd-hd, flow-density
""" Script for measuring time to equilibrium for different LC situations """ from havsim.simulation.models import IDM_parameters import havsim.simulation as hs import matplotlib.pyplot as plt cf_p, unused = IDM_parameters() relaxp = 15 leadveh = hs.Vehicle(-1, None, cf_p, None, maxspeed=cf_p[0] - 1e-6) folveh = hs.Vehicle(0, None, cf_p, None, maxspeed=cf_p[0] - 1e-6, relax_parameters=relaxp) leadspeed = 29 #speed of 29 and headway of 30 choosen to represent typical merging scenario at maximum capacity for the IDM parameters = [33.5, 1.3, 3, 1.1, 1.5] inithd = 30 initrelax = leadveh.get_eql( leadspeed) - inithd # this the relax amount as calculated in set_relax leadveh.posmem = [] leadveh.speedmem = [] leadveh.pos = 0 leadveh.speed = leadspeed leadveh.acc = 0 folveh.leadmem = [( leadveh, None, ), (None, None)] #oldv = newv = leadspeed
#inflow amounts def onramp_inflow(timeind, *args): # return .06 + np.random.rand()/25 return .1 def mainroad_inflow(*args): # return .43 + np.random.rand()*24/100 return .48 #outflow using speed series tempveh = hs.Vehicle(-1, None, [30, 1.1, 3, 1.1, 1.5], None, maxspeed=30 - 1e-6) outspeed = tempveh.inv_flow(.48, congested=False) inspeed, inhd = tempveh.inv_flow(.48, output_type='both', congested=True) inspeedramp, inhd = tempveh.inv_flow(.07, output_type='both', congested=True) def mainroad_outflow(*args): return outspeed def speed_inflow(*args): return inspeed def speed_inflow_ramp(*args):
def newveh(vehid, *args): cf_p = IDM_parameters unused, lc_p = hs.models.IDM_parameters() kwargs = {'route': ['exit'], 'maxspeed':cf_p[0], 'length':5} return hs.Vehicle(vehid, mainroad[0], cf_p, lc_p, **kwargs)
nveh = 1000 # number of vehicles dt = .25 # timestep in seconds acc_tolerance = 1e-3 # acc tolerance for adding new vehicles speed_tolerance = 1e-1 # speed tolerance for subtracting vehicles # define speed profile of initial vehicle def downstream(timeind, *args): if timeind < 10: # if timeind < 200: # if False: return eql_speed-3 else: return eql_speed # define initial headway of the first following vehicle init_hd = hs.Vehicle(-1, None, IDM_parameters, None, length=5).get_eql(eql_speed) # to add noise, uncomment code marked as acceleration noise #%% mainroad_len= 1e10 mainroad = hs.Road(1,mainroad_len, 'main road') mainroad.connect('exit', is_exit=True) mainroad.set_downstream({'method':'speed', 'time_series':downstream}) def newveh(vehid, *args): cf_p = IDM_parameters unused, lc_p = hs.models.IDM_parameters() kwargs = {'route': ['exit'], 'maxspeed':cf_p[0], 'length':5} return hs.Vehicle(vehid, mainroad[0], cf_p, lc_p, **kwargs) def make_waves(): """Simulates the evolution of a traffic wave initiated by downstream over nveh vehicles.
def newveh(self, vehid, *args): cf_p = [35, 1.3, 2, 1.1, 1.5] lc_p = [-8, -20, .6, .1, 0, .2, .1, 20, 20] kwargs = {'route': route.copy(), 'maxspeed': cf_p[0]-1e-6, 'relax_parameters':8.7, 'shift_parameters': [-2, 2], 'hdbounds':(cf_p[2]+1e-6, 1e4)} self.newveh = hs.Vehicle(vehid, self, cf_p, lc_p, **kwargs)
dt = .25 # timestep in seconds # define speed profile of lead vehicle def downstream(timeind, *args): if timeind < 50: return eql_speed - 25 else: return eql_speed #%% Plot the equiliibrum solution FD and selected equiliibrum point tempveh = hs.Vehicle(-1, None, IDM_parameters, None, maxspeed=IDM_parameters[0], length=5) spds = np.arange(0, IDM_parameters[0], .01) flows = np.array([tempveh.get_flow(i) for i in spds]) density = np.divide(flows, spds) plt.figure() plt.plot( density * 1000, flows * 3600, ) # convert to units of km, hours plt.plot( tempveh.get_flow(eql_speed) / eql_speed * 1000, tempveh.get_flow(eql_speed) * 3600, 'ko') #%% Define and run simulation