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
MSVehicleType.cpp
Go to the documentation of this file.
1
/****************************************************************************/
11
// The car-following model and parameter
12
/****************************************************************************/
13
// SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
14
// Copyright (C) 2001-2013 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 <cassert>
36
#include <
utils/iodevices/BinaryInputDevice.h
>
37
#include <
utils/common/FileHelpers.h
>
38
#include <
utils/common/RandHelper.h
>
39
#include <
utils/common/SUMOVTypeParameter.h
>
40
#include "
MSNet.h
"
41
#include "
cfmodels/MSCFModel_IDM.h
"
42
#include "
cfmodels/MSCFModel_Kerner.h
"
43
#include "
cfmodels/MSCFModel_Krauss.h
"
44
#include "
cfmodels/MSCFModel_KraussOrig1.h
"
45
#include "
cfmodels/MSCFModel_KraussPS.h
"
46
#include "
cfmodels/MSCFModel_SmartSK.h
"
47
#include "
cfmodels/MSCFModel_Daniel1.h
"
48
#include "
cfmodels/MSCFModel_PWag2009.h
"
49
#include "
cfmodels/MSCFModel_Wiedemann.h
"
50
#include "
MSVehicleType.h
"
51
52
#ifdef CHECK_MEMORY_LEAKS
53
#include <
foreign/nvwa/debug_new.h
>
54
#endif // CHECK_MEMORY_LEAKS
55
56
57
// ===========================================================================
58
// method definitions
59
// ===========================================================================
60
MSVehicleType::MSVehicleType
(
const
SUMOVTypeParameter
& parameter)
61
: myParameter(parameter), myOriginalType(0) {
62
assert(
getLength
() > 0);
63
assert(
getMaxSpeed
() > 0);
64
}
65
66
67
MSVehicleType::~MSVehicleType
() {
68
delete
myCarFollowModel
;
69
}
70
71
72
SUMOReal
73
MSVehicleType::computeChosenSpeedDeviation
(
MTRand
& rng)
const
{
74
// for speedDev = 0.1, most 95% of the vehicles will drive between 80% and 120% of speedLimit * speedFactor
75
const
SUMOReal
devA =
MIN2
(
SUMOReal
(2.),
RandHelper::randNorm
(0, 1., rng));
76
// avoid voluntary speeds below 20% of the requested speedFactor
77
return
MAX2
(0.2 *
myParameter
.
speedFactor
,
78
(devA *
myParameter
.
speedDev
+ 1.) *
myParameter
.
speedFactor
);
79
}
80
81
82
// ------------ Setter methods
83
void
84
MSVehicleType::setLength
(
const
SUMOReal
& length) {
85
if
(
myOriginalType
!= 0 && length < 0) {
86
myParameter
.
length
=
myOriginalType
->
getLength
();
87
}
else
{
88
myParameter
.
length
= length;
89
}
90
}
91
92
93
void
94
MSVehicleType::setMinGap
(
const
SUMOReal
& minGap) {
95
if
(
myOriginalType
!= 0 && minGap < 0) {
96
myParameter
.
minGap
=
myOriginalType
->
getMinGap
();
97
}
else
{
98
myParameter
.
minGap
= minGap;
99
}
100
}
101
102
103
void
104
MSVehicleType::setMaxSpeed
(
const
SUMOReal
& maxSpeed) {
105
if
(
myOriginalType
!= 0 && maxSpeed < 0) {
106
myParameter
.
maxSpeed
=
myOriginalType
->
getMaxSpeed
();
107
}
else
{
108
myParameter
.
maxSpeed
= maxSpeed;
109
}
110
}
111
112
113
void
114
MSVehicleType::setVClass
(
SUMOVehicleClass
vclass) {
115
myParameter
.
vehicleClass
= vclass;
116
}
117
118
119
void
120
MSVehicleType::setDefaultProbability
(
const
SUMOReal
& prob) {
121
if
(
myOriginalType
!= 0 && prob < 0) {
122
myParameter
.
defaultProbability
=
myOriginalType
->
getDefaultProbability
();
123
}
else
{
124
myParameter
.
defaultProbability
= prob;
125
}
126
}
127
128
129
void
130
MSVehicleType::setSpeedFactor
(
const
SUMOReal
& factor) {
131
if
(
myOriginalType
!= 0 && factor < 0) {
132
myParameter
.
speedFactor
=
myOriginalType
->
getSpeedFactor
();
133
}
else
{
134
myParameter
.
speedFactor
= factor;
135
}
136
}
137
138
139
void
140
MSVehicleType::setSpeedDeviation
(
const
SUMOReal
& dev) {
141
if
(
myOriginalType
!= 0 && dev < 0) {
142
myParameter
.
speedDev
=
myOriginalType
->
getSpeedDeviation
();
143
}
else
{
144
myParameter
.
speedDev
= dev;
145
}
146
}
147
148
149
void
150
MSVehicleType::setEmissionClass
(
SUMOEmissionClass
eclass) {
151
myParameter
.
emissionClass
= eclass;
152
}
153
154
155
void
156
MSVehicleType::setColor
(
const
RGBColor
& color) {
157
myParameter
.
color
= color;
158
}
159
160
161
void
162
MSVehicleType::setWidth
(
const
SUMOReal
& width) {
163
if
(
myOriginalType
!= 0 && width < 0) {
164
myParameter
.
width
=
myOriginalType
->
getWidth
();
165
}
else
{
166
myParameter
.
width
= width;
167
}
168
}
169
170
171
void
172
MSVehicleType::setShape
(
SUMOVehicleShape
shape) {
173
myParameter
.
shape
= shape;
174
}
175
176
177
178
// ------------ Static methods for building vehicle types
179
MSVehicleType
*
180
MSVehicleType::build
(
SUMOVTypeParameter
& from) {
181
MSVehicleType
* vtype =
new
MSVehicleType
(from);
182
MSCFModel
* model = 0;
183
switch
(from.
cfModel
) {
184
case
SUMO_TAG_CF_IDM
:
185
model =
new
MSCFModel_IDM
(vtype,
186
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
187
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
188
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
189
from.
get
(
SUMO_ATTR_CF_IDM_DELTA
, 4.),
190
from.
get
(
SUMO_ATTR_CF_IDM_STEPPING
, .25));
191
break
;
192
case
SUMO_TAG_CF_IDMM
:
193
model =
new
MSCFModel_IDM
(vtype,
194
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
195
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
196
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
197
from.
get
(
SUMO_ATTR_CF_IDMM_ADAPT_FACTOR
, 1.8),
198
from.
get
(
SUMO_ATTR_CF_IDMM_ADAPT_TIME
, 600.),
199
from.
get
(
SUMO_ATTR_CF_IDM_STEPPING
, .25));
200
break
;
201
case
SUMO_TAG_CF_BKERNER
:
202
model =
new
MSCFModel_Kerner
(vtype,
203
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
204
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
205
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
206
from.
get
(
SUMO_ATTR_K
, .5),
207
from.
get
(
SUMO_ATTR_CF_KERNER_PHI
, 5.));
208
break
;
209
case
SUMO_TAG_CF_KRAUSS_ORIG1
:
210
model =
new
MSCFModel_KraussOrig1
(vtype,
211
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
212
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
213
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
214
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
));
215
break
;
216
case
SUMO_TAG_CF_KRAUSS_PLUS_SLOPE
:
217
model =
new
MSCFModel_KraussPS
(vtype,
218
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
219
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
220
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
221
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
));
222
break
;
223
case
SUMO_TAG_CF_SMART_SK
:
224
model =
new
MSCFModel_SmartSK
(vtype,
225
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
226
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
227
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
228
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
229
from.
get
(
SUMO_ATTR_TMP1
,
DEFAULT_VEH_TMP1
),
230
from.
get
(
SUMO_ATTR_TMP2
,
DEFAULT_VEH_TMP2
),
231
from.
get
(
SUMO_ATTR_TMP3
,
DEFAULT_VEH_TMP3
),
232
from.
get
(
SUMO_ATTR_TMP4
,
DEFAULT_VEH_TMP4
),
233
from.
get
(
SUMO_ATTR_TMP5
,
DEFAULT_VEH_TMP5
));
234
break
;
235
case
SUMO_TAG_CF_DANIEL1
:
236
model =
new
MSCFModel_Daniel1
(vtype,
237
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
238
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
239
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
240
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
241
from.
get
(
SUMO_ATTR_TMP1
,
DEFAULT_VEH_TMP1
),
242
from.
get
(
SUMO_ATTR_TMP2
,
DEFAULT_VEH_TMP2
),
243
from.
get
(
SUMO_ATTR_TMP3
,
DEFAULT_VEH_TMP3
),
244
from.
get
(
SUMO_ATTR_TMP4
,
DEFAULT_VEH_TMP4
),
245
from.
get
(
SUMO_ATTR_TMP5
,
DEFAULT_VEH_TMP5
));
246
break
;
247
case
SUMO_TAG_CF_PWAGNER2009
:
248
model =
new
MSCFModel_PWag2009
(vtype,
249
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
250
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
251
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
252
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
253
from.
get
(
SUMO_ATTR_CF_PWAGNER2009_TAULAST
, 0.3),
254
from.
get
(
SUMO_ATTR_CF_PWAGNER2009_APPROB
, 0.5));
255
break
;
256
case
SUMO_TAG_CF_WIEDEMANN
:
257
model =
new
MSCFModel_Wiedemann
(vtype,
258
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
259
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
260
from.
get
(
SUMO_ATTR_CF_WIEDEMANN_SECURITY
, 0.5),
261
from.
get
(
SUMO_ATTR_CF_WIEDEMANN_ESTIMATION
, 0.5));
262
break
;
263
case
SUMO_TAG_CF_KRAUSS
:
264
default
:
265
model =
new
MSCFModel_Krauss
(vtype,
266
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
267
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
268
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
269
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
));
270
break
;
271
}
272
vtype->
myCarFollowModel
= model;
273
return
vtype;
274
}
275
276
277
MSVehicleType
*
278
MSVehicleType::build
(
const
std::string&
id
,
const
MSVehicleType
* from) {
279
MSVehicleType
* vtype =
new
MSVehicleType
(from->
myParameter
);
280
vtype->
myParameter
.
id
= id;
281
vtype->
myCarFollowModel
= from->
myCarFollowModel
->
duplicate
(vtype);
282
vtype->
myOriginalType
= from->
myOriginalType
!= 0 ? from->
myOriginalType
: from;
283
return
vtype;
284
}
285
286
287
/****************************************************************************/
288
home
gladk
tmp
05
sumo-0.17.1~dfsg
src
microsim
MSVehicleType.cpp
Generated on Sun Jun 16 2013 07:07:45 for SUMO - Simulation of Urban MObility by
1.8.1.2