OpenTTD Source 20241224-master-gee860a5c8e
|
Second pass of the MCF calculation. More...
#include <mcf.h>
Public Member Functions | |
MCF2ndPass (LinkGraphJob &job) | |
Run the second pass of the MCF calculation which assigns all remaining demands to existing paths. | |
Additional Inherited Members | |
Protected Member Functions inherited from MultiCommodityFlow | |
MultiCommodityFlow (LinkGraphJob &job) | |
Constructor. | |
template<class Tannotation , class Tedge_iterator > | |
void | Dijkstra (NodeID from, PathVector &paths) |
A slightly modified Dijkstra algorithm. | |
uint | PushFlow (Node &node, NodeID to, Path *path, uint accuracy, uint max_saturation) |
Push flow along a path and update the unsatisfied_demand of the associated edge. | |
void | CleanupPaths (NodeID source, PathVector &paths) |
Clean up paths that lead nowhere and the root path. | |
Protected Attributes inherited from MultiCommodityFlow | |
LinkGraphJob & | job |
Job we're working with. | |
uint | max_saturation |
Maximum saturation for edges. | |
Second pass of the MCF calculation.
Saturates paths with most capacity left first and doesn't create any paths along edges that haven't been visited in the first pass. This is why it doesn't have to do any cycle detection and elimination. As cycle detection is the most intense problem in the first pass this pass is cheaper. The accuracy is used here, too.
MCF2ndPass::MCF2ndPass | ( | LinkGraphJob & | job | ) |
Run the second pass of the MCF calculation which assigns all remaining demands to existing paths.
job | Link graph job to calculate. |
Definition at line 547 of file mcf.cpp.
References LinkGraphSettings::accuracy, MultiCommodityFlow::CleanupPaths(), Path::GetFreeCapacity(), LinkGraphJob::IsJobAborted(), MultiCommodityFlow::job, MultiCommodityFlow::max_saturation, MultiCommodityFlow::PushFlow(), LinkGraphJob::Settings(), and LinkGraphJob::Size().