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