OpenTTD Source: src/linkgraph/mcf.h Source File

OpenTTD Source 15.3

mcf.h
Go to the documentation of this file.
1
3#ifndef MCF_H
4#define MCF_H
5
6#include "linkgraphjob_base.h"
7
8typedef std::vector<Path *> PathVector;
9
13 class MultiCommodityFlow {
14protected:
19 MultiCommodityFlow(LinkGraphJob &job) : job(job),
20 max_saturation(job.Settings().short_path_saturation)
21 {}
22
23 template <class Tannotation, class Tedge_iterator>
24 void Dijkstra(NodeID from, PathVector &paths);
25
26 uint PushFlow(Node &node, NodeID to, Path *path, uint accuracy, uint max_saturation);
27
28 void CleanupPaths(NodeID source, PathVector &paths);
29
30 LinkGraphJob &job;
31 uint max_saturation;
32};
33
49 class MCF1stPass : public MultiCommodityFlow {
50private:
51 bool EliminateCycles();
52 bool EliminateCycles(PathVector &path, NodeID origin_id, NodeID next_id);
53 void EliminateCycle(PathVector &path, Path *cycle_begin, uint flow);
54 uint FindCycleFlow(const PathVector &path, const Path *cycle_begin);
55public:
56 MCF1stPass(LinkGraphJob &job);
57};
58
66 class MCF2ndPass : public MultiCommodityFlow {
67public:
68 MCF2ndPass(LinkGraphJob &job);
69};
70
75template <class Tpass>
76 class MCFHandler : public ComponentHandler {
77public:
78
83 void Run(LinkGraphJob &job) const override { Tpass pass(job); }
84};
85
86#endif /* MCF_H */
ComponentHandler
A handler doing "something" on a link graph component.
Definition linkgraphschedule.h:21
LinkGraphJob
Class for calculation jobs to be run on link graphs.
Definition linkgraphjob.h:29
MCF1stPass
First pass of the MCF calculation.
Definition mcf.h:49
MCF1stPass::EliminateCycles
bool EliminateCycles()
Eliminate all cycles in the graph.
Definition mcf.cpp:481
MCF1stPass::FindCycleFlow
uint FindCycleFlow(const PathVector &path, const Path *cycle_begin)
Find the flow along a cycle including cycle_begin in path.
Definition mcf.cpp:360
MCF1stPass::EliminateCycle
void EliminateCycle(PathVector &path, Path *cycle_begin, uint flow)
Eliminate a cycle of the given flow in the given set of paths.
Definition mcf.cpp:377
MCF2ndPass
Second pass of the MCF calculation.
Definition mcf.h:66
MCFHandler
Link graph handler for MCF.
Definition mcf.h:76
MCFHandler::Run
void Run(LinkGraphJob &job) const override
Run the calculation.
Definition mcf.h:83
MultiCommodityFlow
Multi-commodity flow calculating base class.
Definition mcf.h:13
MultiCommodityFlow::MultiCommodityFlow
MultiCommodityFlow(LinkGraphJob &job)
Constructor.
Definition mcf.h:19
MultiCommodityFlow::Dijkstra
void Dijkstra(NodeID from, PathVector &paths)
A slightly modified Dijkstra algorithm.
Definition mcf.cpp:257
MultiCommodityFlow::job
LinkGraphJob & job
Job we're working with.
Definition mcf.h:30
MultiCommodityFlow::max_saturation
uint max_saturation
Maximum saturation for edges.
Definition mcf.h:31
MultiCommodityFlow::PushFlow
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.
Definition mcf.cpp:344
MultiCommodityFlow::CleanupPaths
void CleanupPaths(NodeID source, PathVector &paths)
Clean up paths that lead nowhere and the root path.
Definition mcf.cpp:312
Path
A leg of a path in the link graph.
Definition linkgraphjob.h:273
linkgraphjob_base.h
Some typedefs for component handlers.
LinkGraph::BaseNode
Node of the link graph.
Definition linkgraph.h:90