Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSSOTLPlatoonPolicy.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 Platoon logics
20/****************************************************************************/
21
22#include "MSSOTLPlatoonPolicy.h"
23//#define SWARM_DEBUG
24
25
26// ===========================================================================
27// method definitions
28// ===========================================================================
30 MSSOTLPolicy("Platoon", parameters) {
31 init();
32}
33
35 MSSOTLPolicy("Platoon", desirabilityAlgorithm) {
37 init();
38}
39
41 const Parameterised::Map& parameters) :
42 MSSOTLPolicy("Platoon", desirabilityAlgorithm, parameters) {
44 init();
45}
46
47bool MSSOTLPlatoonPolicy::canRelease(SUMOTime elapsed, bool thresholdPassed, bool pushButtonPressed,
48 const MSPhaseDefinition* stage, int vehicleCount) {
49// DBG(std::ostringstream str; str << "invoked MSTLPlatoonPolicy::canRelease()"; WRITE_MESSAGE(str.str()););
50#ifdef SWARM_DEBUG
51 std::ostringstream str;
52 str << "MSSOTLPlatoonPolicy::canRelease elapsed " << elapsed << " threshold " << thresholdPassed << " pushbutton " << pushButtonPressed << " vcount " << vehicleCount
53 << " minD " << stage->minDuration << " maxD " << stage->maxDuration;
54 str << " will return " << ((thresholdPassed && ((vehicleCount == 0) || (elapsed >= stage->maxDuration))) ? "true" : "false");
55 WRITE_MESSAGE(str.str());
56#endif
57 if (elapsed >= stage->minDuration) {
58 if (pushButtonLogic(elapsed, pushButtonPressed, stage)) {
59 return true;
60 }
61 if (thresholdPassed) {
62 //If there are no other vehicles approaching green lights
63 //or the declared maximum duration has been reached
64 return ((vehicleCount == 0) || (elapsed >= stage->maxDuration));
65 } else {
66 if (sigmoidLogic(elapsed, stage, vehicleCount)) {
67 return true;
68 }
69 }
70 }
71 return false;
72}
73
75 SigmoidLogic::init("MSSOTLPlatoonPolicy", this);
76 PushButtonLogic::init("MSSOTLPlatoonPolicy", this);
77}
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 maxDuration
The maximum duration of the phase.
SUMOTime minDuration
The minimum duration of the phase.
MSSOTLPlatoonPolicy(const Parameterised::Map &parameters)
bool canRelease(SUMOTime elapsed, bool thresholdPassed, bool pushButtonPressed, const MSPhaseDefinition *stage, 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.
MSSOTLPolicyDesirability * getDesirabilityAlgorithm()
std::map< std::string, std::string > Map
parameters map
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)