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)
Пример #2
0
 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)
Пример #3
0
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)
Пример #4
0
                            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
Пример #5
0
"""
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):
Пример #7
0
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)
Пример #8
0
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.
Пример #9
0
 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)
Пример #10
0
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