Eclipse SUMO - Simulation of Urban MObility
ODMatrix.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3// Copyright (C) 2006-2022 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
20// An O/D (origin/destination) matrix
21/****************************************************************************/
22#pragma once
23#include <config.h>
24
25#include <iostream>
26#include <sstream>
27#include <fstream>
28#include <vector>
29#include <cstdlib>
30#include <ctime>
31#include <algorithm>
32#include <set>
33#include <string>
35#include "ODCell.h"
36#include "ODDistrictCont.h"
41
42// ===========================================================================
43// class declarations
44// ===========================================================================
45class OptionsCont;
46class OutputDevice;
47class SUMOSAXHandler;
48
49
50// ===========================================================================
51// class definitions
52// ===========================================================================
69
70public:
75 ODMatrix(const ODDistrictCont& dc, double scale);
76
77
79 ~ODMatrix();
80
81
103 bool add(double vehicleNumber, const std::pair<SUMOTime, SUMOTime>& beginEnd,
104 const std::string& origin, const std::string& destination,
105 const std::string& vehicleType,
106 const bool originIsEdge = false, const bool destinationIsEdge = false,
107 bool noScaling = false);
108
120 bool add(const std::string& id, const SUMOTime depart,
121 const std::string& fromTaz, const std::string& toTaz,
122 const std::string& vehicleType,
123 const bool originIsEdge = false, const bool destinationIsEdge = false);
124
132 void writeDefaultAttrs(OutputDevice& dev, const bool noVtype,
133 const ODCell* const cell);
134
162 void write(SUMOTime begin, const SUMOTime end,
163 OutputDevice& dev, const bool uniform,
164 const bool differSourceSink, const bool noVtype,
165 const std::string& prefix, const bool stepLog,
166 bool pedestrians, bool persontrips,
167 const std::string& modes);
168
169
181 void writeFlows(const SUMOTime begin, const SUMOTime end,
182 OutputDevice& dev, const bool noVtype,
183 const std::string& prefix,
184 bool asProbability = false, bool pedestrians = false, bool persontrips = false,
185 const std::string& modes = "");
186
187
194 double getNumLoaded() const;
195
196
203 double getNumWritten() const;
204
205
212 double getNumDiscarded() const;
213
214
218 void applyCurve(const Distribution_Points& ps);
219
220
224 void readO(LineReader& lr, double scale,
225 std::string vehType, bool matrixHasVehType);
226
230 void readV(LineReader& lr, double scale,
231 std::string vehType, bool matrixHasVehType);
232
236 void loadMatrix(OptionsCont& oc);
237
241 void loadRoutes(OptionsCont& oc, SUMOSAXHandler& handler);
242
246 Distribution_Points parseTimeLine(const std::vector<std::string>& def, bool timelineDayInHours);
247
248 const std::vector<ODCell*>& getCells() {
249 return myContainer;
250 }
251
252 void sortByBeginTime();
253
255 return myBegin;
256 }
257
258 SUMOTime getEnd() const {
259 return myEnd;
260 }
261
262 void addTazRelWeight(const std::string intervalID, const std::string& from, const std::string& to,
263 double val, double beg, double end);
264
265protected:
270 struct ODVehicle {
272 std::string id;
278 std::string from;
280 std::string to;
281
282 };
283
284
310 double computeDeparts(ODCell* cell,
311 int& vehName, std::vector<ODVehicle>& into,
312 const bool uniform, const bool differSourceSink,
313 const std::string& prefix);
314
315
331 void applyCurve(const Distribution_Points& ps, ODCell* cell,
332 std::vector<ODCell*>& newCells);
333
334
335private:
339 std::string getNextNonCommentLine(LineReader& lr);
340
344 SUMOTime parseSingleTime(const std::string& time);
345
349 std::pair<SUMOTime, SUMOTime> readTime(LineReader& lr);
350
354 double readFactor(LineReader& lr, double scale);
355
356
357private:
359 std::vector<ODCell*> myContainer;
360
362 std::map<const std::pair<const std::string, const std::string>, std::vector<ODCell*> > myShortCut;
363
366
368 std::set<std::string> myMissingDistricts;
369
372
375
378
381
383 std::string myVType;
384
386 double myScale;
387
393 public:
396
397
408 int operator()(ODCell* p1, ODCell* p2) const {
409 if (p1->begin == p2->begin) {
410 if (p1->origin == p2->origin) {
411 return p1->destination < p2->destination;
412 }
413 return p1->origin < p2->origin;
414 }
415 return p1->begin < p2->begin;
416 }
417
418 };
419
420
429 public:
432
433
442 bool operator()(const ODVehicle& p1, const ODVehicle& p2) const {
443 if (p1.depart == p2.depart) {
444 return p1.id > p2.id;
445 }
446 return p1.depart > p2.depart;
447 }
448
449 };
450
451private:
454
456 ODMatrix& operator=(const ODMatrix& s) = delete;
457
458};
long long int SUMOTime
Definition: GUI.h:36
Retrieves a file linewise and reports the lines to a handler.
Definition: LineReader.h:48
A container for districts.
Used for sorting the cells by the begin time they describe.
Definition: ODMatrix.h:392
int operator()(ODCell *p1, ODCell *p2) const
Comparing operator.
Definition: ODMatrix.h:408
Used for sorting vehicles by their departure (latest first)
Definition: ODMatrix.h:428
bool operator()(const ODVehicle &p1, const ODVehicle &p2) const
Comparing operator.
Definition: ODMatrix.h:442
An O/D (origin/destination) matrix.
Definition: ODMatrix.h:68
const std::vector< ODCell * > & getCells()
Definition: ODMatrix.h:248
SUMOTime myEnd
Definition: ODMatrix.h:380
double getNumLoaded() const
Returns the number of loaded vehicles.
Definition: ODMatrix.cpp:595
void readV(LineReader &lr, double scale, std::string vehType, bool matrixHasVehType)
read a VISUM-matrix with the V Format
Definition: ODMatrix.cpp:481
void sortByBeginTime()
Definition: ODMatrix.cpp:752
double readFactor(LineReader &lr, double scale)
Definition: ODMatrix.cpp:469
double computeDeparts(ODCell *cell, int &vehName, std::vector< ODVehicle > &into, const bool uniform, const bool differSourceSink, const std::string &prefix)
Computes the vehicle departs stored in the given cell and saves them in "into".
Definition: ODMatrix.cpp:164
void addTazRelWeight(const std::string intervalID, const std::string &from, const std::string &to, double val, double beg, double end)
Definition: ODMatrix.cpp:703
SUMOTime myBegin
parsed time bounds
Definition: ODMatrix.h:380
~ODMatrix()
Destructor.
Definition: ODMatrix.cpp:62
SUMOTime parseSingleTime(const std::string &time)
Definition: ODMatrix.cpp:439
double myScale
the scaling factor for traffic
Definition: ODMatrix.h:386
void writeFlows(const SUMOTime begin, const SUMOTime end, OutputDevice &dev, const bool noVtype, const std::string &prefix, bool asProbability=false, bool pedestrians=false, bool persontrips=false, const std::string &modes="")
Writes the flows stored in the matrix.
Definition: ODMatrix.cpp:338
void applyCurve(const Distribution_Points &ps)
Splits the stored cells dividing them on the given time line.
Definition: ODMatrix.cpp:629
SUMOTime getEnd() const
Definition: ODMatrix.h:258
std::map< const std::pair< const std::string, const std::string >, std::vector< ODCell * > > myShortCut
The loaded cells indexed by origin and destination.
Definition: ODMatrix.h:362
std::pair< SUMOTime, SUMOTime > readTime(LineReader &lr)
Definition: ODMatrix.cpp:450
void readO(LineReader &lr, double scale, std::string vehType, bool matrixHasVehType)
read a VISUM-matrix with the O Format
Definition: ODMatrix.cpp:550
ODMatrix & operator=(const ODMatrix &s)=delete
invalid assignment operator
std::set< std::string > myMissingDistricts
The missing districts already warned about.
Definition: ODMatrix.h:368
void write(SUMOTime begin, const SUMOTime end, OutputDevice &dev, const bool uniform, const bool differSourceSink, const bool noVtype, const std::string &prefix, const bool stepLog, bool pedestrians, bool persontrips, const std::string &modes)
Writes the vehicles stored in the matrix assigning the sources and sinks.
Definition: ODMatrix.cpp:232
const ODDistrictCont & myDistricts
The districts to retrieve sources/sinks from.
Definition: ODMatrix.h:365
Distribution_Points parseTimeLine(const std::vector< std::string > &def, bool timelineDayInHours)
split the given timeline
Definition: ODMatrix.cpp:727
ODMatrix(const ODDistrictCont &dc, double scale)
Constructor.
Definition: ODMatrix.cpp:51
void writeDefaultAttrs(OutputDevice &dev, const bool noVtype, const ODCell *const cell)
Helper function for flow and trip output writing the depart and arrival attributes.
Definition: ODMatrix.cpp:203
double myNumLoaded
Number of loaded vehicles.
Definition: ODMatrix.h:371
double myNumWritten
Number of written vehicles.
Definition: ODMatrix.h:374
SUMOTime getBegin() const
Definition: ODMatrix.h:254
bool add(double vehicleNumber, const std::pair< SUMOTime, SUMOTime > &beginEnd, const std::string &origin, const std::string &destination, const std::string &vehicleType, const bool originIsEdge=false, const bool destinationIsEdge=false, bool noScaling=false)
Builds a single cell from the given values, verifying them.
Definition: ODMatrix.cpp:74
void loadMatrix(OptionsCont &oc)
read a matrix in one of several formats
Definition: ODMatrix.cpp:642
void loadRoutes(OptionsCont &oc, SUMOSAXHandler &handler)
read SUMO routes
Definition: ODMatrix.cpp:710
double getNumWritten() const
Returns the number of written vehicles.
Definition: ODMatrix.cpp:601
std::vector< ODCell * > myContainer
The loaded cells.
Definition: ODMatrix.h:359
double myNumDiscarded
Number of discarded vehicles.
Definition: ODMatrix.h:377
double getNumDiscarded() const
Returns the number of discarded vehicles.
Definition: ODMatrix.cpp:607
std::string myVType
user-defined vType
Definition: ODMatrix.h:383
ODMatrix(const ODMatrix &s)
invalid copy constructor
std::string getNextNonCommentLine(LineReader &lr)
Definition: ODMatrix.cpp:427
A storage for options typed value containers)
Definition: OptionsCont.h:89
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
Interface for a class which obtains read weights for named edges.
SAX-handler base for SUMO-files.
A single O/D-matrix cell.
Definition: ODCell.h:48
std::string destination
Name of the destination district.
Definition: ODCell.h:62
std::string origin
Name of the origin district.
Definition: ODCell.h:59
SUMOTime begin
The begin time this cell describes.
Definition: ODCell.h:53
An internal representation of a single vehicle.
Definition: ODMatrix.h:270
SUMOTime depart
The departure time of the vehicle.
Definition: ODMatrix.h:274
std::string from
The edge the vehicles shall start at.
Definition: ODMatrix.h:278
ODCell * cell
The cell of the ODMatrix which generated the vehicle.
Definition: ODMatrix.h:276
std::string to
The edge the vehicles shall end at.
Definition: ODMatrix.h:280
std::string id
The id of the vehicle.
Definition: ODMatrix.h:272