Algoritmos estudiados

Los algoritmos estudiados en este trabajo se pueden dividir en dos categorías:

Dentro de la primer categoría se considera el algoritmo de Generación Completa de Estados (GCE).
Para la segunda, se considera en una primera instancia un algoritmo de simulación de tipo Monte Carlo estándar o "crudo" (MCC) y luego una variante más elaborada denominada Reducción Recursiva de la Varianza (RVR).
Los algoritmos se implementaron en lenguaje C++ bajo entorno Unix. A continuación se presenta una descripción de cada uno.


Función de estructura

Todos los algoritmos requieren de la evaluación de la función de estructura, que toma un red (o más bien un estado de la red en cierto instante determinado, definido por los componentes de la misma que en ese instante funcionan) y evalúa en 1 si la red se encuentra en estado operativo y 0 en caso contrario.
En nuestro caso particular, el estado de la red depende del estado de sus componentes (nodos y aristas que pueden estar o no en funcionamiento), y se considera un estado como operativo cuando se cumple la condición de conexidad (entre todo  par de nodos, entre s y t, o entre todo par de terminales del conjunto K, dependiendo de la medida de interés). Una red se considera también en estado no operativo cuando al menos un terminal no funciona (definición coherente, [6] y [2]). La verificación de la conexidad de la red se efectúa en base a una recorrida en profundidad. La descripción del algoritmo para la  evaluación de la función de estructura es la siguiente:



Algoritmo de Generación Completa de Estados

Este algoritmo realiza el cálculo exacto de la medida de confiabilidad generando todos los 2|V|+|E| estados posibles del grafo y evaluando cuales son operativos. Para aquellos que lo son se acumula su probabilidad de ocurrencia (calculada como el producto de las probabilidades de los componentes que funcionan y los complementos de las probabilidades de los que no funcionan). En otras palabras, se acumulan las probabilidades de todos los estados que suman en la probabilidad del suceso "la red se encuentra en estado operativo". Para su implementación se utiliza la técnica de Backtracking.

La complejidad del algoritmo es O(2|V|+|E|) ya que se deben generar todos los etados posibles del grafo.


Algoritmo Monte Carlo Crudo

Dado un grafo G, un estado o subgrafo G' de G en un instante particular queda definido por los componentes originales de G que en ese instante funcionan. La idea de este algoritmo se basa en obtener una estimación del valor de la confiabilidad R de la red mediante el sorteo de N estados G'i del grafo original G. En definitiva, la confiabilidad de la red se calcula como la frecuencia de ocurrencia del suceso "todos los nodos terminales funcionan y están conectados entre sí".  La esperanza de este estimador es igual a R y la varianza es R(1-R)/N (esperanza de la suma de N variables de Bernoulli independientes e identicamente distribuídas), la cual se estima mediante la expresión Rest(1-Rest)/(N-1), donde Rest es la estimación obtenida y N es la cantidad de replicaciones.

El algoritmo implementado recibe el grafo, un identificador de semilla para el generador de números seudo-aleatorios y la cantidad de replicaciones N. Se utiliza para todas las replicaciones el mismo torrente de números seudo-aleatorios ya que el período del generador es lo suficientemente grande (se utiliza la biblioteca estándar drand48 incluída en el lenguaje C).

La complejidad del algoritmo es O(|V|+|E|). Se puede ver observando que se debe realizar un sorteo para cada nodo y arista más una recorrida en profundidad, la cual tiene una complejidad lineal en la cantidad de nodos del grafo.


Algoritmo de Reducción Recursiva de la Varianza

El algoritmo Monte Carlo estándar produce resultados aceptables para redes de mediana confiabilidad, pero para redes altamente confiables se deben realizar muchas replicaciones para obtener estados no operativos (la cantidad de replicaciones necesarias para obtener un resultado para una precisión dada, es inversamente proporcional a la anti-confiabilidad de la red).

En [3] se propone este algoritmo, que reduce el problema original a un problema en una red más pequeña construida a partir de la original, condicionada a uno de sus cortes. El proceso es recursivo y se detiene cuando la red se encuentra siempre en estado operativo o no operativo, independientemente del estado de sus componentes. La construcción del método se realiza para obtener una estimación de la medida Qk (anti-confiabilidad para un conjunto K de terminales), pero se puede generalizar para todas las restantes.

Definiciones y notación

El objetivo ahora, es construir un estimador con igual esperanza que el utilizado en MCC y con menor varianza.
Si Y(G) es el estimador de la confiabilidad para el algoritmo MCC, el objetivo de la técnica RVR es construir una variable aleatoria Z(G) con la misma esperanza de Y(G) y menor varianza. Dicha variable aleatoria se construye  a partir de un K-corte extendido D, y se expresa en términos de |D| variables aleatorias Y(Gi) correspondientes a estados de la red original.

Propiedad

Para una red G donde los terminales no fallan sean:

entonces la variable aleatoria
verifica
E {Z(G)} = Q(G)      (a)

Var {Z(G)} = (Q(G) - QD)R(G) £ Q(G)R(G) = Var {Y(G)} (b)

Esta Propiedad muestra que la variable aleatoria Z tiene la misma esperanza, y menor varianza que la original Y. A grandes rasgos, la justificación de la igualdad (a)  se obtiene observando que el suceso AD y los sucesos Bi constituyen una partición del suceso "la red se encuentra en estado no operativo" cuya probabilidad Q se desea calcular, y utilizando el teorema de probabilidades totales; la reducción de varianza se puede ver observando que en la estimación de la medida Q, siempre se tienen en cuenta estados de falla (suceso AD). Una justificación detallada de estas demostraciones se puede ver en [8] para el caso particular de Rst).

En base a lo anterior, se construye en forma recursiva la siguiente variable aleatoria F:

y el siguiente algoritmo denominado RVR para obtener una muestra de F para una red G :

Algoritmo RVR

1 - Chequear fin de recursión:
        Si G es siempre K-conexo (|K|=1)    retornar 0
        Si G no es K-conexo (evaluando la función de estructura)    retornar 1

2 - Encontrar un K-corte extendido D de G: D = {d1, d2, ..., d|D|}

3 - Calcular QD (probabilidad de que todos los componentes en D fallen)

4 - Sortear una muestra v de la variable aleatoria V

5 - Construir GV =  (G - d1 - ... - dv-1) * dv    (eliminaciones y contracción)

6 - Paso recursivo: retornar QD + (1 - QD)*RVR(GV)
 
 

Ejemplo

El siguiente ejemplo muestra la ejecución del algoritmo RVR en una red con tres nodos (de los cuales dos son terminales) y dos aristas. La computación se muestra en forma de árbol, donde los hijos de un nodo interno son los posibles resultados del sorteo de la variable aleatoria V (los sucesos Bi). Las hojas del árbol corresponden a situaciones donde se cumple alguna condición de parada (red siempre K-conexa o no K-conexa). Una replicación del algoritmo solamente genera un camino desde la raíz hasta alguna hoja.


Se puede ver que en cada paso recursivo, el problema original se reduce a uno (y solo uno) más pequeño, ya que en el paso 5 del algoritmo se reduce la cantidad de componentes de la red original (mediante eliminaciones y contracciones). Así, la cantidad de invocaciones recursivas se puede acotar por |V|+|E| y observando que la operación más costosa en cada paso es la evaluación de la función de estructura fi (de orden O(|V|)), el orden del algoritmo RVR tendrá orden de complejidad O(|V| * (|V|+|E|)).

Para realizar varias replicaciones de la simulación, el algoritmo anterior es invocado varias veces mediante una iteración. La esperanza de F(G) se estima mediante el cociente de la suma de los resultados de todas las replicaciones sobre la cantidad de las mismas:

 y la varianza se estima mediante la siguiente expresión

que por comodidad para su cálculo se puede llevar a

El algoritmo implementado para el cálculo de la confiabilidad utilizando RVR recibe el grafo, un identificador de semilla para el generador de números seudo-aleatorios (se utiliza de la misma forma que en MCC) y una cantidad N de replicaciones.