Fix: [Linkgraph] possible rounding errors for travel times of low-capacity links

This commit is contained in:
Nicolas Chappe 2021-11-13 20:49:35 +01:00 committed by Michael Lutz
parent 25b3ff6423
commit c5369caa45
1 changed files with 7 additions and 4 deletions

View File

@ -72,12 +72,15 @@ void LinkGraph::Compress()
for (NodeID node2 = 0; node2 < this->Size(); ++node2) {
BaseEdge &edge = this->edges[node1][node2];
if (edge.capacity > 0) {
edge.capacity = std::max(1U, edge.capacity / 2);
uint new_capacity = std::max(1U, edge.capacity / 2);
if (edge.capacity < (1 << 16)) {
edge.travel_time_sum = edge.travel_time_sum * new_capacity / edge.capacity;
} else if (edge.travel_time_sum != 0) {
edge.travel_time_sum = std::max(1ULL, edge.travel_time_sum / 2);
}
edge.capacity = new_capacity;
edge.usage /= 2;
}
if (edge.travel_time_sum > 0) {
edge.travel_time_sum = std::max(1ULL, edge.travel_time_sum / 2);
}
}
}
}