MultiCommodityFlow Class Reference

Multi-commodity flow calculating base class. More...

#include <mcf.h>

Inheritance diagram for MultiCommodityFlow:
MCF1stPass MCF2ndPass

Protected Member Functions

 MultiCommodityFlow (LinkGraphComponent *graph)
template<class ANNOTATION >
void Dijkstra (NodeID from, PathVector &paths, bool create_new_paths)
 A slightly modified Dijkstra algorithm.
uint PushFlow (Edge &edge, Path *path, uint accuracy, bool positive_cap)
 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

LinkGraphComponentgraph
 Component we're working with.

Detailed Description

Multi-commodity flow calculating base class.

Definition at line 62 of file mcf.h.


Member Function Documentation

void MultiCommodityFlow::CleanupPaths ( NodeID  source_id,
PathVector &  paths 
) [protected]

Clean up paths that lead nowhere and the root path.

Parameters:
source_id ID of the root node.
paths Paths to be cleaned up.

Definition at line 131 of file mcf.cpp.

References Path::Detach(), Path::GetFlow(), Path::GetNode(), Path::GetNumChildren(), and Path::GetParent().

Referenced by MCF1stPass::MCF1stPass(), and MCF2ndPass::MCF2ndPass().

template<class Tannotation >
void MultiCommodityFlow::Dijkstra ( NodeID  source_node,
PathVector &  paths,
bool  create_new_paths 
) [inline, protected]

A slightly modified Dijkstra algorithm.

Grades the paths not necessarily by distance, but by the value Tannotation computes. It can also be configured to only use paths already created before and not create new ones. If this is not done it uses the short_path_saturation setting to artificially decrease capacities. If a path has already been created is determined by checking the flows associated with its nodes.

Template Parameters:
Tannotation Annotation to be used.
Parameters:
source_node Node where the algorithm starts.
paths Container for the paths to be calculated.
create_new_paths If false, only use paths already seen before, otherwise artificially limit the capacity.

Definition at line 82 of file mcf.cpp.

References Edge::capacity, Edge::distance, Edge::flow, Node::flows, LinkGraphComponent::GetEdge(), LinkGraphComponent::GetFirstEdge(), LinkGraphComponent::GetNode(), LinkGraphComponent::GetSettings(), LinkGraphComponent::GetSize(), graph, Edge::next_edge, LinkGraphSettings::short_path_saturation, and Node::station.

uint MultiCommodityFlow::PushFlow ( Edge edge,
Path path,
uint  accuracy,
bool  positive_cap 
) [protected]

Push flow along a path and update the unsatisfied_demand of the associated edge.

Parameters:
edge Edge whose ends the path connects.
path End of the path the flow should be pushed on.
accuracy Accuracy of the calculation.
positive_cap If true only push flow up to the paths capacity, otherwise the path can be "overloaded".

Definition at line 162 of file mcf.cpp.

References Path::AddFlow(), Clamp(), Edge::demand, graph, and Edge::unsatisfied_demand.

Referenced by MCF1stPass::MCF1stPass(), and MCF2ndPass::MCF2ndPass().


The documentation for this class was generated from the following files:

Generated on Sun Jun 5 04:21:05 2011 for OpenTTD by  doxygen 1.6.1