SUMO - Simulation of Urban MObility
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
MSCFModel_Krauss.cpp
Go to the documentation of this file.
1
/****************************************************************************/
11
// Krauss car-following model, with acceleration decrease and faster start
12
/****************************************************************************/
13
// SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
14
// Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors
15
/****************************************************************************/
16
//
17
// This file is part of SUMO.
18
// SUMO is free software: you can redistribute it and/or modify
19
// it under the terms of the GNU General Public License as published by
20
// the Free Software Foundation, either version 3 of the License, or
21
// (at your option) any later version.
22
//
23
/****************************************************************************/
24
25
26
// ===========================================================================
27
// included modules
28
// ===========================================================================
29
#ifdef _MSC_VER
30
#include <
windows_config.h
>
31
#else
32
#include <
config.h
>
33
#endif
34
35
#include <
microsim/MSVehicle.h
>
36
#include <
microsim/MSLane.h
>
37
#include "
MSCFModel_Krauss.h
"
38
#include <
microsim/MSAbstractLaneChangeModel.h
>
39
#include <
utils/common/RandHelper.h
>
40
41
42
// ===========================================================================
43
// method definitions
44
// ===========================================================================
45
MSCFModel_Krauss::MSCFModel_Krauss
(
const
MSVehicleType
* vtype,
SUMOReal
accel,
SUMOReal
decel,
46
SUMOReal
dawdle,
SUMOReal
headwayTime)
47
:
MSCFModel_KraussOrig1
(vtype, accel, decel, dawdle, headwayTime) {
48
}
49
50
51
MSCFModel_Krauss::~MSCFModel_Krauss
() {}
52
53
54
SUMOReal
55
MSCFModel_Krauss::followSpeed
(
const
MSVehicle
*
const
/*veh*/
,
SUMOReal
speed,
SUMOReal
gap,
SUMOReal
predSpeed,
SUMOReal
predMaxDecel)
const
{
56
return
MAX2
(
getSpeedAfterMaxDecel
(speed),
MIN2
(
_vsafe
(gap, predSpeed, predMaxDecel),
maxNextSpeed
(speed)));
57
}
58
59
60
SUMOReal
61
MSCFModel_Krauss::stopSpeed
(
const
MSVehicle
*
const
veh,
SUMOReal
gap)
const
{
62
return
MAX2
(
getSpeedAfterMaxDecel
(veh->
getSpeed
()),
MIN2
(
_vsafe
(gap, 0, 0),
maxNextSpeed
(veh->
getSpeed
())));
63
}
64
65
66
SUMOReal
67
MSCFModel_Krauss::dawdle
(
SUMOReal
speed)
const
{
68
// generate random number out of [0,1]
69
SUMOReal
random =
RandHelper::rand
();
70
// Dawdle.
71
if
(speed <
myAccel
) {
72
// we should not prevent vehicles from driving just due to dawdling
73
// if someone is starting, he should definitely start
74
// (but what about slow-to-start?)!!!
75
speed -=
ACCEL2SPEED
(
myDawdle
* speed * random);
76
}
else
{
77
speed -=
ACCEL2SPEED
(
myDawdle
*
myAccel
* random);
78
}
79
return
MAX2
(
SUMOReal
(0), speed);
80
}
81
82
84
SUMOReal
85
MSCFModel_Krauss::_vsafe
(
SUMOReal
gap,
SUMOReal
predSpeed,
SUMOReal
predMaxDecel)
const
{
86
if
(predSpeed == 0) {
87
if
(gap < 0.01) {
88
return
0;
89
}
90
return
(
SUMOReal
)(-
myTauDecel
+ sqrt(
myTauDecel
*
myTauDecel
+ 2. *
myDecel
* gap));
91
}
92
if
(predMaxDecel == 0) {
93
return
(
SUMOReal
)(-
myTauDecel
+ sqrt(
myTauDecel
*
myTauDecel
+ predSpeed * predSpeed + 2. *
myDecel
* gap));
94
}
95
const
SUMOReal
speedReduction =
ACCEL2SPEED
(predMaxDecel);
96
const
int
predSteps =
int
(predSpeed / speedReduction);
97
const
SUMOReal
leaderContrib = 2. *
myDecel
* (gap +
SPEED2DIST
(predSteps * predSpeed - speedReduction * predSteps * (predSteps + 1) / 2));
98
return
(
SUMOReal
)(-
myTauDecel
+ sqrt(
myTauDecel
*
myTauDecel
+ leaderContrib));
99
}
100
101
102
MSCFModel
*
103
MSCFModel_Krauss::duplicate
(
const
MSVehicleType
* vtype)
const
{
104
return
new
MSCFModel_Krauss
(vtype,
myAccel
,
myDecel
,
myDawdle
,
myHeadwayTime
);
105
}
106
107
108
//void MSCFModel::saveState(std::ostream &os) {}
109
build
buildd
sumo-0.15.0~dfsg
src
microsim
cfmodels
MSCFModel_Krauss.cpp
Generated on Wed Jul 18 2012 22:58:32 for SUMO - Simulation of Urban MObility by
1.8.1.1