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-sim.org/
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::setImpatience
(
const
SUMOReal
impatience) {
173
if
(
myOriginalType
!= 0 && impatience < 0) {
174
myParameter
.
impatience
=
myOriginalType
->
getImpatience
();
175
}
else
{
176
myParameter
.
impatience
= impatience;
177
}
178
}
179
180
181
void
182
MSVehicleType::setShape
(
SUMOVehicleShape
shape) {
183
myParameter
.
shape
= shape;
184
}
185
186
187
188
// ------------ Static methods for building vehicle types
189
MSVehicleType
*
190
MSVehicleType::build
(
SUMOVTypeParameter
& from) {
191
MSVehicleType
* vtype =
new
MSVehicleType
(from);
192
MSCFModel
* model = 0;
193
switch
(from.
cfModel
) {
194
case
SUMO_TAG_CF_IDM
:
195
model =
new
MSCFModel_IDM
(vtype,
196
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
197
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
198
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
199
from.
get
(
SUMO_ATTR_CF_IDM_DELTA
, 4.),
200
from.
get
(
SUMO_ATTR_CF_IDM_STEPPING
, .25));
201
break
;
202
case
SUMO_TAG_CF_IDMM
:
203
model =
new
MSCFModel_IDM
(vtype,
204
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
205
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
206
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
207
from.
get
(
SUMO_ATTR_CF_IDMM_ADAPT_FACTOR
, 1.8),
208
from.
get
(
SUMO_ATTR_CF_IDMM_ADAPT_TIME
, 600.),
209
from.
get
(
SUMO_ATTR_CF_IDM_STEPPING
, .25));
210
break
;
211
case
SUMO_TAG_CF_BKERNER
:
212
model =
new
MSCFModel_Kerner
(vtype,
213
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
214
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
215
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
216
from.
get
(
SUMO_ATTR_K
, .5),
217
from.
get
(
SUMO_ATTR_CF_KERNER_PHI
, 5.));
218
break
;
219
case
SUMO_TAG_CF_KRAUSS_ORIG1
:
220
model =
new
MSCFModel_KraussOrig1
(vtype,
221
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
222
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
223
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
224
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
));
225
break
;
226
case
SUMO_TAG_CF_KRAUSS_PLUS_SLOPE
:
227
model =
new
MSCFModel_KraussPS
(vtype,
228
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
229
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
230
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
231
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
));
232
break
;
233
case
SUMO_TAG_CF_SMART_SK
:
234
model =
new
MSCFModel_SmartSK
(vtype,
235
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
236
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
237
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
238
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
239
from.
get
(
SUMO_ATTR_TMP1
,
DEFAULT_VEH_TMP1
),
240
from.
get
(
SUMO_ATTR_TMP2
,
DEFAULT_VEH_TMP2
),
241
from.
get
(
SUMO_ATTR_TMP3
,
DEFAULT_VEH_TMP3
),
242
from.
get
(
SUMO_ATTR_TMP4
,
DEFAULT_VEH_TMP4
),
243
from.
get
(
SUMO_ATTR_TMP5
,
DEFAULT_VEH_TMP5
));
244
break
;
245
case
SUMO_TAG_CF_DANIEL1
:
246
model =
new
MSCFModel_Daniel1
(vtype,
247
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
248
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
249
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
250
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
251
from.
get
(
SUMO_ATTR_TMP1
,
DEFAULT_VEH_TMP1
),
252
from.
get
(
SUMO_ATTR_TMP2
,
DEFAULT_VEH_TMP2
),
253
from.
get
(
SUMO_ATTR_TMP3
,
DEFAULT_VEH_TMP3
),
254
from.
get
(
SUMO_ATTR_TMP4
,
DEFAULT_VEH_TMP4
),
255
from.
get
(
SUMO_ATTR_TMP5
,
DEFAULT_VEH_TMP5
));
256
break
;
257
case
SUMO_TAG_CF_PWAGNER2009
:
258
model =
new
MSCFModel_PWag2009
(vtype,
259
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
260
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
261
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
262
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
),
263
from.
get
(
SUMO_ATTR_CF_PWAGNER2009_TAULAST
, 0.3),
264
from.
get
(
SUMO_ATTR_CF_PWAGNER2009_APPROB
, 0.5));
265
break
;
266
case
SUMO_TAG_CF_WIEDEMANN
:
267
model =
new
MSCFModel_Wiedemann
(vtype,
268
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
269
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
270
from.
get
(
SUMO_ATTR_CF_WIEDEMANN_SECURITY
, 0.5),
271
from.
get
(
SUMO_ATTR_CF_WIEDEMANN_ESTIMATION
, 0.5));
272
break
;
273
case
SUMO_TAG_CF_KRAUSS
:
274
default
:
275
model =
new
MSCFModel_Krauss
(vtype,
276
from.
get
(
SUMO_ATTR_ACCEL
,
DEFAULT_VEH_ACCEL
),
277
from.
get
(
SUMO_ATTR_DECEL
,
DEFAULT_VEH_DECEL
),
278
from.
get
(
SUMO_ATTR_SIGMA
,
DEFAULT_VEH_SIGMA
),
279
from.
get
(
SUMO_ATTR_TAU
,
DEFAULT_VEH_TAU
));
280
break
;
281
}
282
vtype->
myCarFollowModel
= model;
283
return
vtype;
284
}
285
286
287
MSVehicleType
*
288
MSVehicleType::build
(
const
std::string&
id
,
const
MSVehicleType
* from) {
289
MSVehicleType
* vtype =
new
MSVehicleType
(from->
myParameter
);
290
vtype->
myParameter
.
id
= id;
291
vtype->
myCarFollowModel
= from->
myCarFollowModel
->
duplicate
(vtype);
292
vtype->
myOriginalType
= from->
myOriginalType
!= 0 ? from->
myOriginalType
: from;
293
return
vtype;
294
}
295
296
297
/****************************************************************************/
298
build
buildd
sumo-0.18~dfsg
src
microsim
MSVehicleType.cpp
Generated on Wed Oct 23 2013 01:15:10 for SUMO - Simulation of Urban MObility by
1.8.4