Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
Referencia de la plantilla de la Clase Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >

#include <tpl_net_sup_dem.H>

+ Diagrama de herencias de Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >
+ Diagrama de colaboración para Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >:

Tipos públicos

typedef Net_Graph< NodeT, ArcT > Net_Class
 La clase de red tradicional.
 
typedef ArcT Arc
 Tipo de arco.
 
typedef NodeT Node
 Tipo de node.
 
typedef Arc::Flow_Type Flow_Type
 Tipo que representa la capacidad y el flujo.
 
typedef Node::Node_Type Node_Type
 Tipo de atributo que almacena un nodo.
 
typedef Arc::Arc_Type Arc_Type
 Tipo de atributo que almacena un arco.
 
typedef Net_Sup_Dem_Graph Aux_Net
 El tipo de red capacitada auxiliar equivalente.
 
- Tipos públicos heredados desde Aleph::Net_Graph< NodeT, ArcT >
typedef Array_Digraph< NodeT,
ArcT > 
Digraph
 
typedef ArcT Arc
 Tipo de arco.
 
typedef NodeT Node
 Tipo de node.
 
typedef Arc::Flow_Type Flow_Type
 Tipo que representa la capacidad y el flujo.
 
typedef Node::Node_Type Node_Type
 Tipo de atributo que almacena un nodo.
 
typedef Arc::Arc_Type Arc_Type
 Tipo de atributo que almacena un arco.
 
- Tipos públicos heredados desde Aleph::Array_Digraph< NodeT, ArcT >
typedef NodeT Node
 
typedef ArcT Arc
 

Métodos públicos

Nodeinsert_node (const Node_Type &node_info, const Flow_Type &supply=0)
 
Nodeinsert_node (const Flow_Type &supply=0)
 
bool exist_aux_net () const
 Retorna true si la red auxiliar ya ha sido creada.
 
Net_Sup_Dem_Graphcompute_aux_net ()
 
Net_Sup_Dem_Graphget_aux_net ()
 
bool is_feasible () const
 
void non_feasible_nodes (DynDlist< Node * > &supply_list, DynDlist< Node * > &demand_list)
 
void set_supply_flow (Node *p, const Flow_Type &supply)
 
void free_aux_net ()
 Libera memoria de la red extendida.
 
- Métodos públicos heredados desde Aleph::Net_Graph< NodeT, ArcT >
Flow_Type get_in_cap (Node *node) const
 Retorna la capacidad total de entrada del nodo node.
 
Flow_Type get_out_cap (Node *node) const
 Retorna la capacidad total de salida del nodo node.
 
size_t get_in_degree (Node *node) const
 
size_t get_out_degree (Node *node) const
 
Flow_Type get_out_flow (Node *node) const
 Retorna el valor de flujo de salida del nodo.
 
Flow_Type get_in_flow (Node *node) const
 Retorna el valor de flujo de entrada del nodo.
 
bool is_source (Node *node)
 Retorna true si node es fuente.
 
bool is_sink (Node *node)
 Retorna true si node es sumidero.
 
bool is_connected (Node *node) const
 
bool check_node (Node *node)
 
Aleph::set< Node * > & get_src_nodes ()
 Retorna el conjunto de nodos fuente que contiene la red.
 
Aleph::set< Node * > & get_sink_nodes ()
 Retorna el conjunto de nodos sumidero que contiene la red.
 
void make_super_source ()
 
void unmake_super_source ()
 
void make_super_sink ()
 
void unmake_super_sink ()
 
void make_super_nodes ()
 
void unmake_super_nodes ()
 
Nodeget_source ()
 Retorna un nodo fuente de la red.
 
Nodeget_sink ()
 Retorna un nodo sumidero de la red.
 
Nodeinsert_node (const Node_Type &node_info)
 
Nodeinsert_node ()
 
Nodeinsert_node (Node *p)
 
virtual Arcinsert_arc (Node *src_node, Node *tgt_node, const typename Arc::Arc_Type &arc_info, const Flow_Type &cap, const Flow_Type &flow)
 
Arcconnect_arc (Arc *arc)
 
virtual Arcinsert_arc (Node *src_node, Node *tgt_node, const Flow_Type &cap)
 
virtual Arcinsert_arc (Node *src_node, Node *tgt_node, const typename Arc::Arc_Type &arc_info)
 
virtual Arcinsert_arc (Node *src_node, Node *tgt_node)
 
virtual void remove_arc (Arc *arc)
 Elimina de la red el arco arc.
 
void disconnect_arc (Arc *arc)
 
virtual void remove_node (Node *p)
 Elimina un nodo de una red de flujo junto con todos sus arcos.
 
 Net_Graph (Digraph &digraph)
 
 Net_Graph (Net_Graph &net)
 
void set_cap (Arc *arc, const Flow_Type &cap)
 Coloca valor de capacidad a un arco.
 
void set_flow (Arc *arc, const Flow_Type &flow)
 
const Flow_Typeget_flow (Arc *arc) const
 retorna el valor de capacidad del arco.
 
const Flow_Typeget_cap (Arc *arc) const
 Retorna el valor de flujo de un arco.
 
void reset ()
 
bool check_network ()
 
Flow_Type flow_value ()
 
void insert_residual_arc (Arc *arc)
 
void make_residual_net ()
 
void unmake_residual_net ()
 
bool is_there_residual_net () const
 Retorna true si la red residual está creada; false de lo contrario.
 
Arcget_residual_arc (Arc *a)
 Obtiene el arco residual de a.
 
void increase_out_flow (Node *p, const Flow_Type &flow)
 
void decrease_out_flow (Node *p, const Flow_Type &flow)
 
void increase_in_flow (Node *p, const Flow_Type &flow)
 
void decrease_in_flow (Node *p, const Flow_Type &flow)
 
- Métodos públicos heredados desde Aleph::Array_Digraph< NodeT, ArcT >
 Array_Digraph (const Array_Digraph &dg)
 
 Array_Digraph (Array_Digraph &&dg)
 
Array_Digraphoperator= (const Array_Digraph< Node, Arc > &g)
 
Array_Digraphoperator= (Array_Digraph< Node, Arc > &&g)
 
- Métodos públicos heredados desde Aleph::Array_Graph< NodeT, ArcT >
virtual Node * insert_node (Node *p)
 
void compress ()
 
Arc * connect_arc (Arc *arc)
 
Arc * disconnect_arc (Arc *arc)
 
virtual void remove_arc (Arc *a)
 
virtual void remove_node (Node *p)
 
Node * get_first_node () const
 
Arc * get_first_arc () const
 
Arc * get_first_arc (Node *p) const
 
 Array_Graph (const Array_Graph &g)
 
 Array_Graph (Array_Graph &&g)
 
void swap (Array_Graph &g)
 
Array_Graphoperator= (const Array_Graph &g)
 
Array_Graphoperator= (Array_Graph &&g)
 
void sort_arcs (Compare &)
 
void sort_arcs (Compare &&)
 
 GRAPH_FUNCTIONAL_METHODS (Array_Graph)
 

Otros miembros heredados

- Atributos públicos heredados desde Aleph::Net_Graph< NodeT, ArcT >
Flow_Type Infinity
 
bool with_super_source
 true si a la red se le ha añadido un supra fuente.
 
bool with_super_sink
 true si a la red se le ha añadido un supra sumidero.
 
bool residual_net
 
- Atributos públicos heredados desde Aleph::Array_Graph< NodeT, ArcT >
 GRAPH_ITERATIVE_METHODS
 
 GRAPH_SEARCH_METHODS
 
 GRAPH_INSERTION_METHODS
 

Descripción detallada

template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
class Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >

Red con provisiones de flujo.

Una red con provisiones de flujo es una en la cual algunos nodos tienen un valor de provisión de flujo. Si el valor es positivo, significa que el nodo provee un flujo máximo correspondiente al valor dado. Si el valor es negativo, significa que el nodo requiere recibir por sus arcos de entrada un flujo correspondiente al valor absoluto del valor dado.

En una red de provisiones, se dice que el flujo es factible si es posible satisfacer las demandas a partir de las provisiones. Para ello, se debe calcular una red capacitada equivalente y calcular el flujo máximo.

Documentación de las funciones miembro

template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
Net_Sup_Dem_Graph* Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >::compute_aux_net ( )
inline

Calcula la red capacitada equivalente.

Dada una red con provisiones en los nodos (representada en this), compute_aux_net() calcula la red capacitada equivalente sobre la cual se pueden realizar cálculos de maximización de flujo, corte equivalente y, en particular, verificación de factibilidad de flujo.

La red capacitada equivalente se construye sobre la propia red de provisiones. Por esa razón, cualquier cálculo sobre la red equivalente es inmediatamente reflejado sobre la red con provisiones.

Devuelve
un puntero a la red equivalente.
Excepciones
bad_allocsi no hay suficiente memoria para crear la red equivalente.
domain_errorsi la red equivalente ya ha sido calculada.
domain_errorsi la red residual de la equivalente ya ha sido calculada.

Hace referencia a Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >::exist_aux_net(), Aleph::Net_Graph< NodeT, ArcT >::get_in_degree(), Aleph::Net_Graph< NodeT, ArcT >::get_out_degree(), Aleph::Net_Graph< NodeT, ArcT >::insert_arc(), Aleph::Net_Graph< NodeT, ArcT >::insert_node(), Aleph::Filter_Iterator< Container, It, Show_Item >::next() y Aleph::Net_Graph< NodeT, ArcT >::remove_node().

+ Gráfico de llamadas para esta función:

template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
Node* Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >::insert_node ( const Node_Type node_info,
const Flow_Type supply = 0 
)
inline

Crea un nodo con provisión y lo inserta en una red.

Parámetros
[in]node_infovalor de atributo del nodo.
[in]supplyvalor de provisión de flujo. Si el valor es positivo, entonces el nodo es proveedor de flujo por el valor dado; de lo contrario, el nodo demanda la cantidad dada. Por omisión, este parámetro es cero.
Devuelve
puntero a nodo creado e insertado.
Excepciones
bad_allocsi no hay suficiente memoria.

Hace referencia a Aleph::Net_Graph< NodeT, ArcT >::insert_node().

+ Gráfico de llamadas para esta función:

template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
Node* Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >::insert_node ( const Flow_Type supply = 0)
inline

Crea un nodo con provisión y lo inserta en una red.

Parámetros
[in]supplyvalor de provisión de flujo. Si el valor es positivo, entonces el nodo es proveedor de flujo por el valor dado; de lo contrario, el nodo demanda la cantidad dada. Por omisión, este parámetro es cero.
Devuelve
puntero a nodo creado e insertado.
Excepciones
bad_allocsi no hay suficiente memoria.

Hace referencia a Aleph::Net_Graph< NodeT, ArcT >::insert_node().

+ Gráfico de llamadas para esta función:

template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
bool Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >::is_feasible ( ) const
inline

Recorre la red de provisiones y determina si el flujo es factible.

Devuelve
true si el flujo es factible; false de lo contrario.
Excepciones
domain_errorsi la red capacitada equivalente no ha sido previamente calculada.

Hace referencia a Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >::exist_aux_net() y Aleph::Filter_Iterator< Container, It, Show_Item >::next().

+ Gráfico de llamadas para esta función:

template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
void Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >::non_feasible_nodes ( DynDlist< Node * > &  supply_list,
DynDlist< Node * > &  demand_list 
)
inline

Calcula los nodos cuyo flujo no es factible.

non_feasible_nodes() recorre los nodos de la red. Por cada nodo, según su valor de provisión, se verifica si ésta se satisface. Si no es posible satisfacer la provisión, entonces la dirección del nodo se guarda en una lista según que el nodo se de demanda o de provisión.

Parámetros
[out]supply_listlista de nodos cuyo flujo de salida es menor que lo que pueden proveer.
[out]demand_listlista de nodos cuyo flujo de entrada es menor que lo que reciben.
Excepciones
bad_allocsi no hay suficiente memoria para insertar en alguna de las listas parámetros.

Hace referencia a Aleph::DynDlist< T >::append() y Aleph::Filter_Iterator< Container, It, Show_Item >::next().

+ Gráfico de llamadas para esta función:

template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
void Aleph::Net_Sup_Dem_Graph< NodeT, ArcT >::set_supply_flow ( Node p,
const Flow_Type supply 
)
inline

Ajusta el valor de provisión de un nodo.

set_supply_flow(p, supply) coloca el valor de provisión supply sobre el nodo apuntado por el puntero p.

Parámetros
[in]ppuntero al nodo.
[in]supplyvalor de provisión a colocar sobre el nodo.
Nota
una vez realizado cualquier ajuste sobre la provisión, es necesario recalcular el flujo máximo si se desea conocer la factibilidad del flujo.
Excepciones
range_errorsi el valor de provisión no es factible a la capacidad entrante o saliente del nodo.

La documentación para esta clase fue generada a partir del siguiente fichero:

Leandro Rabindranath León