19 #ifndef LogitCalculator_h
20 #define LogitCalculator_h
39 template<
class R,
class E,
class V>
49 void setCosts(R* route,
const double costs,
const bool )
const {
50 route->setCosts(costs);
59 for (
typename std::vector<R*>::const_iterator i = alternatives.begin(); i != alternatives.end(); i++) {
62 const std::vector<const E*>& edgesR = pR->getEdgeVector();
63 for (
typename std::vector<const E*>::const_iterator edge = edgesR.begin(); edge != edgesR.end(); ++edge) {
65 lengthR += (*edge)->getTravelTime(veh,
STEPS2TIME(time));
67 double overlapSum = 0;
68 for (
typename std::vector<R*>::const_iterator j = alternatives.begin(); j != alternatives.end(); j++) {
70 double overlapLength = 0.;
72 const std::vector<const E*>& edgesS = pS->getEdgeVector();
73 for (
typename std::vector<const E*>::const_iterator edge = edgesS.begin(); edge != edgesS.end(); ++edge) {
74 lengthS += (*edge)->getTravelTime(veh,
STEPS2TIME(time));
75 if (std::find(edgesR.begin(), edgesR.end(), *edge) != edgesR.end()) {
76 overlapLength += (*edge)->getTravelTime(veh,
STEPS2TIME(time));
79 overlapSum += pow(overlapLength / sqrt(lengthR * lengthS),
myGamma);
84 for (
typename std::vector<R*>::iterator i = alternatives.begin(); i != alternatives.end(); i++) {
86 double weightedSum = 0;
87 for (
typename std::vector<R*>::iterator j = alternatives.begin(); j != alternatives.end(); j++) {
91 pR->setProbability(1. / weightedSum);
99 double min = std::numeric_limits<double>::max();
100 for (
typename std::vector<R*>::const_iterator i = alternatives.begin(); i != alternatives.end(); i++) {
101 const double cost = (*i)->getCosts() / 3600.;
114 double min = std::numeric_limits<double>::max();
115 for (
typename std::vector<R*>::const_iterator i = alternatives.begin(); i != alternatives.end(); i++) {
116 const double cost = (*i)->getCosts() / 3600.;
122 const double meanCost = sum / double(alternatives.size());
123 for (
typename std::vector<R*>::const_iterator i = alternatives.begin(); i != alternatives.end(); i++) {
124 diff += pow((*i)->getCosts() / 3600. - meanCost, 2);
126 const double cvCost = sqrt(diff /
double(alternatives.size())) / meanCost;
129 return 3.1415926535897932384626433832795 / (sqrt(6.) * cvCost * (min + 1.1)) / 3600.;