53 #ifdef CHECK_MEMORY_LEAKS 55 #endif // CHECK_MEMORY_LEAKS 70 const std::string& aXMLFilename,
71 const std::string& outputFilename,
74 const bool addLaneMeanData) :
77 myEdge(edge), myPos(pos), myProbe(probe),
78 myEdgeMeanData(0, length, false, 0),
79 myOutput(0), myFrequency(freq), myRemoved(0),
80 myInserted(0), myClearedInJam(0),
81 mySpeedIsDefault(true), myDidSpeedAdaption(false), myDidInit(false),
82 myDefaultSpeed(myEdge->getSpeedLimit()),
83 myHaveWarnedAboutClearingJam(false),
85 if (outputFilename !=
"") {
89 if (aXMLFilename !=
"") {
95 if (addLaneMeanData) {
155 if (state.
begin < lastEnd) {
156 WRITE_ERROR(
"Overlapping or unsorted intervals in calibrator '" +
myID +
"'.");
174 WRITE_ERROR(
"Mandatory attribute missing in definition of calibrator '" +
myID +
"'.");
176 WRITE_ERROR(
"Non-numeric value for numeric attribute in definition of calibrator '" +
myID +
"'.");
178 if (state.
q < 0 && state.
v < 0) {
179 WRITE_ERROR(
"Either 'vehsPerHour' or 'speed' has to be given in flow definition of calibrator '" +
myID +
"'.");
210 assert(discrepancy >= 0);
211 const std::string ds = (discrepancy > 0 ?
"\" vaporizedOnNextEdge=\"" +
toString(discrepancy) :
"");
215 "\" id=\"" <<
myID <<
216 "\" nVehContrib=\"" << p <<
220 "\" flow=\"" << p * 3600.0 / durationSeconds <<
270 WRITE_WARNING(
"Calibrator '" +
getID() +
"' could not remove vehicle '" + *it +
"'.");
314 #ifdef MSCalibrator_DEBUG 317 <<
" totalWished=" << totalWishedNum
318 <<
" adapted=" << adaptedNum
328 if (calibrateFlow && adaptedNum < totalWishedNum && !hadRemovals) {
336 const int insertionSlack =
MAX2(0, adaptedNum + relaxedInsertion - totalWishedNum);
338 #ifdef MSCalibrator_DEBUG 340 <<
" wished:" << wishedNum
341 <<
" slack:" << insertionSlack
342 <<
" before:" << adaptedNum
345 while (wishedNum > adaptedNum + insertionSlack) {
359 const int routeIndex = (int)std::distance(route->
begin(),
362 assert(route != 0 && vtype != 0);
366 newPars->
depart = currentTime;
369 newPars, route, vtype,
true,
false));
370 #ifdef MSCalibrator_DEBUG 371 std::cout <<
" resetting route pos: " << routeIndex <<
"\n";
376 throw ProcessError(
"Emission of vehicle '" + vehicle->
getID() +
"' in calibrator '" +
getID() +
"'failed!");
380 #ifdef MSCalibrator_DEBUG 385 #ifdef MSCalibrator_DEBUG 412 for (
int i = 0; i < numLanes; ++i) {
421 if (lane->getVehicleNumber() < 4) {
436 for (
int i = 0; i < numLanes; ++i) {
443 MSVehicle* last = lane->getLastFullVehicle();
473 for (std::vector<MSMeanData_Net::MSLaneMeanDataValues*>::iterator it =
myLaneMeanData.begin();
483 if (myParent->isActive()) {
484 myParent->updateMeanData();
485 const bool calibrateFlow = myParent->myCurrentStateInterval->q >= 0;
486 const int totalWishedNum = myParent->totalWished();
487 int adaptedNum = myParent->passed() + myParent->myClearedInJam;
489 if (calibrateFlow && adaptedNum > totalWishedNum) {
490 #ifdef MSCalibrator_DEBUG 492 <<
" vaporizing " << vehicle->
getID() <<
" to reduce flow\n";
494 if (myParent->scheduleRemoval(vehicle)) {
495 myParent->myRemoved++;
497 }
else if (myParent->invalidJam(myLaneIndex)) {
498 #ifdef MSCalibrator_DEBUG 500 <<
" vaporizing " << vehicle->
getID() <<
" to clear jam\n";
502 if (!myParent->myHaveWarnedAboutClearingJam) {
503 WRITE_WARNING(
"Clearing jam at calibrator '" + myParent->myID +
"' at time " 505 myParent->myHaveWarnedAboutClearingJam =
true;
507 if (myParent->scheduleRemoval(vehicle)) {
508 myParent->myClearedInJam++;
bool insertVehicle(SUMOVehicle &v, SUMOTime time, const bool checkOnly=false) const
Tries to insert the given vehicle into the network.
MSCalibrator(const std::string &id, const MSEdge *const edge, const SUMOReal pos, const std::string &aXMLFilename, const std::string &outputFilename, const SUMOTime freq, const SUMOReal length, const MSRouteProbe *probe, const bool addLaneMeanData=true)
int nVehEntered
The number of vehicles that entered this lane within the sample interval.
Representation of a vehicle in the micro simulation.
virtual void deleteVehicle(SUMOVehicle *v, bool discard=false)
Deletes the vehicle.
std::string vtypeid
The vehicle's type id.
int nVehVaporized
The number of vehicles that left this lane within the sample interval.
const MSRoute * getRoute() const
MSLane * getLane() const
Returns the lane the vehicle is on.
static std::vector< SUMOVehicleParameter * > LeftoverVehicleParameters
virtual int passed() const
virtual void myEndElement(int element)
Called on the closing of a tag;.
Writes routes of vehicles passing a certain edge.
DepartLaneDefinition departLaneProcedure
Information how the vehicle shall choose the lane to depart from.
bool myDidSpeedAdaption
The information whether speed was adapted in the current interval.
static SUMOVehicleParameter * parseVehicleAttributes(const SUMOSAXAttributes &attrs, const bool optionalID=false, const bool skipDepart=false, const bool isPerson=false)
Parses a vehicle's attributes.
SUMOVehicle * getVehicle(const std::string &id) const
Returns the vehicle with the given id.
virtual bool notifyEnter(SUMOVehicle &veh, Notification reason)
Checks whether the reminder is activated by a vehicle entering the lane.
Notification
Definition of a vehicle state.
std::string time2string(SUMOTime t)
bool myAmActive
whether the calibrator was active when last checking
virtual MSVehicle * removeVehicle(MSVehicle *remVehicle, MSMoveReminder::Notification notification, bool notify=true)
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
bool myDidInit
The information whether init was called.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
The vehicle got vaporized.
virtual bool addVehicle(const std::string &id, SUMOVehicle *v)
Tries to insert the vehicle into the internal vehicle container.
const std::string & getID() const
Returns the id.
SUMOTime myFrequency
The frequeny with which to check for calibration.
int myRemoved
The number of vehicles that were removed in the current interval.
friend class VehicleRemover
static bool runParser(GenericSAXHandler &handler, const std::string &file, const bool isNet=false)
Runs the given handler on the given file; returns if everything's ok.
const std::string DEFAULT_VTYPE_ID
int myClearedInJam
The number of vehicles that were removed when clearin a jam.
SUMOTime getSUMOTimeReporting(int attr, const char *objectid, bool &ok, bool report=true) const
Tries to read given attribute assuming it is a SUMOTime.
const MSEdge *const myEdge
the edge on which this calibrator lies
virtual void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
Data structure for mean (aggregated) edge/lane values.
#define WRITE_WARNING(msg)
The car-following model and parameter.
SUMOReal waitSeconds
The number of vehicle probes with small speed.
SUMOReal getSpeedLimit() const
Returns the speed limit of the edge The speed limit of the first lane is retured; should probably be...
bool writeXMLHeader(const std::string &rootElement, const std::string &attrs="", const std::string &comment="")
Writes an XML header with optional configuration.
int totalWished() const
number of vehicles expected to pass this interval
A road/street connecting two junctions.
DepartSpeedDefinition departSpeedProcedure
Information how the vehicle's initial speed shall be chosen.
const MSCFModel & getCarFollowModel() const
Returns the vehicle type's car following model definition (const version)
std::vector< AspiredState >::const_iterator myCurrentStateInterval
Iterator pointing to the current interval.
An abstract device that changes the state of the micro simulation.
std::string routeid
The vehicle's route id.
Representation of a vehicle.
The least occupied lane from lanes which allow the continuation.
Encapsulated SAX-Attributes.
virtual SUMOReal getHeadwayTime() const
Get the driver's reaction time [s].
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
virtual SUMOReal getSamples() const
Returns the number of collected sample seconds.
virtual SUMOVehicle * buildVehicle(SUMOVehicleParameter *defs, const MSRoute *route, const MSVehicleType *type, const bool ignoreStopErrors, const bool fromRouteFile=true)
Builds a vehicle, increases the number of built vehicles.
SUMOTime depart
The vehicle's departure time.
void resetRoutePosition(int index)
The maximum speed is used.
SUMOReal getPositionOnLane() const
Get the vehicle's position along the lane.
No information given; use default.
bool mySpeedIsDefault
The information whether the speed adaption has been reset.
void onRemovalFromNet(const MSMoveReminder::Notification reason)
Called when the vehicle is removed from the network.
std::vector< AspiredState > myIntervals
List of adaptation intervals.
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
virtual void reset()
reset collected vehicle data
virtual void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
virtual SUMOTime addEvent(Command *operation, SUMOTime execTimeStep, AdaptType type)
Adds an Event.
bool myHaveWarnedAboutClearingJam
The default (maximum) speed on the segment.
void setDescription(const std::string &description)
MSEventControl * getEndOfTimestepEvents()
Returns the event control for events executed at the end of a time step.
int nVehLeft
The number of vehicles that left this lane within the sample interval.
int nVehArrived
The number of vehicles that finished on the lane.
bool invalidJam(int laneIndex) const
No information given; use default.
virtual void myEndElement(int element)
Called when a closing tag occurs.
std::vector< MSMeanData_Net::MSLaneMeanDataValues * > myLaneMeanData
data collector for the calibrator
static std::vector< MSMoveReminder * > LeftoverReminders
SUMOReal getTravelledDistance() const
Returns the total travelled distance.
std::string myID
The name of the object.
T getOpt(int attr, const char *objectid, bool &ok, T defaultValue, bool report=true) const
Tries to read given attribute assuming it is an int.
void scheduleVehicleRemoval(SUMOVehicle *veh)
Removes a vehicle after it has ended.
Structure representing possible vehicle parameter.
static OutputDevice & getDevice(const std::string &name)
Returns the described OutputDevice.
SUMOTime getOptSUMOTimeReporting(int attr, const char *objectid, bool &ok, SUMOTime defaultValue, bool report=true) const
Tries to read given attribute assuming it is a SUMOTime.
SUMOReal getLength() const
return the length of the edge
SUMOVehicleParameter * vehicleParameter
const MSRouteProbe *const myProbe
the route probe to retrieve routes from
static void cleanup()
cleanup remaining data structures
void setMaxSpeed(SUMOReal val) const
Sets a new maximum speed for all lanes (used by TraCI and MSCalibrator)
OutputDevice * myOutput
The device for xml statistics.
virtual void updateMeanData()
aggregate lane values
virtual SUMOTime execute(SUMOTime currentTime)
Patch the time in a way that it is at least as high as the simulation begin time. ...
bool removePending()
remove any vehicles which are scheduled for removal. return true if removals took place ...
void reset(bool afterWrite=false)
Resets values so they may be used for the next interval.
MSMeanData_Net::MSLaneMeanDataValues myEdgeMeanData
accumlated data for the whole edge
MSRouteIterator begin() const
Returns the begin of the list of edges to pass.
The class responsible for building and deletion of vehicles.
bool isCurrentStateActive(SUMOTime time)
std::vector< VehicleRemover * > myVehicleRemovers
int remainingVehicleCapacity(int laneIndex) const
MSVehicleType * getVType(const std::string &id=DEFAULT_VTYPE_ID, MTRand *rng=0)
Returns the named vehicle type or a sample from the named distribution.
const std::string & getID() const
Returns the name of the vehicle.
Representation of a lane in the micro simulation.
std::set< std::string > myToRemove
set of vehicle ids to remove
MSRouteIterator end() const
Returns the end of the list of edges to pass.
Parser and container for routes during their loading.
SUMOReal myDefaultSpeed
The default (maximum) speed on the segment.
bool contains(const MSEdge *const edge) const
int myInserted
The number of vehicles that were inserted in the current interval.
SUMOReal getLengthWithGap() const
Get vehicle's length including the minimum gap [m].
std::string id
The vehicle's id.
static bool dictionary(const std::string &id, const MSRoute *route)
Adds a route to the dictionary.