43 #ifdef CHECK_MEMORY_LEAKS
45 #endif // CHECK_MEMORY_LEAKS
72 if (oc.
getString(
"route-choice-method") ==
"logit") {
74 }
else if (oc.
getString(
"route-choice-method") ==
"gawron") {
90 : myBeta(beta), myA(a) {}
108 for (std::vector<RORoute*>::iterator i = alternatives.begin(); i != alternatives.end() - 1; i++) {
110 for (std::vector<RORoute*>::iterator j = i + 1; j != alternatives.end(); j++) {
139 return (pdr * (pdr + pds) *
gawronG(
myA, x)) /
146 if (((1.0 - (x * x)) == 0)) {
149 return (
SUMOReal) exp((a * x) / (1.0 - (x * x)));
157 : myBeta(beta), myGamma(gamma), myTheta(theta) {}
175 for (std::vector<RORoute*>::const_iterator i = alternatives.begin(); i != alternatives.end(); i++) {
178 const std::vector<const ROEdge*>& edgesR = pR->
getEdgeVector();
179 for (std::vector<const ROEdge*>::const_iterator edge = edgesR.begin(); edge != edgesR.end(); ++edge) {
181 lengthR += (*edge)->getTravelTime(veh,
STEPS2TIME(time));
184 for (std::vector<RORoute*>::const_iterator j = alternatives.begin(); j != alternatives.end(); j++) {
188 const std::vector<const ROEdge*>& edgesS = pS->
getEdgeVector();
189 for (std::vector<const ROEdge*>::const_iterator edge = edgesS.begin(); edge != edgesS.end(); ++edge) {
190 lengthS += (*edge)->getTravelTime(veh,
STEPS2TIME(time));
191 if (std::find(edgesR.begin(), edgesR.end(), *edge) != edgesR.end()) {
192 overlapLength += (*edge)->getTravelTime(veh,
STEPS2TIME(time));
195 overlapSum += pow(overlapLength / sqrt(lengthR * lengthS),
myGamma);
200 for (std::vector<RORoute*>::iterator i = alternatives.begin(); i != alternatives.end(); i++) {
203 for (std::vector<RORoute*>::iterator j = alternatives.begin(); j != alternatives.end(); j++) {
215 for (std::vector<RORoute*>::const_iterator i = alternatives.begin(); i != alternatives.end(); i++) {
216 const SUMOReal cost = (*i)->getCosts() / 3600.;
231 for (std::vector<RORoute*>::const_iterator i = alternatives.begin(); i != alternatives.end(); i++) {
232 const SUMOReal cost = (*i)->getCosts() / 3600.;
239 for (std::vector<RORoute*>::const_iterator i = alternatives.begin(); i != alternatives.end(); i++) {
240 diff += pow((*i)->getCosts() / 3600. - meanCost, 2);
242 const SUMOReal cvCost = sqrt(diff /
SUMOReal(alternatives.size())) / meanCost;
245 return M_PI / (sqrt(6.) * cvCost * (min + 1.1)) / 3600.;