59 for (
const std::shared_ptr<R>& pR : alternatives) {
61 const std::vector<const E*>& edgesR = pR->getEdgeVector();
62 for (
const E*
const edge : edgesR) {
64 lengthR += edge->getTravelTime(veh, t);
66 double overlapSum = 0;
67 for (
const std::shared_ptr<R>& pS : alternatives) {
68 double overlapLength = 0.;
70 for (
const E*
const edge : pS->getEdgeVector()) {
71 lengthS += edge->getTravelTime(veh, t);
72 if (std::find(edgesR.begin(), edgesR.end(), edge) != edgesR.end()) {
73 overlapLength += edge->getTravelTime(veh, t);
76 overlapSum += pow(overlapLength / sqrt(lengthR * lengthS),
myGamma);
81 for (
const std::shared_ptr<R>& pR : alternatives) {
82 double weightedSum = 0;
83 for (
const std::shared_ptr<R>& pS : alternatives) {
86 pR->setProbability(1. / weightedSum);
109 double min = std::numeric_limits<double>::max();
110 for (
const std::shared_ptr<R>& pR : alternatives) {
111 const double cost = pR->getCosts() / 3600.;
117 const double meanCost = sum / double(alternatives.size());
118 for (
const std::shared_ptr<R>& pR : alternatives) {
119 diff += pow(pR->getCosts() / 3600. - meanCost, 2);
121 const double cvCost = sqrt(diff /
double(alternatives.size())) / meanCost;
124 return 3.1415926535897932384626433832795 / (sqrt(6.) * cvCost * (min + 1.1)) / 3600.;