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

View File

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