22 #ifndef GawronCalculator_h 23 #define GawronCalculator_h 46 template<
class R,
class E,
class V>
55 void setCosts(R* route,
const double costs,
const bool isActive =
false)
const {
57 route->setCosts(costs);
59 route->setCosts(
myBeta * costs + ((
double) 1.0 -
myBeta) * route->getCosts());
65 for (
typename std::vector<R*>::iterator i = alternatives.begin(); i != alternatives.end() - 1; i++) {
67 for (
typename std::vector<R*>::iterator j = i + 1; j != alternatives.end(); j++) {
71 (pS->getCosts() - pR->getCosts()) /
72 (pS->getCosts() + pR->getCosts());
74 double newPR =
gawronF(pR->getProbability(), pS->getProbability(), delta);
75 double newPS = pR->getProbability() + pS->getProbability() - newPR;
77 newPR = pS->getCosts() > pR->getCosts()
79 newPS = pS->getCosts() > pR->getCosts()
82 newPR =
MIN2((
double)
MAX2(newPR, (
double) 0), (
double) 1);
83 newPS =
MIN2((
double)
MAX2(newPS, (
double) 0), (
double) 1);
84 pR->setProbability(newPR);
85 pS->setProbability(newPS);
93 double gawronF(
const double pdr,
const double pds,
const double x)
const {
103 double gawronG(
const double a,
const double x)
const {
104 if (((1.0 - (x * x)) == 0)) {
107 return (
double) exp((a * x) / (1.0 - (x * x)));
void calculateProbabilities(std::vector< R *> alternatives, const V *const, const SUMOTime)
calculate the probabilities
double gawronG(const double a, const double x) const
Performs the gawron - g() function From "Dynamic User Equilibria...".
const double myA
gawron a - value
double gawronF(const double pdr, const double pds, const double x) const
Performs the gawron - f() function From "Dynamic User Equilibria...".
Cost calculation with Gawron's method.
Abstract base class providing static factory method.
GawronCalculator(const double beta, const double a)
Constructor.
GawronCalculator & operator=(const GawronCalculator &s)
invalidated assignment operator
const double myBeta
gawron beta - value
void setCosts(R *route, const double costs, const bool isActive=false) const
virtual ~GawronCalculator()
Destructor.