Eclipse SUMO - Simulation of Urban MObility
MSSOTLCongestionPolicy.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2014-2024 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 /****************************************************************************/
19 // The class for SOTL Congestion logics
20 /****************************************************************************/
21 
22 #include "MSSOTLCongestionPolicy.h"
23 
25  const Parameterised::Map& parameters) :
26  MSSOTLPolicy("Congestion", parameters) {
27 }
28 
30  MSSOTLPolicyDesirability* desirabilityAlgorithm) :
31  MSSOTLPolicy("Congestion", desirabilityAlgorithm) {
32  getDesirabilityAlgorithm()->setKeyPrefix("CONGESTION");
33 }
34 
36  MSSOTLPolicyDesirability* desirabilityAlgorithm,
37  const Parameterised::Map& parameters) :
38  MSSOTLPolicy("Congestion", desirabilityAlgorithm, parameters) {
39  getDesirabilityAlgorithm()->setKeyPrefix("CONGESTION");
40 
41 }
42 
44  const MSPhaseDefinition* stage, int currentPhaseIndex,
45  int /* phaseMaxCTS */, bool thresholdPassed, bool pushButtonPressed, int vehicleCount) {
46  if (stage->isCommit()) {
47  // decide which chain to activate. Gotta work on this
48  return currentPhaseIndex;
49  }
50  if (stage->isTransient()) {
51  //If the junction was in a transient step
52  //=> go to the next step and return computeReturnTime()
53  return currentPhaseIndex + 1;
54  }
55 
56  if (stage->isDecisional()) {
57  if (canRelease(elapsed, thresholdPassed, pushButtonPressed, stage, vehicleCount)) {
58  return currentPhaseIndex + 1;
59  }
60  }
61 
62  return currentPhaseIndex;
63 }
64 
65 bool MSSOTLCongestionPolicy::canRelease(SUMOTime elapsed, bool /* thresholdPassed */, bool /* pushButtonPressed */,
66  const MSPhaseDefinition* stage, int /* vehicleCount */) {
67  return (elapsed >= stage->minDuration);
68 }
long long int SUMOTime
Definition: GUI.h:35
The definition of a single phase of a tls logic.
bool isTransient() const
SUMOTime minDuration
The minimum duration of the phase.
bool isDecisional() const
bool canRelease(SUMOTime elapsed, bool thresholdPassed, bool pushButtonPressed, const MSPhaseDefinition *stage, int vehicleCount)
MSSOTLCongestionPolicy(const Parameterised::Map &parameters)
int decideNextPhase(SUMOTime elapsed, const MSPhaseDefinition *stage, int currentPhaseIndex, int phaseMaxCTS, bool thresholdPassed, bool pushButtonPressed, int vehicleCount)
This class determines the desirability algorithm of a MSSOTLPolicy when used in combination with a hi...
void setKeyPrefix(std::string val)
Class for a low-level policy.
Definition: MSSOTLPolicy.h:61
MSSOTLPolicyDesirability * getDesirabilityAlgorithm()
Definition: MSSOTLPolicy.h:117
std::map< std::string, std::string > Map
parameters map
Definition: Parameterised.h:45