Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
RouteCostCalculator.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2002-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/****************************************************************************/
20// Calculators for route costs and probabilities
21/****************************************************************************/
22#pragma once
23#include <config.h>
24
25#include <vector>
26#include <map>
27#include <cmath>
32
33
34// ===========================================================================
35// class definitions
36// ===========================================================================
41template<class R, class E, class V>
43public:
45
46 static void cleanup() {
47 delete myInstance;
48 myInstance = 0;
49 }
50
51 virtual void setCosts(R* route, const double costs, const bool isActive = false) const = 0;
52
54 virtual void calculateProbabilities(std::vector<R*> alternatives, const V* const veh, const SUMOTime time) = 0;
55
56 int getMaxRouteNumber() const {
57 return myMaxRouteNumber;
58 }
59
60 bool keepAllRoutes() const {
61 return myKeepRoutes;
62 }
63
64 bool skipRouteCalculation() const {
65 return mySkipNewRoutes;
66 }
67
68 bool keepRoute() const {
69 if (myKeepRouteProb == 1) {
70 return true;
71 } else if (myKeepRouteProb == 0) {
72 return false;
73 } else {
75 }
76 }
77
78protected:
82 myMaxRouteNumber = oc.getInt("max-alternatives");
83 myKeepRoutes = oc.getBool("keep-all-routes");
84 mySkipNewRoutes = oc.getBool("skip-new-routes");
85 myKeepRouteProb = oc.exists("keep-route-probability") ? oc.getFloat("keep-route-probability") : 0;
86 }
87
90
91private:
93
96
99
102
105
106};
107
108
109// ===========================================================================
110// static member definitions
111// ===========================================================================
112template<class R, class E, class V>
114
115
116#include "GawronCalculator.h"
117#include "LogitCalculator.h"
118
119template<class R, class E, class V>
121 if (myInstance == 0) {
123 if (oc.getString("route-choice-method") == "logit") {
124 myInstance = new LogitCalculator<R, E, V>(oc.getFloat("logit.beta"), oc.getFloat("logit.gamma"), oc.getFloat("logit.theta"));
125 } else if (oc.getString("route-choice-method") == "gawron") {
126 myInstance = new GawronCalculator<R, E, V>(oc.getFloat("gawron.beta"), oc.getFloat("gawron.a"));
127 }
128 }
129 return *myInstance;
130}
long long int SUMOTime
Definition GUI.h:36
Cost calculation with Gawron's method.
Cost calculation with c-logit or logit method.
A storage for options typed value containers)
Definition OptionsCont.h:89
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool exists(const std::string &name) const
Returns the information whether the named option is known.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
static double rand(SumoRNG *rng=nullptr)
Returns a random real number in [0, 1)
Abstract base class providing static factory method.
bool mySkipNewRoutes
Information whether new routes shall be computed.
bool myKeepRoutes
Information whether all routes should be saved.
virtual void calculateProbabilities(std::vector< R * > alternatives, const V *const veh, const SUMOTime time)=0
calculate the probabilities in the logit model
virtual ~RouteCostCalculator()
Destructor.
int myMaxRouteNumber
The maximum route alternatives number.
virtual void setCosts(R *route, const double costs, const bool isActive=false) const =0
static RouteCostCalculator< R, E, V > & getCalculator()
bool skipRouteCalculation() const
static RouteCostCalculator * myInstance
RouteCostCalculator()
Constructor.
double myKeepRouteProb
Information whether the old route shall be kept.