|
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.
|
|
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.
|
|
typedef NodeT | Node |
|
typedef ArcT | Arc |
|
|
Node * | insert_node (const Node_Type &node_info, const Flow_Type &supply=0) |
|
Node * | insert_node (const Flow_Type &supply=0) |
|
bool | exist_aux_net () const |
| Retorna true si la red auxiliar ya ha sido creada.
|
|
Net_Sup_Dem_Graph * | compute_aux_net () |
|
Net_Sup_Dem_Graph * | get_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.
|
|
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 () |
|
Node * | get_source () |
| Retorna un nodo fuente de la red.
|
|
Node * | get_sink () |
| Retorna un nodo sumidero de la red.
|
|
Node * | insert_node (const Node_Type &node_info) |
|
Node * | insert_node () |
|
Node * | insert_node (Node *p) |
|
virtual Arc * | insert_arc (Node *src_node, Node *tgt_node, const typename Arc::Arc_Type &arc_info, const Flow_Type &cap, const Flow_Type &flow) |
|
Arc * | connect_arc (Arc *arc) |
|
virtual Arc * | insert_arc (Node *src_node, Node *tgt_node, const Flow_Type &cap) |
|
virtual Arc * | insert_arc (Node *src_node, Node *tgt_node, const typename Arc::Arc_Type &arc_info) |
|
virtual Arc * | insert_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_Type & | get_flow (Arc *arc) const |
| retorna el valor de capacidad del arco.
|
|
const Flow_Type & | get_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.
|
|
Arc * | get_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) |
|
| Array_Digraph (const Array_Digraph &dg) |
|
| Array_Digraph (Array_Digraph &&dg) |
|
Array_Digraph & | operator= (const Array_Digraph< Node, Arc > &g) |
|
Array_Digraph & | operator= (Array_Digraph< Node, Arc > &&g) |
|
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_Graph & | operator= (const Array_Graph &g) |
|
Array_Graph & | operator= (Array_Graph &&g) |
|
void | sort_arcs (Compare &) |
|
void | sort_arcs (Compare &&) |
|
| GRAPH_FUNCTIONAL_METHODS (Array_Graph) |
|
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.
template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
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_alloc | si no hay suficiente memoria para crear la red equivalente. |
domain_error | si la red equivalente ya ha sido calculada. |
domain_error | si 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().
template<class NodeT = Net_Sup_Dem_Node<Empty_Class, double>, class ArcT = Net_Arc<Empty_Class, double>>
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_list | lista de nodos cuyo flujo de salida es menor que lo que pueden proveer. |
[out] | demand_list | lista de nodos cuyo flujo de entrada es menor que lo que reciben. |
- Excepciones
-
bad_alloc | si 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().