Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSSOTLPhasePolicy.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2010-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 Phase logics
20/****************************************************************************/
21
22#include "MSSOTLPhasePolicy.h"
23#include <cmath>
25
26
28 MSSOTLPolicy("Phase", parameters) {
29 init();
30}
31
33 MSSOTLPolicy("Phase", desirabilityAlgorithm) {
35 init();
36}
37
39 const Parameterised::Map& parameters) :
40 MSSOTLPolicy("Phase", desirabilityAlgorithm, parameters) {
42 init();
43}
44
45bool MSSOTLPhasePolicy::canRelease(SUMOTime elapsed, bool thresholdPassed, bool pushButtonPressed,
46 const MSPhaseDefinition* stage, int vehicleCount) {
47// DBG(
48 std::ostringstream str;
49 str << "MSSOTLPhasePolicy::canRelease threshold " << thresholdPassed << " vehicle " << vehicleCount << " elapsed " << elapsed << " min " << stage->minDuration;
50 WRITE_MESSAGE(str.str());
51// );
52 if (elapsed >= stage->minDuration) {
53 if (pushButtonLogic(elapsed, pushButtonPressed, stage)) {
54 return true;
55 }
56 if (thresholdPassed) {
57 return thresholdPassed;
58 } else if (m_useVehicleTypesWeights) {
59 if (sigmoidLogic(elapsed, stage, vehicleCount)) {
60 return true;
61 }
62 }
63 }
64 return false;
65}
66
68 PushButtonLogic::init("MSSOTLPhasePolicy", this);
69 SigmoidLogic::init("MSSOTLPhasePolicy", this);
70 m_useVehicleTypesWeights = getParameter("USE_VEHICLE_TYPES_WEIGHTS", "0") == "1";
71}
long long int SUMOTime
Definition GUI.h:36
#define WRITE_MESSAGE(msg)
Definition MsgHandler.h:297
The definition of a single phase of a tls logic.
SUMOTime minDuration
The minimum duration of the phase.
bool canRelease(SUMOTime elapsed, bool thresholdPassed, bool pushButtonPressed, const MSPhaseDefinition *stage, int vehicleCount)
MSSOTLPhasePolicy(const Parameterised::Map &parameters)
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.
MSSOTLPolicyDesirability * getDesirabilityAlgorithm()
std::map< std::string, std::string > Map
parameters map
virtual const std::string getParameter(const std::string &key, const std::string defaultValue="") const
Returns the value for a given key.
bool pushButtonLogic(SUMOTime elapsed, bool pushButtonPressed, const MSPhaseDefinition *stage)
void init(std::string prefix, const Parameterised *parameterised)
void init(std::string prefix, const Parameterised *parameterised)
bool sigmoidLogic(SUMOTime elapsed, const MSPhaseDefinition *stage, int vehicleCount)