Post on 10-Nov-2021
ANÁLISIS DE CONFIABILIDAD DE REDES DE TELECOMUNICACIONES CON SIMULACIONES DE MONTECARLO – MODELAMIENTO
ANDRÉS FELIPE JAIMES GONZÁLEZ
UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA BOGOTÁ D.C.
2004
ANÁLISIS DE CONFIABILIDAD DE REDES DE TELECOMUNICACIONES CON
SIMULACIONES DE MONTECARLO - MODELAMIENTO
ANDRÉS FELIPE JAIMES GONZÁLEZ
Trabajo De Grado
Asesor: Ph.D. ALVARO TORRES MACIAS
UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA BOGOTÁ D.C.
2004
IEL2-I-2004-38
1
DEDICATORIA
A nuestros Padres y familiares que nos apoyaron durante toda esta etapa de nuestras vidas.
IEL2-I-2004-38
2
CONTENIDO
Pág. 1. INTRODUCCIÓN 4
2. CONFIABILIDAD 6 3. REDES DE TELECOMUNICACIONES 9
3.1. RED TELEFÓNICA 15 3.2. RADIODIFUSIÓN DE SEÑALES 17
3.3. TEORIA DE GRAFOS 20 4. MODELAMIENTO 24
4.1. CONDICIONES INICIALES 24 4.2. ENRUTAMIENTO 26
4.2.1. Principio de optimalidad 27 4.2.2. Algoritmos de enrutamiento 28
4.2.2.1. Selección de la ruta más corta 28 4.2.2.2. Algoritmo para encontrar los cortes mínimos
(Flujo máximo) 31 4.2.2.3. Selección del algoritmo 32
4.3. INDICADORES 32 5. SIMULACIÓN 33
5.1. MACROALGORITMO 33 5.2. MÉTODO DE MONTECARLO 33 5.3. ALGORITMO DE FORD-FULKERSON 34 5.4. RESULTADOS 36 5.5. EJEMPLOS 39
5.5.1. Ejemplo 1 39 5.5.2. Ejemplo 2 40
6. CONCLUSIONES 42 7. TRABAJO FUTURO 44
8. BIBLIOGRAFIA 45 9. APENDICE 46
9.1. MANUAL DEL USUARIO 46
IEL2-I-2004-38
3
9.2. CODIGO DEL PROGRAMA 5
10. LISTA DE FIGURAS 88
IEL2-I-2004-38
4
1. INTRODUCCIÓN
Una red está compuesta por nodos y enlaces que los comunican. La
confiabilidad de una red es una medida que refleja la capacidad de la misma de
continuar operativa frente a posibles fallos de algunos de sus componentes, y se
define como la probabilidad de comunicación exitosa entre cierto conjunto de
nodos de la red, dadas las probabilidades de funcionamiento de los componentes
y la topología de la red1. El concepto de confiabilidad de redes de
telecomunicaciones está relacionado con su operabilidad.
La evaluación de la confiabilidad de las redes de telecomunicaciones es un
problema difícil para redes de tamaño considerable. Como solución a este
problema de cómputo surge la necesidad de aplicar el método de simulación de
MonteCarlo. Este método genera eventos aleatorios que permiten evaluar el
comportamiento de la red ante fallas.
El proyecto general consiste en conocer y aprender a aplicar diferentes algoritmos
de ordenamiento, enrutamiento y reestructuración de redes, para realizar un
esquema de modelamiento para redes de telecomunicaciones y su respectivo
análisis de confiabilidad. Esto con el fin de desarrollar paralelamente una
herramienta computacional que permita al ingeniero obtener un análisis del
desempeño del sistema en el momento de realizar el modelamiento y diseño de
una red de telecomunicaciones.
En este proyecto se presenta el modelamiento y la implementación de una
herramienta computacional para el análisis de confiabilidad en sistemas de
telecomunicaciones empleando simulaciones de MonteCarlo (SMC). Se aplica un
modelo probabilística basado en un grafo estocástico para evaluar la confiabilidad
como la capacidad de una red de permanecer operativa ante una eventualidad. Por 1 “Método RVR en la simulación de medidas de confiabilidad en redes”, Departamento de Investigación Operativa, Instituto de Computación, Facultad de Ingeniería, Universidad de la República, Montevideo, Uruguay. Antonio Mauttone, Tutor: Dr. Ing. Héctor Cancela.
IEL2-I-2004-38
5
medio de este proyecto se busca facilitarle al ingeniero su decisión para la
selección de la red óptima basado en un criterio de robustez y proporcionarle una
herramienta adicional de decisión.
IEL2-I-2004-38
6
2. CONFIABILIDAD
En el concepto de confiabilidad existen diferentes definiciones dependiendo del
punto de vista. Una de las definiciones de confiabilidad se refiere a ésta como la
probabilidad de que un sistema realice su función adecuadamente en el periodo
de tiempo considerado, operando en las condiciones establecidas2.
Otra definición de confiabilidad es la de disponibilidad del sistema en un instante
de tiempo; en otras palabras es la probabilidad de que un sistema esté en
capacidad de operar en un tiempo t.
En cuanto a las redes de telecomunicaciones la confiabilidad es una herramienta
de análisis que permite un criterio de selección adicional para los ingenieros
diseñadores. Es importante conocer la robustez de una red y evitar sanciones o
pérdidas en el momento de ocurrencia de un evento. La confiabilidad de las redes
puede ser de definida de varias maneras: Una medida determinística, por ejemplo,
enunciándola como el número mínimo de enlaces que al ser removidos
desconectan la red.
Una red de comunicaciones está representada matemáticamente como un grafo:
cada nodo representa una persona, computador, o ubicación y cada enlace
representa un canal de comunicación. Una red esta conectada si para cada par
distinto de nodos, existe una secuencia de enlaces que empieza en un nodo y
termina en el otro. La medida probabilística más común es asumir inicialmente
que cada enlace tiene cierta probabilidad de estar en operación y luego determinar
la probabilidad de que la red esté conectada.
La red se evalúa en sus aspectos técnicos, como la probabilidad de que estará
conectada, y por lo tanto se aleja de manejar las necesidades de la gente. En
confiabilidad de redes, el contenido del mensaje, y por lo tanto la capacidad de los 2 “Modelo para el dimensionamiento de una red de reserva de transmisión de telecomunicaciones con base en criterios de demanda y confiabilidad”, Miguel Felipe Anzola Espinosa, Universidad de los Andes, Bogotá, Colombia.
IEL2-I-2004-38
7
enlaces de comunicación y la probabilidad de tergiversación del mensaje no son
considerados. Un enlace es operacional y capaz de cargar cualquier tipo de
mensaje o no es capaz de cargar ningún mensaje. Además se asume que los
individuos pueden colectivamente disponer como enrutar los mensajes en caso de
que exista una falla en el enlace de comunicación.
Entre los métodos de evaluación de la confiabilidad de un sistema se encuentran
el método analítico y el método de Simulaciones de MonteCarlo. El método
analítico emplea una serie de ecuaciones matemáticas (del modelo matemático)
para evaluar los índices de confiabilidad.
Por otro lado, el método de SMC simula el proceso real y por medio de generación
de número aleatorios se modelan los eventos en el sistema y en los componentes.
Este método de simulación permite realizar experimentos reales sobre el sistema y
observar su comportamiento. A partir de estas simulaciones se calculan los
índices de confiabilidad al igual que en el método analítico; es por esto que el
método de SMC se convierte en el método mas empleado en la evaluación de la
confiabilidad.
El método fue llamado así por el principado de Mónaco por ser “la capital del juego
de azar”, al tomar una ruleta como un generador simple de números aleatorios. El
nombre y el desarrollo sistemático de los métodos de MonteCarlo datan
aproximadamente de 1944 con el desarrollo de la computadora electrónica. Sin
embargo hay varias instancias (aisladas y no desarrolladas) en muchas ocasiones
anteriores a 19443.
El uso real de los métodos de MonteCarlo como una herramienta de investigación,
viene del trabajo de la bomba atómica durante la Segunda Guerra Mundial. Este
trabajo involucraba la simulación directa de problemas probabilísticos de
3 Oscar M. Ponce, http://delta.cs.cinvestav.mx/~mcintosh/oldweb/s1998/oscar/node3.html
IEL2-I-2004-38
8
hidrodinámica concernientes a la difusión de neutrones aleatorios en material de
fusión.
Aún en la primera etapa de estas investigaciones, John von Neumann y Stanislao
Ulam refinaron esta curiosa “Ruleta rusa” y los métodos “de división”. Sin
embargo, el desarrollo sistemático de estas ideas tuvo que esperar el trabajo de
Harris y Herman Kahn en 1948. Aproximadamente en el mismo año, Fermi,
Metropolos y Ulam obtuvieron estimadores para los valores característicos de la
ecuación de Schrödinger para la captura de neutrones a nivel nuclear.
La simulación de MonteCarlo fue creada para resolver integrales que no se
pueden resolver por métodos analíticos, para resolver estas integrales se usaron
números aleatorios. Posteriormente se utilizó para cualquier esquema que emplee
números aleatorios, usando variables aleatorias con distribuciones de probabilidad
conocidas, el cual es usado para resolver ciertos problemas estocásticos y
determinísticos, donde el tiempo no juega un papel importante.
Por lo tanto es un proceso computacional que utiliza números aleatorios para
derivar una salida, por lo que en vez de tener entradas con puntos dados, se
asignan distribuciones de probabilidad a alguna o todas las variables de entrada.
Esto generará una distribución de probabilidad para una salida después de una
corrida de la simulación.
IEL2-I-2004-38
9
3. REDES DE TELECOMUNICACIONES4 Cuando hablamos de una red de telecomunicaciones, estamos hablando de una
infraestructura por la cual transportamos diferentes tipos de información desde un
origen hasta un destinatario.
En la red todos los usuarios poseen un equipo terminal así como un canal de
acceso equivalente a la tecnología de su terminal.
La razón básica por la que se generan las redes de telecomunicaciones es facilitar
la comunicación entre varios usuarios por medio de enlaces compartidos entre
usuarios pero conservando una conexión dedicada para su equipo, es decir que
se evitan los costos elevados de tener un canal dedicado, compartiendo su enlace
con todos los demás usuarios de la red.
La función de una red de telecomunicaciones consiste en ofrecer servicios a sus
usuarios, existe las redes públicas abiertas para todo el mundo y las redes
privadas cuando alguien establece una red para uso personal o restringido.
Una característica importante de una red es su cobertura geográfica, ya que ésta
limita el área de conexión y el acceso a la red para utilizar los servicios que ofrece.
Existen redes locales que enlazan computadoras instaladas en un mismo edificio
conocidas como LAN (local area network), existen redes de cobertura más amplia
conocidas como WAN (wide area network), redes de cobertura urbana, redes
metropolitanas, redes que enlazan redes metropolitanas o redes urbanas
formando así redes nacionales.
Las redes se clasifican por su arquitectura y su modo de transmisión de la
siguiente manera:
4 Información y telecomunicaciones, Federico Kuhlman y Antonio Alonso C. Publicado por el FCE, México 1997
IEL2-I-2004-38
10
• Red Conmutada: En esta red la información es transmitida de nodo en
nodo, los cuales la retransmiten sucesivamente hasta llegar a su
destinatario final. La conmutación puede ser hecha por paquetes o por
circuitos. En la primera, la información se divide en paquetes
independientes con información de control, estos se transmiten de nodo en
nodo por diferentes rutas y al llegar a su destinatario final estos paquetes se
ensamblan nuevamente y la información llega completa. En la conmutación
de circuitos se entabla una ruta entre los equipos, comienza la
comunicación y se mantiene la ruta durante el tiempo de transmisión
requerido.
• Red de Difusión: Aquí se tiene un canal al que se conectan todos los
usuarios de la red, los cuales pueden recibir todos los mensajes enviados
pero solamente ven los que están identificados con su dirección. Las redes
de difusión generalmente tienen sólo un nodo transmisor que ingresa la
información al canal donde están conectados los usuarios. Casos típicos de
este tipo de red son las topologías Bus y Anillo.
Existen muchas maneras de clasificar los servicios de telecomunicaciones, ya
que también existen diversos parámetros por medio de los cuales pueden ser
comparados. En particular se utilizan los siguientes criterios de comparación:
Tipo de red. Basadas fundamentalmente en transmisiones de radio o en
señales guiadas por medio de conductores eléctricos u ópticos.
Cobertura. La extensión del área geográfica que cubre una red es de
particular interés. La cobertura puede ser caracterizada como local,
regional o nacional.
Interconexión. A pesar de que la cobertura de una red puede ser local o
regional, si está interconectada con otras redes de mayor cobertura se
amplía de manera automática el área geográfica cubierta por la red.
IEL2-I-2004-38
11
Direccionalidad. En una comunicación un usuario puede tener un papel
pasivo o uno activo. Aquí se indica si el tipo de comunicación es
unidireccional o bidireccional.
Tipo de información. La información que se transmite puede ser digital
(D) o analógica (A), lo cual define algunos aspectos del alcance de un
servicio.
Privacía. Normalmente cuando se hace uso de un servicio de
telecomunicaciones se desea tener la certeza de que sólo aquellos
usuarios a quienes está destinada la información la reciben, y de que
ningún intruso puede tener acceso al servicio sin tener autorización para
ello.
Una red de telecomunicaciones se basa en dos componentes:
• Los nodos: Se encargan de enviar, recibir y procesar la información. Los
nodos son los equipos encargados de realizar las diversas funciones de
procesamiento que requieren cada una de las señales transitan a través de
los enlaces de la red. Desde un punto de vista topológico, los nodos
proveen los enlaces físicos entre los diversos canales que conforman la
red. Los nodos de una red de telecomunicaciones son equipos que realizan
las siguientes funciones:
Establecimiento y verificación de un protocolo. Los nodos de la red de
telecomunicaciones realizan los diferentes procesos de comunicación de
acuerdo con un conjunto de reglas que les permiten comunicarse entre
sí.
Transmisión. Existe la necesidad de hacer un uso eficiente de los
canales, por lo cual, en esta función, los nodos de la red adaptan al
IEL2-I-2004-38
12
canal la información o los mensajes en los cuales está contenida, para
su transporte eficiente y efectivo a través de la red.
Interfase. En esta función el nodo se encarga de proporcionar al canal
las señales que serán transmitidas, de acuerdo con el medio de que
está formado el canal.
Recuperación. Cuando durante una transmisión se interrumpe el
sistema, a través de sus nodos, debe ser capaz de recuperarse y
reanudar en cuanto sea posible la transmisión.
Enrutamiento. La selección de la ruta en cada nodo depende, entre otros
factores, de la situación instantánea de congestión de la red, es decir,
del número de mensajes que en cada momento están en proceso de ser
transmitidos a través de los diferentes enlaces de la red.
Direccionamiento. Un nodo requiere la capacidad de identificar
direcciones para poder hacer llegar un mensaje a su destino,
principalmente cuando el usuario final está conectado a otra red de
telecomunicaciones.
Control de flujo. Todo canal de comunicaciones tiene una cierta
capacidad de manejar mensajes, y cuando el canal está saturado ya no
se deben enviar más mensajes por medio de ese canal, hasta que los
mensajes previamente enviados hayan sido entregados a sus destinos.
• Los Enlaces: Estos interconectan los nodos y se encargan de la
transmisión de la información. El canal es el medio físico a través del cual
viaja la información de un punto a otro. Las características de un canal son
de fundamental importancia para una comunicación efectiva, ya que de
ellas depende en gran medida la calidad de las señales recibidas en el
destino o en los nodos intermedios en una ruta. Los canales pueden
IEL2-I-2004-38
13
pertenecer a una de dos clases:
o Canales que guían las señales que contienen información desde la
fuente hasta el destino, por ejemplo: cables de cobre (tasas hasta 4
Mbps), cables coaxiales (tasas hasta 500 Mbps) y fibras ópticas
(tasas hasta 2000 Mbps).
Los cables de cobre son el medio más utilizado en transmisiones
tanto analógicas como digitales. El material del que están formados
produce atenuación en las señales, de manera tal que a distancias
de entre 2 y 6 km deben ser colocadas repetidoras.
Los cables coaxiales tienen un blindaje que aísla al conductor central
del ruido en la transmisión; son muy utilizados en comunicaciones de
larga distancia, en distribución de señales de televisión y en redes de
transmisión de datos. La distancia entre repetidoras es similar a la de
los cables de cobre, debido a que se utiliza una mayor banda para la
transmisión, permitiendo mayores tasas en las comunicaciones
digitales.
La fibra óptica transmite señales ópticas en lugar de las eléctricas de
los dos casos anteriores. Son mucho más ligeras que los cables
metálicos y permiten transmitir tasas muchísimo más altas que los
primeros. Además, aunque las señales se ven afectadas por ruido,
no se alteran por ruido de tipo eléctrico y pueden soportar distancias
mayores entre repetidoras (del orden de 100 km). Sus aplicaciones
principales son enlaces de larga distancia, enlaces metropolitanos y
redes locales.
La diferencia fundamental entre las transmisiones que utilizan fibras
ópticas y las de naturaleza puramente eléctrica está en el hecho de
que en las primeras la información se sobrepone a señales ópticas,
es decir, la información modula alguna característica de una señal
IEL2-I-2004-38
14
óptica. Entre las ventajas de la fibra óptica se destacan que son
mucho menos sensibles a ruido de tipo eléctrico, y, por el espacio
que ocupan en el espectro las señales ópticas, la capacidad de estas
transmisiones es mucho mayor que las de los sistemas basados en
cables metálicos. Un área en la cual las fibras ópticas han sido de
extraordinaria importancia es la de transmisiones transoceánicas. La
clave para este tipo de aplicaciones está en disponer de dispositivos
de alta confiabilidad, grandes anchos de banda y pocas pérdidas.
o Canales que difunden la señal sin una guía, a los cuales pertenecen
los canales de radio, que incluyen también microondas y enlaces
satelitales.
Las microondas utilizan antenas de transmisión y recepción de tipo
parabólico para transmitir con haces estrechos y tener mayor
concentración de energía radiada. Principalmente se utilizan en
enlaces de larga distancia, desde luego con repetidoras, pero a
últimas fechas se han utilizado también para enlaces cortos punto a
punto.
Los enlaces satelitales funcionan de una manera muy parecida a las
microondas. Un satélite recibe en una banda señales de una estación
terrena, las amplifica y las transmite en otra banda de frecuencias, se
envían señales de radio desde una antena hacía un satélite
estacionado en un punto fijo alrededor de la Tierra (llamado
"geoestacionario"). Los satélites tienen un reflector orientado hacia
los sitios donde se quiere hacer llegar la señal reflejada. Y en esos
puntos también se tienen antenas cuya función es precisamente
captar la señal reflejada por el satélite. De ese punto en adelante, la
señal puede ser procesada para que por último sea entregada a su
destino.
IEL2-I-2004-38
15
Las ventajas de las comunicaciones satelitales son que se pueden
salvar grandes distancias sin importar la topografía, y se pueden usar
antenas que tengan coberturas geográficas amplias, de manera tal
que muchas estaciones receptoras terrenas puedan recibir y distribuir
simultáneamente la misma señal que fue transmitida una sola vez.
Una red moderna de telecomunicaciones normalmente utiliza canales de
distintos tipos para lograr la mejor solución a los problemas de
telecomunicaciones de los usuarios; es decir, con frecuencia existen redes
que emplean canales de radio en algunos segmentos, canales vía satélite
en otros, microondas en algunas rutas, radio entre otras.
3.1. RED TELEFÓNICA:
Es la más compleja, la de mayor cobertura geográfica y la que mayor número de
usuarios tiene. Permite establecer una llamada entre dos usuarios en cualquier
parte del planeta de manera distribuida, automática, prácticamente instantánea.
Es evidente que por la dispersión geográfica de la red telefónica y de sus usuarios
existen muchas centrales locales. Las centrales locales están enlazadas entre sí
por medio de canales de mayor capacidad, de manera que cuando ocurran
situaciones de alto tráfico no exista un bloqueo considerable entre las centrales.
Existe una jerarquía entre las diferentes centrales que le permite a cada una de
ellas enrutar las llamadas de acuerdo con los tráficos que se presenten.
Los enlaces entre los abonados y las centrales locales son normalmente cables de
cobre, pero las centrales pueden comunicarse entre sí por medio de enlaces de
cable coaxial, de fibras ópticas o de canales de microondas. En caso de enlaces
entre centrales ubicadas en diferentes ciudades, se usan cables de fibras ópticas y
enlaces satelitales, dependiendo de la distancia que se desee cubrir. Como las
necesidades de manejo de tráfico de los canales que enlazan centrales de los
diferentes niveles jerárquicos aumentan conforme aumenta el nivel jerárquico,
también las capacidades de los mismos deben ser mayores en la misma medida.
IEL2-I-2004-38
16
La red telefónica está organizada de manera jerárquica. El nivel más bajo (las
centrales locales) está formado por el conjunto de nodos a los cuales están
conectados los usuarios. Le siguen nodos o centrales en niveles superiores,
enlazados de manera tal que entre cuanto sea la jerarquía, mayor será la
capacidad que los enlaza. Con esta arquitectura se proporcionan a los usuarios
diferentes rutas para colocar sus llamadas, que son seleccionadas por los nodos
mismos de acuerdo con criterios preestablecidos, tratando de que una llamada no
sea enrutada más que por aquellos nodos y canales estrictamente indispensables
para completarla, se trata de minimizar el número de canales y nodos por los
cuales pasa una llamada para mantenerlos desocupados en la medida de lo
posible.
El servicio que tradicionalmente ha sido ofrecido al público en general por medio
de la red pública telefónica, es el de comunicación de voz, es decir, la transmisión
bidireccional de señales de voz, con el objeto de que dos usuarios puedan
establecer y sostener una conversación. Este servicio tiene básicamente dos
componentes: la etapa de señalización, que incluye la selección del número del
destinatario, la identificación de una ruta por medio de la conmutación, la
reservación de la misma y el timbrado, y la etapa de transmisión, que consiste en
la conversión de las señales acústicas en señales eléctricas, su transporte a
través de los medios de comunicación, y la conversión de señales eléctricas
nuevamente en acústicas para ser entregadas al destinatario.
Considerando la amplia cobertura de la red telefónica y los desarrollos
tecnológicos de las últimas décadas, muchos esfuerzos se han dirigido hacia la
transmisión señales digitales sobre la misma infraestructura, lo cual aumenta la
cantidad de servicios ofrecidos por medio de esta red.
Las centrales modernas (los nodos de la red) están basadas en sistemas
totalmente digitales, lo cual contribuye a que se puedan ofrecer al usuario
servicios tan sencillos como conferencias de voz, transmisión de datos y
videoconferencias, y tan rudimentarios como dar de alta la línea de un nuevo
IEL2-I-2004-38
17
usuario, indicar el número que llama, transferir llamadas a otro número telefónico,
etc.
3.2. RADIODIFUSIÓN DE SEÑALES:
Dentro de estos servicios existen dos clases: los bidireccionales y los
unidireccionales. En los de tipo bidireccional está la operación de la telefonía
celular y los servicios personales de comunicación (PCS Personal Communication
System).
La telefonía celular surgió como un avance importante de la radiotelefonía
tradicional. En esta última, los conceptos de la red son muy similares a los de la
red telefónica pública, con la excepción de que el acceso a la red por parte del
usuario es por medio de un canal de radio. En el servicio tradicional de
radiotelefonía se cuenta con una sola estación base que realiza funciones de
transmisión y de repetición. En las transmisiones se utilizan potencias
extremadamente grandes, logrando así una gran zona de cobertura. Sin embargo,
si durante una conversación un usuario se sale de la zona de cobertura, la
conversación se interrumpe ya que este sistema no tiene capacidad de
conmutación. Cada usuario tiene asignado un canal de radio con una frecuencia
fija para acceder a la red, lo cual hace ineficiente el uso del espectro
radioeléctrico, ya que, si uno de los usuarios con canales asignados en algún
momento no lo utiliza, ese o esos canales estarían desocupados.
La radiotelefonía tradicional fue evolucionando hacia el concepto de "telefonía
celular", con base en dos objetivos: aumentar la calidad de los servicios que
pueden ser ofrecidos, y aumentar, compartiendo las frecuencias, la utilización del
espectro radioeléctrico, lo cual dio como resultado el aumento del número de
usuarios de la red.
El servicio para el que inicialmente fue concebida la radiotelefonía celular fue
similar al de la telefonía por medio de la red telefónica pública, es decir,
comunicaciones de voz, pero con esquemas de acceso similares a los de la
IEL2-I-2004-38
18
radiotelefonía tradicional, es decir, por medio de canales de radio. Las ventajas
que se esperaba que la telefonía celular tendría sobre la red telefónica tradicional
son la portabilidad (no requieren de un enlace de cable para tener acceso a la red
telefónica), que un equipo terminal puede desplazarse dentro del área de
cobertura sin interrumpir la comunicación, que por medio de un equipo de telefonía
celular se pueden establecer conversaciones con equipos telefónicos conectados
a la red telefónica tradicional, y que el número de usuarios de una red puede
aumentar casi sin límite debido a la posibilidad de reutilizar frecuencias, de reducir
tamaños de células y de explotar adecuadamente las complejas técnicas de
codificación.
La tecnología celular es diferente de los conceptos que la precedieron, al menos
en lo referente a la posibilidad de reutilizar frecuencias. Con sistemas
convencionales de radio, el objetivo era tener la mayor cobertura posible con cada
una de las estaciones fijas, usando antenas montadas en altas torres, con
potencias de transmisión grandes. A cada estación le corresponde un grupo de
canales y la configuración del sistema no cambia a lo largo del tiempo. Con las
redes celulares las potencias radiadas por las estaciones base se mantienen al
mínimo, de manera tal que, en combinación con antenas localizadas a las alturas
mínimas, se pueda garantizar la cobertura deseada con la calidad requerida. Con
ello se logra que muchas células no adyacentes usen las mismas frecuencias sin
interferir las transmisiones de unas con las de otras.
Debe estar claro que células geográficamente separadas sí pueden emplear los
mismos conjuntos de frecuencias sin que haya un efecto perjudicial entre las
conversaciones que las usen. La limitante que existe en cuanto al número de
usuarios del servicio en una célula se debe a la cantidad de frecuencias que se
tienen asignadas en esa célula. Sin embargo, si se reduce el tamaño de las
células, lo cual equivale a reducir el área de cobertura de las mismas (esto se
logra disminuyendo la potencia transmitida, la altura de las antenas de las bases o
ambas) se puede aumentar el número total de usuarios de una red, debido a que,
IEL2-I-2004-38
19
si bien el número de usuarios por célula no aumenta, sí se incrementa el número
total de células.
El servicio más importante que se ofrece por medio de una red celular es el de
comunicación de voz, el cual opera de la siguiente manera. En las llamadas
originadas en la unidad móvil, cuando un usuario activa su teléfono, se realiza un
proceso de búsqueda por el canal de control para identificar un canal con buena
recepción. Generalmente éste está asignado a la base más cercana. Esta
búsqueda es controlada por el equipo móvil y se realiza cuando el equipo no se
está utilizando en una conversación. Una vez identificado el canal que será
utilizado, la unidad móvil se considera inicializada y lista para establecer una
comunicación. Después de esto, se envía el número hacia la estación base,
misma que envía esta información a la unidad de conmutación, que es la
encargada de localizar la célula en la que está ubicada la unidad buscada. Una
vez identificada, se le asigna un canal, se le notifica que tiene una llamada y se
puede iniciar la conversación. Cuando la llamada se origina en un aparato de la
red pública telefónica, se hace llegar la solicitud a la central celular de
conmutación, la cual se encarga de localizar al usuario destino y de hacer la
señalización correspondiente. Al terminar una conversación, ambos usuarios
liberan los canales de radio asignados para esa conversación y las unidades
móviles reactivan el monitoreo de la calidad de los canales. Finalmente, si durante
la conversación de una unidad en movimiento se detecta que la unidad ha salido
de la zona de cobertura de una célula, el sistema le asigna a esta conversación
una nueva frecuencia y se realiza la nueva asignación sin que el usuario se
percate de ello.
Los PCS pueden ser caracterizados por lo siguiente:
o Utilizan una red de radio basada en microcélulas.
o Están basados en transmisiones digitales.
o Utilizan una banda de alta frecuencia (típicamente en 1.8-2 Ghz).
o Su mayor fortaleza no está en aplicaciones vehiculares.
IEL2-I-2004-38
20
o Son el primer paso hacia el objetivo de comunicación entre
personas, más que entre equipos terminales.
Los servicios bidireccionales tienen la característica común de que, a pesar de
tratarse de comunicación por radio, los equipos terminales de los usuarios son
direccionables, es decir, únicamente responden cuando en la información que
reciben identifican su propia "dirección electrónica". La direccionabilidad, concepto
fundamental tanto para servicios unidireccionales como para los bidireccionales,
consiste en que cada equipo receptor tiene grabado en su memoria un número de
identificación único, cuando se transmite una señal digital que contiene un
mensaje, éste va precedido por el número de identificación del usuario a quien va
destinado el mensaje. Todos los equipos dentro del área de cobertura reciben esta
señal, extraen del mensaje el número de identificación y lo comparan con el
número que tienen grabado en su memoria. Si ambos números coinciden,
entonces el equipo receptor activa sus circuitos para poder recibir el mensaje
completo; en caso contrario, hace caso omiso de lo que recibió y vuelve a su
estado de espera, verificando las direcciones cada vez que detecta un mensaje.
3.3. TEORIA DE GRAFOS5: Para poder simplificar las redes y transformarlas a un sistema matemático se
utiliza la representación por grafos. La Teoría de Grafos se encarga de establecer
los fundamentos y bases necesarias para resolver problemas de una determinada
complejidad a través de estructuras matemáticas cómo lo son los grafos. Los
fundamentos de esta teoría se basan en una serie de conceptos que se resumen a
continuación.
Se define grafo como una terna G = (V, E, f) donde V representa un conjunto de
vértices o nodos, E un conjunto de aristas o enlaces y f una aplicación que a cada
elemento de E le hace corresponder un par de elementos de V, es decir, a cada
arista le hacemos corresponder un par de vértices. 5 M.Romero Schmidtke, http://enciclopedia.us.es/index.php/Teor%EDa_de_grafos
IEL2-I-2004-38
21
La conexidad de un grafo determina la posibilidad de seguir caminos en grafos a
través de los enlaces. Si se puede llegar a un nodo desde otro cualquiera a través
de las aristas, respetando el sentido decimos que el grafo es conexo. Si hay
vértices inaccesibles, el grafo no es conexo.
Existen diversos algoritmos que ayudan a resolver diversos problemas en la teoría
de grafos, como caminos mínimos, flujos, Dijktra, Ford-Fulkerson, etc.
En un grafo la forma de los enlaces no son relevantes, sólo importan sus
extremidades; la posición de los nodos tampoco, y se puede variar para obtener
un grafo más claro. Estos cambios se llaman isomorfismos de grafos.
Generalmente, se considera que colocar los vértices en forma de polígono regular
da grafos más entendibles.
Figura 1. Isomorfismos
En la figura, V = { a, b, c, d, e, f }, y A = { ab, ac, ae, bc, bd, df, ef }.
Un ciclo es un camino, es decir una sucesión de aristas adyacentes, donde no se
recorre dos veces la misma arista, y donde se regresa al punto inicial. Un ciclo
hamiltoniano tiene además que recorrer todas los vértices. Se habla también de
camino hamiltoniano si no tiene que regresar al punto de partida.
IEL2-I-2004-38
22
Un grafo que no tiene circuito y que conecta a todos los puntos, se llama un árbol:
Figura 2. Grafo tipo árbol
En un grafo con n nodos, los árboles tienen exactamente n - 1 enlaces, y hay nn-2
árboles posibles. Los árboles son grafos que conectan nodos utilizando el menor
número posible de enlaces, de ahí su interés concreto.
En muchos problemas reales, a cada arista se le es asignado un número
específico, llamado coste, según el contexto, y se obtiene así un grafo valuado.
Formalmente, es un grafo con una función f: A → R+. Estos coste permiten dar
pesos a cada uno de los ejes que constituyen un grafo, esto facilita a los diversos
algoritmos tener en cuenta algunas de las características de los enlaces y la
complejidad de ir entre ellos y obtener así la ruta más corta entre nodos, o también
la ruta de mejor desempeño.
Se nota Kn el grafo completo con n nodos, es decir, en el cual cada par de nodos
están conectados por un enlace. Kn,p es el grafo compuesto de un grupo de n
vértices y otro de p, tal que cada vértice del primer grupo está conectado con cada
del segundo, y no hay más aristas.
Figura 3. Distancia entre nodos.
IEL2-I-2004-38
23
En un grafo, La distancia entre dos nodos es el menor número de enlaces de un
recorrido entre ellos. El diámetro, en una figura como en un grafo, es la mayor
distancia entre dos puntos de la misma. El diámetro de los Kn es 1, y el de los Kn,p
es 2. Un diámetro infinito puede significar que el grafo tiene una infinidad e
vértices o simplemente que no es conexo. También se puede considerar el
diámetro promedio, como el promedio de las distancias entre dos vértices.
IEL2-I-2004-38
24
4. MODELAMIENTO 4.1. CONDICIONES INICIALES: Para plantear el modelo del proyecto, primero se deben hacer unos ajustes de los
criterios básicos de redes de telecomunicaciones, estableciendo así las
restricciones del modelo. Los diferentes criterios y su manejo se describen a
continuación:
• Tipo de red: El software esta dirigido para redes de telecomunicaciones
tipo WAN, debido a que un análisis de confiabilidad es una herramienta de
mayor provecho para grandes empresas de telecomunicaciones
interesadas en el rendimiento, la confiabilidad y seguridad de la red. Sin
embargo, el software puede ser utilizado también para otro tipo de redes de
menor alcance o sistemas afines evaluados mediante teoría de grafos, en
caso que se encuentre útil la información que brinda el mismo.
• Dimensiones de la red: La red a simular puede contener un máximo de
15 enlaces (inicialmente para evaluar el peso de la carga computacional).
• Demanda y tráfico de la red: En este caso la demanda es la capacidad
pico requerida por los usuarios de la red representada en una distribución
Gaussiana (probabilística), o un valor pico (determinística).
Figura 4. Distribución Normal6
6 Tomado de Presentación curso de Confiabilidad. P.hD. Alvaro Torres M.
IEL2-I-2004-38
25
• Capacidad: La capacidad de los enlaces esta dada en unidades de bits por
segundo, en este caso no se utilizan unidades globales sino que se advierte
manejar todas las capacidades en la misma escala de unidades.
• Tiempo de simulación: Para el tiempo se depende de las unidades de las
tasas de falla y reparación, aunque para mayor facilidad a la hora de tabular
los resultados y analizarlos se pedirá que introduzcan los datos en años.
• Tipo de enlaces: Los enlaces de la red se definen según el sistema que se
esté simulando, sin embargo se pueden simular tanto unidireccionales
(comunicaciones half duplex) como bidireccionales (full duplex).
• Fallas simultáneas: La simulación de MonteCarlo no contempla la
simultaneidad de eventos de falla, sin embargo si contempla aquellos
eventos en que dos o más enlaces de la red se encuentren fallando al
mismo tiempo.
• Datos de entrada:
Para nodos:
Tipo de Nodo: Nodo fuente, de transición o sumidero.
Para enlaces:
Tasa de Falla (λ): Esta es una propiedad intrínseca del enlace, se
mide en años y sirve para calcular los tiempos de falla del enlace.
Tasa de reparación (µ): Esta es una propiedad intrínseca del enlace,
se mide en años y sirve para calcular los tiempos de reparación del
enlace.
Capacidad: Es la capacidad de transporte de información disponible
que posee el enlace.
IEL2-I-2004-38
26
Para simular:
Tiempo de simulación: Este tiempo indica la duración en años que va
a ser simulada la red mediante MonteCarlo.
Capacidad requerida: Es la capacidad pico requerida del sistema.
Desviación estándar: Es la desviación estándar de la capacidad
requerida, con este dato y con la capacidad requerida del sistema se
genera la distribución Gaussiana con la cual se modela la demanda
de la red.
• MonteCarlo7: Para utilizar el método de MonteCarlo, se va a implementar
la simulación secuencial de MonteCarlo utilizando el método del próximo
evento; mediante λ o µ (depende del estado de falla o de reparación), se
determina el tiempo de la próxima transición para cada componente. El
tiempo menor indica el siguiente evento y el componente al que le
corresponde ese tiempo entonces hace un cambio de estado. Si el evento
indica un cambio de estado del sistema (una falla o un restablecimiento),
entonces los índices del sistema se actualizan. 4.2. ENRUTAMIENTO8:
Los algoritmos de enrutamiento son los encargados de establecer la ruta más
adecuada para la transmisión de los diferentes paquetes en una red. Sin importar
la ruta que sea elegida para el envío de paquetes o si se establecen nuevas
conexiones un algoritmo de enrutamiento se debe caracterizar por su simplicidad,
robustez, estabilidad y facilidad de corrección, a se vez debe de ser imparcial en la
asignación de rutas y óptimo. Un algoritmo de enrutamiento debe de ser capaz de
7 Alvaro Torres M. Ph.D, Curso de Confiabilidad. Universidad de los Andes, Enero de 2004 8 “Computer Networks”, Andrew Tanenbaum, Prentice Hall, 4a edición, 2003.
IEL2-I-2004-38
27
sobrevivir a los diferentes cambios en la topología de las redes como también del
tráfico en las mismas, sin que haya la necesidad de reiniciar los equipos.
Los algoritmos de enrutamiento se clasifican en dos grupos:
- Algoritmos no adaptativos: Estos algoritmos no toman en cuenta alguna
medida o estimación del tráfico de la red o de su topología para la toma
de decisiones. Para elegir una ruta de un punto a otro para todo los
paquetes entre estos puntos, se calcula cuando la red esta off-line y es
tomada por los enrutadores cuando la red es iniciada, esto se conoce
como enrutamiento estático.
- Algoritmos Adaptativos: En este caso los algoritmos cambian sus
decisiones de acuerdo a los cambios en su topología como también del
tráfico de la red. Estos algoritmos se diferencian en donde ellos obtienen
la información (Datos locales, de enrutadores cercanos o de todos los
enrutadores), o también cuando hay un cambio de ruta (cada ∆T,
cuando la carga o la topología cambia) o la manera de determinar el
camino óptimo (distancia, número de saltos, o tiempo estimado de
transporte).
4.2.1. Principio de optimalidad:
Existe un principio general para determinar la ruta más corta sin hacer uso de la
topología de la red o del tráfico presente en ésta, y es conocido como principio de
optimalidad. Este principio dice si J está en la ruta óptima de I a K, la ruta óptima
de J a K hace parte de la misma ruta. Como consecuencia de este principio se
puede observar que las rutas óptimas desde todas las fuentes a un lugar de
destino dado forman un árbol ramificado cuya raíz es el punto de destino.
IEL2-I-2004-38
28
4.2.2. Algoritmos de enrutamiento:
En el momento en que ocurre una falla de alguno de los enlaces de la red, el
sistema debe generar nuevos caminos de conexión para evitar desconexiones y
perdidas de información, es por esto que se debe examinar la forma de generar
caminos alternos cada vez que ocurra una contingencia en el sistema; Los
algoritmos de enrutamiento sirven en el proyecto para resolver problemas de
programación lineal, los cuales se hacen presentes en dos aspectos básicos:
• Costos del canal: Al existir una falla o una contingencia en el sistema, uno
de los aspectos que se debe hacer al reenrutar las conexiones caídas es
examinar los canales que permitan restablecer la mayor cantidad de
conexiones del sistema y que a la vez tengan el mínimo impacto económico
para la empresa. Es por esto que este problema de optimización busca los
caminos que generen el costo mínimo, sin importar la cantidad de demanda
restablecida.
• Flujo máximo restablecido: En este caso lo que se busca es maximizar el
flujo en la red, es decir que se busca la mínima perdida de capacidad del
sistema, sin restricciones de tipo económico, por lo que todo el esfuerzo
computacional se concentra en tener pérdidas mínimas a unos costos
tentativamente elevados.
Lo siguiente es examinar más profundamente estas dos posibilidades.
4.2.2.1. Selección de la ruta más corta:
El problema de la ruta más corta se puede resolver utilizando programación lineal
sin embargo, debido a que el método simplex es de complejidad exponencial, se
prefiere utilizar algoritmos que aprovechen la estructura en red que se tiene para
estos problemas.
IEL2-I-2004-38
29
Una red de telecomunicaciones involucra un conjunto de nodos conectados
mediante enlaces, que transfieren información desde determinados nodos origen a
otros nodos destino. La forma más común para seleccionar la ruta óptima se basa
en la formulación de la ruta más corta. En particular a cada enlace se le asigna un
escalar positivo el cual se puede ver como su longitud o su costo dentro de la red.
Un algoritmo de trayectoria más corta enruta cada lazo a lo largo de la trayectoria
de longitud mínima (ruta más corta) entre los nodos origen y destino. Hay varias
formas posibles de seleccionar la longitud de los enlaces. La forma más simple es
que cada enlace tenga una longitud unitaria, en cuyo caso, la trayectoria más corta
es simplemente una trayectoria con el menor número de enlaces. De una manera
más general, la longitud de un enlace puede depender de su capacidad de
transmisión y su carga de tráfico.
La solución a este problema es encontrar la trayectoria más corta, esperando que
dicha trayectoria contenga pocos enlaces no congestionados; de esta forma los
enlaces menos congestionados son candidatos a pertenecer a la ruta.
Hay algoritmos de enrutamiento especializados que también pueden permitir que
la longitud de cada enlace cambie en el tiempo, dependiendo del nivel de tráfico
de cada enlace. De esta forma un algoritmo de enrutamiento se debe adaptar a
sobrecargas temporales y enrutar paquetes alrededor de nodos congestionados.
• Algoritmo de Dijkstra9:
Este algoritmo encuentra la ruta más corta entre dos nodos, inicial a y final z, de la
siguiente manera:
Los nodos de la red son etiquetados con números. Al principio, todos tienen la
etiqueta 00 excepto el nodo inicial a que tiene la etiqueta 0. Los arcos tienen un
peso positivo Wij que representa la distancia del enlace (i, j). El algoritmo de
9 http://www.guides.sk/suuri/Dijkstra.html
IEL2-I-2004-38
30
Dijkstra renumera los nodos, de manera que cuando el nodo z tiene una etiqueta
permanente, se ha obtenido la solución final.
El algoritmo mantiene un grupo de nodos cuyos pesos finales en la ruta menor ya
han sido calculados, así como un grupo complementario de nodos en lo que
todavía no ha sido determinado. El algoritmo selecciona repetidamente el nodo
con el mínimo camino estimado entre aquellos nodos en los cuales todavía no se
había determinado el peso. Esto actualiza los pesos estimados de todos los nodos
adyacentes al nodo seleccionado. El nodo es entonces agregado al grupo de
nodos con el peso del camino más corto ya calculado.
Se continúa haciendo esto hasta que todos los nodos y sus caminos más cortos
han sido calculados.
1. es el conjunto de nodos para los cuales la distancia de a ha sido
calculada.
2. es el conjunto de nodos para los cuales la distancia de a no ha
sido calculada.
3. es el estimado actual del peso que existe entre el nodo y el
nodo .
4. es un predecesor de . Es el nodo por el cual se ha
establecido la distancia más corta de a .
Mientras { buscar con el menor
Para todo
IEL2-I-2004-38
31
Si
El tiempo requerido por el algoritmo de Dijkstra es O(|V|2).
4.2.2.2. Algoritmo para encontrar los cortes mínimos (Flujo máximo):
En este caso se utilizará el algoritmo de Ford-Fulkerson, un algoritmo simplex que
al ser aplicado a la programación lineal para resolver el problema de flujo máximo
en la red también encontrará el flujo optimo de la misma, esto ocurre de la
siguiente manera:
Se arranca por un flujo vacío que progresivamente se irá mejorando, también se
tiene unas capacidades Cu,v. Se puede buscar un camino entre dos puntos S y T
y mover el flujo a lo largo de esta ruta de valor total igual a la mínima capacidad de
un extremo de la ruta. Esta es la primera iteración.
La capacidad encontrada C va a ser tomada como la capacidad mínima a lo largo
de la ruta.
Para cada extremo de la ruta hay que restarle a Cu,v el valor de C, aumentar el
lazo Lu,v el valor de C y incrementar Cv,u el valor de C (si el extremo (v,u) no
existe en el grafo hay que crearlo).
Luego deben borrarse las puntas con capacidad cero y volver al paso en que se
busca una ruta de S a T y repetir hasta llegar a la solución optima.
IEL2-I-2004-38
32
4.2.2.3. Selección del algoritmo: Para el enfoque que tiene el proyecto y los conocimientos básicos de una red se
concluyó que es mejor centrar esfuerzos en maximizar el flujo de datos por la red y
utilizar el Algoritmo de Ford-Fulkerson ya que es un algoritmo sencillo que cumple
con las necesidades del proyecto y ya ha sido trabajado en cursos anteriores. La
razón por la cual se descarta el enfoque hacia los costos del enlace es que es muy
difícil obtener costos reales para simular y las pérdidas monetarias por datos
(demandas, multas, abogados, perdida de clientes, etc.) podrían superar
fácilmente los ahorros en los costos de los enlaces.
Lo ideal sería lograr un equilibrio entre los costos y las perdidas pero para esto
se requiere tener un mayor conocimiento del sistema y por esto mismo el uso de
esta herramienta exigiría un conocimiento muy completo de la red a la persona
que lo quiera usar, restringiendo así al usuario.
4.3. Indicadores: Para obtener los resultados del análisis se utiliza el modelo de confiabilidad de
esfuerzo-resistencia para poder generar la probabilidad de falla probabilística y
determinística. Como la función de distribución es discreta, en lugar de efectuar
una integral se realiza una sumatoria.
Figura 5. Modelo Esfuerzo-Resistencia y Probabilidad de Falla10
10 Tomado de Presentación curso de Confiabilidad. P.hD. Alvaro Torres M.
IEL2-I-2004-38
33
5. SIMULACION 5.1. MACROALGORITMO: El software de simulación trabaja siguiendo el siguiente macro algoritmo:
Almacenamiento de la información de entrada dada por el usuario.
Lectura de datos del archivo de simulaciones en Excel para MonteCarlo
Generación una tabla en Excel para la simulación en el tiempo de los casos
Aplicación de la función Ford-Fulkerson para encontrar la capacidad
máxima en cada uno de los casos.
Generación de los datos de salida (las probabilidades y parámetros de
confiabilidad).
5.2. MÉTODO DE MONTECARLO: Se decidió para este proyecto implementar el método de MonteCarlo secuencial
usando el método del próximo evento, por medio de la herramienta computacional
Excel de la siguiente manera:
Se genera una tabla con tasas de falla (λ) y de reparación (µ) para cada
uno de los nodos del grafo.
Se utiliza otra tabla con todos los elementos de la red (nodos) y se genera
N par de números aleatorios (dependiendo del tiempo de simulación) por
cada tiempo de vida m y de reparación r. Estos van a representar las
probabilidades de falla y de reparación para cada elemento.
Una tercera tabla calcula los tiempos de falla y de reparación para cada uno
de los elementos, mediante el uso de las siguientes ecuaciones:
M= -Ln(Aleatorio1)/(λ)
R= -Ln( Aleatorio2)/(µ)
IEL2-I-2004-38
34
Los tiempos de falla se pasan nuevamente al programa principal en Visual
Basic y mediante una función, se discretizan los tiempos y se obtiene la
secuencia de fallas y reparaciones para cada uno de los enlaces de la red. 5.3. ALGORITMO DE FORD-FULKERSON: El programa que corre el algoritmo de Ford-Fulkerson está implementado en C++
ya que por tratarse de un algoritmo con alta complejidad matemática es difícil de
implementar directamente desde Visual Basic, por esto se invocará desde el
programa principal como una subrutina. El programa se presenta a continuación:
#include <stdio.h> #define WHITE 0 #define GRAY 1 #define BLACK 2 #define MAX_NODES 100 #define oo 1000 int n; // Numero de nodos int e; // Numero de enlaces int capacity[MAX_NODES][MAX_NODES]; // Matriz de capacidad int flow[MAX_NODES][MAX_NODES]; // Matriz de flujos int color[MAX_NODES]; // características de los nodos int pred[MAX_NODES]; // vector para almacenar los caminos de aumento int min1(int x, int y) { return x<y ? x : y; // Retorna el mínimo entre x y y } int head,tail; int q[MAX_NODES+2]; void enqueue (int x) { q[tail] = x; tail++; color[x] = GRAY; } int dequeue () { int x = q[head];
IEL2-I-2004-38
35
head++; color[x] = BLACK; return x; } int bfs (int start, int target) { int u,v; for (u=0; u<n; u++) { color[u] = WHITE; } head = tail = 0; enqueue(start); pred[start] = -1; while (head!=tail) { u = dequeue(); // Busca todos los nodos blanco adyacentes v. Si la capacidad // de u a v en la red residual es positiva, pone en cola v. for (v=0; v<n; v++) { if (color[v]==WHITE && capacity[u][v]-flow[u][v]>0) { enqueue(v); pred[v] = u; } } } // Si el color del nodo objetivo es negro ahora, // esto significa que fue alcanzado return color[target]==BLACK; } int max_flow (int source, int sink) { int i,j,u; // Inicializa el flujo int max_flow = 0; for (i=0; i<n; i++) { for (j=0; j<n; j++) { flow[i][j] = 0; } } // Mientras exista un camino de aumento, // incrementa el flujo a través de este camino while (bfs(source,sink)) { // Detemina la cantidad por la cual incrementamos el flujo int increment = oo; for (u=n-1; pred[u]>=0; u=pred[u]) { increment = min1(increment,capacity[pred[u]][u]-flow[pred[u]][u]);
IEL2-I-2004-38
36
} // Incrementa el flujo. for (u=n-1; pred[u]>=0; u=pred[u]) { flow[pred[u]][u] += increment; flow[u][pred[u]] -= increment; } max_flow += increment; } // no hay mas caminos de aumento, devuelve el flujo máximo return max_flow; } void read_input_file() { int a,b,c,i,j; FILE* input = fopen("\\mf.in","r"); // lee el numero de nodos y enlaces fscanf(input,"%d %d",&n,&e); // inicializa la matriz de capacidades for (i=0; i<n; i++) { for (j=0; j<n; j++) { capacity[i][j] = 0; } } // lee las capacidades de los enlaces for (i=0; i<e; i++) { fscanf(input,"%d %d %d",&a,&b,&c); capacity[a][b] = c; } fclose(input); } int main () { read_input_file(); return max_flow(0,n-1); } 5.4. RESULTADOS: Al concluir la simulación, el programa arroja una serie de resultados útiles para el diseño de redes, mostrando el comportamiento del sistema a través del tiempo simulado, entregando unas gráficas de distribución de probabilidades y una tabla de resultados que se explican a continuación.
• Gráficos: El resultado gráfico de la simulación se divide en dos partes, la parte superior corresponde a una gráfica donde se muestra la función de distribución de probabilidad de la carga disponible del sistema, al hacer clic
IEL2-I-2004-38
37
sobre cada una de las barras de colores de la gráfica se muestra la capacidad disponible del sistema y la probabilidad acumulada de ocurrencia de esa carga. Con esta gráfica el ingeniero puede determinar que capacidad es más probable, o que rangos de capacidades son más probables en el sistema, mirando la pendiente de la curva.
La parte inferior de la ventana muestra la función de distribución de probabilidad de la carga en el tiempo. Esta gráfica ilustra el comportamiento del sistema en el dominio del tiempo (los años que dure la simulación).
Figura 6. Graficas del simulador
• Tabla de resultados: En la tabla de resultados se pueden ver los
parámetros básicos de simulación ingresados por el usuario que son el
tiempo de simulación en años el cual va a determinar el tiempo real de
simulación del programa, la capacidad requerida es un parámetro para
definir la distribución Gaussiana y la desviación estándar también, se
utilizan para generar el modelo de demanda del sistema.
IEL2-I-2004-38
38
Las medidas que arroja el programa como resultados numéricos son la
confiabilidad y la probabilidad de falla para el caso determinístico.
El valor de la confiabilidad se obtiene empleando la probabilidad de falla del
sistema en el caso estocástico como 1-P(falla), esto se logra empleando el
principio del modelo esfuerzo-resistencia. Para hallar este valor, la tasa de
reparación se tomó variable en el tiempo (es decir que se pueden demorar las
reparaciones más en unos eventos que en otros) y por tanto no se puede
generalizar el problema y se hace necesario efectuar estas simulaciones para
encontrar el valor de la confiabilidad. Al aumentar el tiempo de simulación el
esfuerzo computacional sube considerablemente pero el valor obtenido de
confiabilidad es más exacto.
La probabilidad de falla determinística se encuentra contando el número de
casos para los cuales la capacidad requerida es mayor que la capacidad
disponible y se divide por el número total de casos simulados. Como la
demanda del sistema no es constante entonces es mejor tomar un valor
estocástico de la capacidad requerida pero para fines de simplificar el
problema se puede hacer uso de un valor constante. El simulador puede
utilizar cualquiera de las dos opciones, debido a que al conocer la probabilidad
de falla del caso determinístico se puede calcular también la confiabilidad por
este método.
Figura 7. Tabla de resultados del simulador
IEL2-I-2004-38
39
5.5. EJEMPLOS: A continuación se presentan un par de ejemplos para mostrar el funcionamiento del programa. 5.5.1. Ejemplo 1:
Figura 8. Ejemplo 1
Cada enlace está caracterizado por: Capacidad, tasa de reparación, tasa de falla
(C, µ,λ). La implementación del grafo en el programa resulta así:
Figura 9. Grafo esquemático del simulador
s
b
t
a
10,1,0.1
7,1,0.2
5,1,0.3 6,1,0.1
3,1,0.3
5,1,0.1
IEL2-I-2004-38
40
Después de correr el programa, la simulación arrojó los siguientes resultados:
Figura 10. Resultados de la simulación
Esto quiere decir que se simularon 50 años, la capacidad requerida por el sistema
era de 3 con una desviación estándar de 2, el sistema arrojó una confiabilidad del
sistema de 54.47% respecto a la capacidad requerida y la probabilidad de falla
determinística es del 8% por lo que se puede decir que el sistema no es muy
confiable para cumplir con la capacidad requerida pero tampoco sus enlaces son
susceptibles a fallas.
5.5.2. Ejemplo 2:
Figura 11. Ejemplo 2
s
c d
t
a b
16
13
10 4
12
14
9 7
20
4
IEL2-I-2004-38
41
En este caso las tasas de falla son 0.1 y las de reparación 1 para todos los enlaces de la red.
La implementación del grafo en el programa resulta así:
Figura 12. Grafo esquemático del simulador Después de correr el programa, la simulación arrojó los siguientes resultados:
Figura 13. Resultados de la simulación Esto quiere decir que se simularon 50 años, la capacidad requerida por el sistema
era de 10 con una desviación estándar de 5, el sistema arrojó una confiabilidad del
sistema de 51.87% respecto a la capacidad requerida y la probabilidad de falla
determinística es del 90% por lo que se puede decir que el sistema no es muy
confiable y es muy susceptible a fallas.
IEL2-I-2004-38
42
6. CONCLUSIONES El desarrollo de este proyecto desde su etapa básica de modelamiento permitió
trabajar con una metodología flexible y abierta para poder acondicionar al
programa los diferentes cambios que iban surgiendo a medida que se avanzaba
en el trabajo del mismo, así como se presta actualmente para modificaciones
dependiendo de las necesidades del usuario.
El uso de la herramienta de programación Visual Basic fue de gran importancia
pues fue utilizado como lenguaje base del software de simulación. Además, el
esfuerzo computacional fue complementado con el uso de Excel, ya que para
facilitar la interpretación de los datos al usuario se entregar los resultados
debidamente tabulados en hojas de cálculo para poder analizar paso a paso el
comportamiento del sistema.
La simplificación del modelo permitió que este se pudiera implementar en el
lenguaje de programación sin muchos contratiempos y sin perder la consistencia
del sistema ni la validez del análisis.
La aproximación a otro problema como lo es el tráfico de redes nos ayudó a ver
que el proyecto que escogimos abarca otros temas con los que se puede trabajar
también ampliamente para hacer una herramienta más real y generar un modelo
más completo, que se ajuste a usuarios más avanzados.
La implementación del método de MonteCarlo es un concepto importante para
este tipo de proyecto, pues el uso de este método de simulación permite obtener
un análisis de confiabilidad adecuado, ahorrando esfuerzo computacional.
En el proceso de evaluación de la confiabilidad de redes de telecomunicaciones,
los algoritmos de enrutamiento permiten analizar el comportamiento de la red ante
una falla.
IEL2-I-2004-38
43
A su vez estos algoritmos son de gran ayuda al evaluar la robustez y desempeño
de la red, proporcionando una medida de la confiabilidad por medio de la
capacidad. Estos algoritmos estudiados unidos con la teoría de confiabilidad
permitieron realizar el análisis de confiabilidad en el proyecto.
Al comparar las diferentes opciones de algoritmos para reenrutar los datos en
caso de presentarse fallas en algún enlace, establecimos dos enfoque para
resolver nuestro proyecto, la minimización de costos post falla sin importar las
perdidas de información de la red y la maximización del flujo de datos por la red
sin importar los costos nuevos de transmisión. Sin dejar totalmente de lado la
optimización para minimizar costos de enrutamiento, vimos que en nuestro caso
era más importante el problema de maximizar el flujo por la red en caso de una
contingencia para evitar perdidas de información, posibles multas por negligencia
del servicio, descontento de los clientes por las fallas en el servicio de
comunicaciones, etc. La idea a futuro es buscar un equilibro entre los costos del
canal y la capacidad máxima de transmisión para lograr beneficios equitativos
tanto para usuarios como para las empresas de telecomunicaciones, aunque para
esto pensamos que se deben conocer mejor las condiciones de mercado y
efectuar un análisis económico para mirar la viabilidad de abarcar este problema.
Con el desarrollo de este software de simulación, llegamos a lograr una
herramienta sencilla y práctica, que puede ser utilizada por estudiantes
interesados temas de confiabilidad, comunicaciones y algoritmos de optimización y
de grafos. Así mismo profesionales e Ingenieros encontrarán en el programa una
herramienta que facilitará su trabajo para el diseño de redes al brindarles un
análisis de confiabilidad completo, además de indicadores útiles para usar en
diferentes diseños y modelos.
IEL2-I-2004-38
44
7. TRABAJO FUTURO
La idea a futuro es buscar un equilibro entre los costos y la capacidad
máxima de transmisión para lograr beneficios equitativos tanto para
usuarios como para las empresas de telecomunicaciones. Es necesario
analizar la viabilidad de incluir costos en los análisis.
Es importante agregar la opción al programa de señalar el conjunto de
nodos para los cuales se desea evaluar la confiabilidad, con eso no se
restringe el análisis a los nodos fuente y sumidero, sino que se puede
evaluar también el comportamiento de caminos intermedios de la red, a fin
de lograr un análisis mas completo.
Es necesario implementar otros algoritmos de enrutamiento alternos que
funcionen bajo nuevos criterios del modelo y que permitan un análisis mas
completo o análisis con diferentes enfoques.
IEL2-I-2004-38
45
8. BIBLIOGRAFIA
• A. Mauttone. “Método RVR en la simulación de medidas de confiabilidad en redes”, Departamento de Investigación Operativa, Instituto de Computación, Facultad de Ingeniería, Universidad de la República, Montevideo, Uruguay.
• O. Ponce,
http://delta.cs.cinvestav.mx/~mcintosh/oldweb/s1998/oscar/node3.html
• F. Kuhlman, A. Alonso. Información y telecomunicaciones. FCE, México 1997
• M.Romero Schmidtke, http://enciclopedia.us.es/index.php/Teor%EDa_de_grafos
• A. Torres, Presentaciones Curso de confiabilidad.
• A. Tanenbaum, “Computer Networks”, Prentice Hall, 4a edición, 2003.
• M. Anzola, “Modelo para el dimensionamiento de una red de reserva de
transmisión de telecomunicaciones con base en criterios de demanda y confiabilidad”, Universidad de los Andes, Bogotá, Colombia.
• Algoritmos, http://www.guides.sk/suuri/Dijkstra.html
• C. Colbourn, “Reliability issues in telecommunications network planning”,
University of Vermont.
• A. Buchsbaum, M. Mihail. “Monte Carlo and Markov chain techniques for network reliability and sampling. Septiembre 1992.
• C. Lucet, J. Manouvrier. “Exact methods to compute Network Reliability”.
• H. Cancela, “An algorithm to compute the all-terminal reliability measure”.
• H. Cancela, “On the RVR simulation algorithm for network reliability
evaluation”.
• J. Manouvrier, C. Lucet. “Resolving the network reliability problem with a tree decomposition of the graph”.
• A. Roberto, A. Lino. “Grafos 2001”, Escola Superior de Gestão de
Santarém.
IEL2-I-2004-38
46
9. APENDICE 9.1. MANUAL DEL USUARIO:
MANUAL SIMULADOR DE CONFIABILIDAD DE REDES DE TELECOMUNICACIONES
La idea principal de este programa es proporcionarles a los ingenieros de diseño
de redes de telecomunicaciones parámetros para la toma de decisiones en el
momento de diseñar una red y adicionalmente crear un nuevo parámetro para
medir la robustez y confiabilidad del sistema diseñado.
El simulador de confiabilidad de redes de telecomunicaciones esta conformado por
una barra de opciones en donde se encuentra: “File”, “Add” y “Tools”. Además
encontramos dos íconos que representan “Agregar nodo” y “Agregar enlace”, por
último se encuentra el botón “Simular” que ejecuta el programa una vez se
ingresen los datos. En la figura siguiente se puede observar estas características
del programa.
IEL2-I-2004-38
47
Al hacer click sobre la opción “File” se despliega un menú que tiene las opciones
de “New” para crear un archivo nuevo y borrar lo que se encuentre en pantalla. La
segunda opción es “Open” que corresponde a abrir un archivo existente, la tercera
corresponde a “Save” para guardar lo que se esta haciendo y por último se
encuentra “Exit” para salir del programa sin guardar lo que se ha hecho.
La segunda opción en la barra del menú es “Add” la cual sirve para agregar
elementos nuevos, en este caso agrega nodos y enlaces. La opción “Add” tiene la
misma respuesta que hacer click sobre las imágenes de la izquierda. En la
siguiente gráfica se muestra el menú y las opciones que se despliegan al hacer
click.
IEL2-I-2004-38
48
La tercera opción en la barra de menú es “Tools” donde se muestra la opción
“Options” para configurar los datos de la simulación por medio de la siguiente
ventana:
En esta ventana se muestra el tiempo de simulación que esta dado en años, la
capacidad requerida entre un par de nodos y la desviación estándar de la
capacidad requerida. Estas opciones permiten determinar las simulaciones
requeridas para cumplir con estos requisitos, si no se ingresan estos parámetros
no es posible realizar el proceso de simulación. Es preferible emplear números
enteros para los datos de simulación ya que implicaría una mayor complejidad de
los cálculos.
En la parte de resultados se muestra las gráficas de las simulaciones, en particular
las curvas correspondientes a la función de distribución de la capacidad disponible
entre un par de nodos en el tiempo y función acumulada de la probabilidad en
función de las capacidades. La opción del archivo en Excel permite ver la ruta
donde se guardó el archivo de Excel correspondiente a los resultados obtenidos
de la simulación en el tiempo.
IEL2-I-2004-38
49
En la opción abrir del menú se puede encontrar una ventaja emergente que
permite ubicar el archivo para abrir, se busca y se hace click sobre “open” para
cargarlo, como se muestra a continuación.
IEL2-I-2004-38
50
Un ejemplo de esto lo podemos ver en la figura siguiente:
Para crear un modelo:
Se puede hacer click sobre el icono con forma de computador o en “Add” “Nodo”
para agregar un nodo nuevo. Esto genera una ventana donde se escoge el tipo de
nodo, ya sea fuente, transición o sumidero. A continuación se muestra la ventana
que se despliega.
IEL2-I-2004-38
51
Los nodos que se pueden ubicar en la ventana son los siguientes, que
corresponden a fuente, sumidero y transición:
Para eliminar un nodo se presiona la tecla “Suprimir” o “Delete” adicionalmente
elimina los enlaces que estén cercanos. Cada nodo tiene diferentes
configuraciones de entradas y salidas dependiendo del tipo de nodo (fuente,
transición y sumidero).
Un ejemplo se muestra a continuación:
Para este ejemplo se agregan los nodos empezando por el nodo fuente y
terminando por el nodo sumidero, para este ejemplo se ubican primero los nodos y
luego los enlaces.
IEL2-I-2004-38
52
Luego se agrega un enlace entre el par de nodos agregados y se abre un cuadro
que permite ingresar los valores de capacidad, tasa de falla y tasa de reparación.
Estos parámetros están dados en años y la capacidad en kbytes/segundo.
Como resultado de este procedimiento se obtiene la siguiente gráfica donde se
ubican los enlaces y los nodos.
IEL2-I-2004-38
53
Para realizar la simulación es necesario ingresar los datos de tiempo de
simulación, capacidad requerida y desviación estándar. Si no se ingresan estos
parámetros se muestra un mensaje de error; de la misma manera, si no se tienen
nodos o enlaces en el sistema el programa no permite simular.
En este caso se agregan los parámetros adecuados y se carga un ejemplo
diseñado con anterioridad y se hace clic en el comando “Simular”. Esta opción
despliega una barra de proceso que se encarga de mostrar la etapa del proceso
en la que se encuentra el programa.
Luego de la simulación aparece un mensaje para guardar los datos de la
simulación en un archivo de Excel en donde aparecen los estados de los enlaces y
las capacidades en cada uno de los estados.
IEL2-I-2004-38
54
Adicionalmente, como resultado de la simulación se muestran las gráficas de
distribución de la capacidad disponible y una curva de la capacidad acumulada en
el tiempo.
IEL2-I-2004-38
55
Al hacer clic en el botón aceptar se muestran los resultados de la confiabilidad, la
probabilidad de falla y los parámetros de simulación como el tiempo de simulación,
la capacidad requerida y la desviación estándar.
IEL2-I-2004-38
56
Modificar datos ingresados
Para cambiar datos de un modelo guardado se hace clic sobre el botón “Datos”
que se encuentra ubicado en el lado izquierdo, en la parte superior del programa.
Al hacer clic se abre una ventana con la información del modelo ingresado.
En la tabla se muestran los enlaces en el orden en que fueron ingresados, se
muestra el valor de lambda, miu, el nodo de inicio, el nodo de llegada y la
capacidad del enlace.
Para modificar estos datos se hace clic sobre el número del enlace que se quiere
modificar. Al hacer clic sobre el número este se resalta y a continuación se
escriben los parámetros a actualizar (Lambda, Miu y Capacidad), si no se ingresa
alguno de estos no se modifica. Luego del ingreso de estos parámetros se hace
clic en actualizar y este actualiza la tabla pero no cambia el archivo por lo cual es
necesario guardar cuando se quieran cambiar estos parámetros para la próxima
vez que se cargue el modelo.
IEL2-I-2004-38
57
A continuación se muestra un cambio en los valores del enlace 1 en donde se
cambia lambda de 1 a 0.1 y miu de 0.5 a 1
Antes de modificar
Después de modificado
IEL2-I-2004-38
58
9.2. CODIGO DEL PROGRAMA: FORM1 Dim Var As Integer 'example1.dll Funcion encargada de calcular la capacidad maxima 'por medio del algoritmo de Ford Fulkerson 'Recibe un archivo con los enlaces disponibles 'Devuelve la capacidad máxima Private Declare Function main Lib "example1.dll" () As Integer Dim dato(1 To 10000) As Integer Dim eliminar(1 To 100) As Integer '100 numero de nodos 'Elementos para crear un libro nuevo en Excel Option Explicit ' Para excel Dim wkbObj As Workbook ' Para excel Sub Imagen() 'Funcion que ubica la imagen en la posicion donde se hizo click 'Dependiendo del tipo de nodo puede tener una entrada (Inp) o no 'tener entradas, lo mismo para las salidas (Out) 'Entradas If Inp = 1 Then 'Nodo Sumidero o Transicion Load Picture3(cont) 'Carga la imagen de la entrada Picture3(cont).Top = Y1 'Ubica la imagen en la posicion especifica Picture3(cont).Left = X1 - Picture2(0).Width / 2 - Picture3(0).Width Picture3(cont).Visible = True 'Muestra la imagen End If If Inp = 0 Then 'Nodo Fuente Load Picture3(cont) Picture3(cont).Top = Y1 Picture3(cont).Left = X1 - Picture2(0).Width / 2 - Picture3(0).Width Picture3(cont).Visible = False 'Oculta la imagen End If 'Salidas If Out = 1 Then 'Nodo Fuente o Transicion Load Picture6(cont) Picture6(cont).Top = Y1 Picture6(cont).Left = X1 + Picture2(0).Width / 2
IEL2-I-2004-38
59
Picture6(cont).Visible = True End If If Out = 0 Then 'Nodo sumidero Load Picture6(cont) Picture6(cont).Top = Y1 Picture6(cont).Left = X1 + Picture2(0).Width / 2 Picture6(cont).Visible = False End If End Sub Private Sub Exit_Click() 'Comando para cerrar el programa End 'Cierra todas las ventanas visibles End Sub Private Sub Form_Load() 'Inicio del programa 'Ubicacion de la barra de simulacion ProgressBar1.Left = Form1.Left ProgressBar1.Top = Form1.Height 'Inicializacion de las variables linea(0).cont = 0 'Contador de lineas nsim = 0 'tiempo de simulacion capreq = 0 'Capacidad requerida desv = 0 'desviacion u = 0 'Enlaces cont = 0 'Nodos estado = 0 'Para agregar nodos Var = 0 'Variable para agrafar lineas c = 1 'Contador de las capacidas en la simulacion 'Oculta los nodos Picture1(0).Visible = False 'Imagen exterior del nodo Picture2(0).Visible = False 'Imagen interior del nodo '(contiene entradas y salidas) End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If estado = 1 Then 'Si se agrega un nuevo nodo
IEL2-I-2004-38
60
cont = cont + 1 'Aumenta el contador de nodos matriz(cont).Xn = Int(x - Picture2(0).Width / 2) 'Guarda la posicion matriz(cont).Yn = Int(y - Picture2(0).Height / 2) matriz(cont).Nodo = cont 'Guarda el contador como el numero del nodo X1 = x Y1 = y Load Picture2(cont) 'Carga la imagen y la ubica en la posicion Picture2(cont).Top = Y1 - Picture2(0).Height / 2 'Y Picture2(cont).Left = X1 - Picture2(0).Width / 2 'X Picture2(cont).Visible = True 'Picture9.Top = Y1 'Picture9.Left = X1 'Picture9.Visible = True Form1.Imagen 'Busca la funcion imagen para las entradas 'y salidas End If estado = 0 'Vuelve el estado de agregar nodo a cero End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Form1.Caption = x & " " & y 'Muestra la posicion cuando se mueve el 'Mouse End Sub Private Sub Image1_Click(Index As Integer) 'Eliminar enlace indx = Index Dialog1.Visible = True 'Opcion para eliminar enlace End Sub Public Sub Image2_Click(Index As Integer) 'Eliminar enlace indx = Index Dialog1.Visible = True 'Opcion para eliminar enlace End Sub Private Sub Image3_Click(Index As Integer) 'Eliminar enlace indx = Index Dialog1.Visible = True 'Opcion para eliminar enlace End Sub Private Sub Image4_Click(Index As Integer)
IEL2-I-2004-38
61
'Eliminar enlace indx = Index Dialog1.Visible = True 'Opcion para eliminar enlace End Sub Private Sub Image5_Click(Index As Integer) 'Eliminar enlace indx = Index Dialog1.Visible = True 'Opcion para eliminar enlace End Sub Private Sub Line_Click() Var = 1 'Cambia el estado para agregar un enlace End Sub Private Sub New_Click() 'Funcion encargada de eliminar los nodos y enlaces creados 'y dejar la ventana de trabajo en blanco Dim i As Integer 'Crea un contador i For i = 1 To cont Unload Picture2(i) 'Elimina la imagen del nodo Unload Picture3(i) 'Elimina la imagen de la entrada Unload Picture6(i) 'Elimina la imagen de la salida Next cont = 0 'Vuelve el contador de nodos a cero For i = 1 To u Unload Image1(i) 'Elimina las componentes horizontal Unload Image2(i) 'y vertical de las líneas que conforman Unload Image3(i) 'el enlace. Unload Image4(i) Unload Image5(i) Next u = 0 'Vuelve el contador de enlaces a cero End Sub Private Sub Nodo_Click() frmOptions2.Enabled = True 'Abre el menu de opciones de tipo de nodo frmOptions2.Visible = True
IEL2-I-2004-38
62
estado = 1 'Estado en 1 corresponde a agregar un nodo 'Estado en 0 corresponde a no agragar nodo End Sub Private Sub Open_Click() 'Funcion encargada de abrir un caso ya creado New_Click 'Elimina todos los nodos y enlaces en pantalla estado = 0 'Nodo deja agragar nodos hasta terminar de cargar CommonDialog1.Filter = "Archivos de texto" 'Tipo de archivo CommonDialog1.ShowOpen 'Muestra el cuadro de diálogo Abrir If CommonDialog1.FileName <> "" Then Form1.MousePointer = 11 'muestra el reloj de arena Dim matriz2(0 To 10) As nodos 'Crea una matriz de tipo nodo temporal 'para leer los datos del archivo Open CommonDialog1.FileName For Random As #1 Len = Len(matriz2(0)) 'Carga el archivo seleccionado como #1 Dim i As Integer For i = 0 To 10 Get #1, i + 1, matriz2(i) 'Guarda lo que hay en el archivo 'en la matriz temporal Next Close #1 'Cierra el archivo Dim matriz3(0 To 10) As unir 'Crea una matriz temporal de los enlaces 'de tipo "unir" Open CommonDialog1.FileName & "2" For Random As #1 Len = Len(matriz3(0)) 'Carga el archivo seleccionado como #2 For i = 0 To 10 Get #1, i + 1, matriz3(i) 'Guarda lo que hay en el archivo Next Close #1 Form1.MousePointer = 0 'Cambia el puntero del mouse a ocupado CommonDialog1.FileName = "" 'borra el nombre del archivo End If For i = 1 To matriz2(0).cont
IEL2-I-2004-38
63
Load Picture2(i) Picture2(i).Top = matriz2(i).Yn Picture2(i).Left = matriz2(i).Xn Picture2(i).Visible = True Next For i = 0 To matriz3(0).cont linea(i) = matriz3(i) 'Guarda los datos del archivo temporal 'al archivo de datos de los enlaces Next ''''''''''''''''''''Cargar Imagenes - Enlaces''''''''''''''''''''' For u = 1 To matriz3(0).cont If linea(u).X1 < linea(u).X2 And linea(u).Y1 > linea(u).Y2 Then Load Image2(u) Image2(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image2(u).Left = linea(u).X1 + Picture2(0).Width Image2(u).Width = Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 + Image1(0).Width Image2(u).Visible = True Load Image4(u) Image4(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image4(u).Left = linea(u).X2 - Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 Image4(u).Width = Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 Image4(u).Visible = True Load Image5(u) Load Image1(u) Image1(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image1(u).Left = (linea(u).X1 + Picture2(0).Width + linea(u).X2) / 2 Image1(u).Height = Abs(linea(u).Y1 - linea(u).Y2) Image1(u).Visible = True Load Image3(u) Var = 0 End If If linea(u).X1 < linea(u).X2 And linea(u).Y1 < linea(u).Y2 Then Load Image2(u) Image2(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image2(u).Left = linea(u).X1 + Picture2(0).Width Image2(u).Width = Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 + Image1(0).Width Image2(u).Visible = True Load Image4(u) Image4(u).Top = linea(u).Y2 + Picture2(0).Height / 2
IEL2-I-2004-38
64
Image4(u).Left = linea(u).X2 - Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 Image4(u).Width = Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 Image4(u).Visible = True Load Image5(u) Load Image1(u) Image1(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image1(u).Left = (linea(u).X1 + Picture2(0).Width + linea(u).X2) / 2 Image1(u).Height = Abs(linea(u).Y1 - linea(u).Y2) Image1(u).Visible = True Load Image3(u) Var = 0 End If If linea(u).X1 > linea(u).X2 And linea(u).Y1 < linea(u).Y2 Then Load Image2(u) Image2(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image2(u).Left = linea(u).X1 + Picture2(0).Width Image2(u).Width = Picture2(0).Width / 2 Image2(u).Visible = True Load Image4(u) Image4(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image4(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image4(u).Width = Picture2(0).Width / 2 Image4(u).Visible = True Load Image5(u) Image5(u).Top = linea(u).Y2 + 3 / 2 * Picture2(0).Height Image5(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image5(u).Width = Abs(linea(u).X1 - linea(u).X2 + 2 * Picture2(0).Width) Image5(u).Visible = True Load Image1(u) Image1(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image1(u).Left = linea(u).X1 + Picture2(0).Width + Picture2(0).Width / 2 Image1(u).Height = Abs(linea(u).Y1 - linea(u).Y2) + Picture2(0).Height Image1(u).Visible = True Load Image3(u) Image3(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image3(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image3(u).Height = Picture2(0).Height Image3(u).Visible = True Var = 0 End If If linea(u).X1 > linea(u).X2 And linea(u).Y1 > linea(u).Y2 Then Load Image2(u) Image2(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image2(u).Left = linea(u).X1 + Picture2(0).Width
IEL2-I-2004-38
65
Image2(u).Width = Picture2(0).Width / 2 Image2(u).Visible = True Load Image4(u) Image4(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image4(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image4(u).Width = Picture2(0).Width / 2 Image4(u).Visible = True Load Image5(u) Image5(u).Top = (linea(u).Y1 + linea(u).Y2 + Picture2(0).Height) / 2 Image5(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image5(u).Width = Abs(linea(u).X1 - linea(u).X2 + 2 * Picture2(0).Width) Image5(u).Visible = True Load Image1(u) Image1(u).Top = (linea(u).Y1 + linea(u).Y2 + Picture2(0).Height) / 2 Image1(u).Left = linea(u).X1 + Picture2(0).Width + Picture2(0).Width / 2 Image1(u).Height = linea(u).Y1 + Picture2(0).Height / 2 - (linea(u).Y1 + linea(u).Y2 + Picture2(0).Height) / 2 Image1(u).Visible = True Load Image3(u) Image3(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image3(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image3(u).Height = linea(u).Y1 + Picture2(0).Height / 2 - (linea(u).Y1 + linea(u).Y2 + Picture2(0).Height) / 2 Image3(u).Visible = True Var = 0 End If Next u = matriz3(0).cont 'Carga el contador de los enlaces For i = 0 To matriz2(0).cont matriz(i) = matriz2(i) 'Guarda la informacion de los nodos Next ''''''''''''''''''''Carga nodos''''''''''''''''''''''''' For i = 1 To matriz2(0).cont Y1 = matriz2(i).Yn + Picture2(0).Width / 2 'Carga la posicion del X1 = matriz2(i).Xn + Picture2(0).Height / 2 'nodo Inp = matriz2(i).Input 'Guarda la informacion de las entradas Out = matriz2(i).Output 'Guarda la informacion de las salidas cont = i 'Carga el contador de los nodos If Inp = 1 Then Load Picture3(cont) Picture3(cont).Top = Y1 Picture3(cont).Left = X1 - Picture2(0).Width / 2 - Picture3(0).Width
IEL2-I-2004-38
66
Picture3(cont).Visible = True End If If Inp = 0 Then Load Picture3(cont) Picture3(cont).Top = Y1 Picture3(cont).Left = X1 - Picture2(0).Width / 2 - Picture3(0).Width Picture3(cont).Visible = False End If If Out = 1 Then Load Picture6(cont) Picture6(cont).Top = Y1 Picture6(cont).Left = X1 + Picture2(0).Width / 2 Picture6(cont).Visible = True End If If Out = 0 Then Load Picture6(cont) Picture6(cont).Top = Y1 Picture6(cont).Left = X1 + Picture2(0).Width / 2 Picture6(cont).Visible = False End If Next ''''''''''''''''''''''''''''''''''''''''''''''' End Sub Private Sub Options_Click() 'Carga el cuadro de opciones frmOptions1.Visible = True 'Tiempo de simulacion, Capacidad requerida y Desviacion End Sub Private Sub Picture10_Click() 'Agregar nodo frmOptions2.Enabled = True frmOptions2.Visible = True estado = 1 End Sub
IEL2-I-2004-38
67
Private Sub Picture11_Click() 'Agregar enlace Line_Click End Sub Private Sub Picture2_Click(Index As Integer) If Var = 2 Then 'Var = 0 indica el nodo final para unir u = u + 1 'Aumento del contador de lineas linea(u).X2 = Picture2(Index).Left linea(u).Y2 = Picture2(Index).Top linea(u).L = u linea(0).cont = linea(0).cont + 1 'En esta parte compara las posiciones de los elementos a unir 'para saber como unir los elementos. If linea(u).X1 < linea(u).X2 And linea(u).Y1 > linea(u).Y2 Then Load Image2(u) Image2(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image2(u).Left = linea(u).X1 + Picture2(0).Width Image2(u).Width = Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 + Image1(0).Width Image2(u).Visible = True Load Image4(u) Image4(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image4(u).Left = linea(u).X2 - Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 Image4(u).Width = Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 Image4(u).Visible = True Load Image5(u) Load Image1(u) Image1(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image1(u).Left = (linea(u).X1 + Picture2(0).Width + linea(u).X2) / 2 Image1(u).Height = Abs(linea(u).Y1 - linea(u).Y2) Image1(u).Visible = True Load Image3(u) Var = 0 End If If linea(u).X1 < linea(u).X2 And linea(u).Y1 < linea(u).Y2 Then Load Image2(u) Image2(u).Top = linea(u).Y1 + Picture2(0).Height / 2
IEL2-I-2004-38
68
Image2(u).Left = linea(u).X1 + Picture2(0).Width Image2(u).Width = Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 + Image1(0).Width Image2(u).Visible = True Load Image4(u) Image4(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image4(u).Left = linea(u).X2 - Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 Image4(u).Width = Abs(linea(u).X1 + Picture2(0).Width - linea(u).X2) / 2 Image4(u).Visible = True Load Image5(u) Load Image1(u) Image1(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image1(u).Left = (linea(u).X1 + Picture2(0).Width + linea(u).X2) / 2 Image1(u).Height = Abs(linea(u).Y1 - linea(u).Y2) Image1(u).Visible = True Load Image3(u) Var = 0 End If If linea(u).X1 > linea(u).X2 And linea(u).Y1 < linea(u).Y2 Then Load Image2(u) Image2(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image2(u).Left = linea(u).X1 + Picture2(0).Width Image2(u).Width = Picture2(0).Width / 2 Image2(u).Visible = True Load Image4(u) Image4(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image4(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image4(u).Width = Picture2(0).Width / 2 Image4(u).Visible = True Load Image5(u) Image5(u).Top = linea(u).Y2 + 3 / 2 * Picture2(0).Height Image5(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image5(u).Width = Abs(linea(u).X1 - linea(u).X2 + 2 * Picture2(0).Width) Image5(u).Visible = True Load Image1(u) Image1(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image1(u).Left = linea(u).X1 + Picture2(0).Width + Picture2(0).Width / 2 Image1(u).Height = Abs(linea(u).Y1 - linea(u).Y2) + Picture2(0).Height Image1(u).Visible = True Load Image3(u) Image3(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image3(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image3(u).Height = Picture2(0).Height Image3(u).Visible = True Var = 0
IEL2-I-2004-38
69
End If If linea(u).X1 > linea(u).X2 And linea(u).Y1 > linea(u).Y2 Then Load Image2(u) Image2(u).Top = linea(u).Y1 + Picture2(0).Height / 2 Image2(u).Left = linea(u).X1 + Picture2(0).Width Image2(u).Width = Picture2(0).Width / 2 Image2(u).Visible = True Load Image4(u) Image4(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image4(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image4(u).Width = Picture2(0).Width / 2 Image4(u).Visible = True Load Image5(u) Image5(u).Top = (linea(u).Y1 + linea(u).Y2 + Picture2(0).Height) / 2 Image5(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image5(u).Width = Abs(linea(u).X1 - linea(u).X2 + 2 * Picture2(0).Width) Image5(u).Visible = True Load Image1(u) Image1(u).Top = (linea(u).Y1 + linea(u).Y2 + Picture2(0).Height) / 2 Image1(u).Left = linea(u).X1 + Picture2(0).Width + Picture2(0).Width / 2 Image1(u).Height = linea(u).Y1 + Picture2(0).Height / 2 - (linea(u).Y1 + linea(u).Y2 + Picture2(0).Height) / 2 Image1(u).Visible = True Load Image3(u) Image3(u).Top = linea(u).Y2 + Picture2(0).Height / 2 Image3(u).Left = linea(u).X2 - Picture2(0).Width / 2 Image3(u).Height = linea(u).Y1 + Picture2(0).Height / 2 - (linea(u).Y1 + linea(u).Y2 + Picture2(0).Height) / 2 Image3(u).Visible = True Var = 0 End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Var = 0 'Vuelve a cero la variable que implica no union linea(u).nodoj = Index 'Guarda el numero del nodo en la union frmOptions.Visible = True 'Carga el menu para las caracteristicas 'del enlace End If If Var = 1 Then 'Var = 1 indica el nodo inicial para unir linea(u + 1).X1 = Picture2(Index).Left 'Guarda la posicion linea(u + 1).Y1 = Picture2(Index).Top Var = Var + 1 linea(u + 1).nodoi = Index 'Guarda el numero del nodo en la union End If End Sub
IEL2-I-2004-38
70
Private Sub Picture2_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) 'Esta funcion se encarga de eliminar los nodos cuando se presiona la 'tecla suprimir Dim i, k, m, cuenta As Integer If KeyCode = vbKeyDelete Then 'Compara si la tecla presionada es 'Suprimir Unload Picture2(Index) 'Elimina las imagenes del nodo, Unload Picture3(Index) 'de las entradas y de las salidas Unload Picture6(Index) For i = 1 To matriz(0).cont If Index = i Then 'Guarda los datos en una matriz ntemp(i) = matriz(i) 'temporal sin contar el nodo eliminado End If Next matriz(0).cont = matriz(0).cont - 1 'Reduce en 1 la cantidad de nodos For i = 1 To matriz(0).cont matriz(i) = ntemp(i) 'Recupera la informacion a la matriz Next cont = cont - 1 'Reduce la cantidad de nodos For i = 1 To cont 'Elimina las lineas que estan unidas al 'nodo a eliminar If linea(i).nodoi = Index Or linea(i).nodoj = Index Then Unload Image1(linea(i).L) Unload Image2(linea(i).L) Unload Image3(linea(i).L) Unload Image4(linea(i).L) Unload Image5(linea(i).L) k = linea(0).cont 'Guarda el contador cuenta = 1 For m = 1 To k 'Guarda los datos en un temporal If m <> i Then ltemp(cuenta) = linea(m) cuenta = cuenta + 1 End If Next For m = 1 To k linea(m) = ltemp(m) 'Recupera la informacion
IEL2-I-2004-38
71
ltemp(m).nodoi = 0 ltemp(m).nodoj = 0 Next k = k - 1 linea(0).cont = k 'Reduce el contador de las i = 1 'lineas tantas como sean eliminadas End If Next End If u = linea(0).cont 'Carga el contador de lineas End Sub Private Sub Save_Click() 'Funcion encargada de guardar la informacion de los nodos, lineas y sus 'respectivas caracteristicas (capacidades) matriz(0).cont = cont 'Guarda el contador de nodos en la matriz '''''''''''Crear un archivo'''''''''''''''''''''''''''' 'Funcion para crear un archivo y guardar la informacion de los nodos 'y enlces para el programa de Ford Fulkerson Dim fso, txtfile Dim i As Integer Set fso = CreateObject("Scripting.FileSystemObject") Set txtfile = fso.CreateTextFile("c:\mf.in", True) txtfile.WriteLine (cont & " " & u) For i = 1 To u txtfile.WriteLine (linea(i).nodoi - 1 & " " & linea(i).nodoj - 1 & " " & linea(i).cap) Next txtfile.Close ''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''Funcion para guardar los datos de las lineas y nodos'''''''''''' CommonDialog1.Filter = "Archivos de texto" CommonDialog1.ShowSave 'muestra el cuadro de diálogo Guardar If CommonDialog1.FileName <> "" Then Open CommonDialog1.FileName For Random As #1 Len = Len(matriz(0)) For i = 0 To cont Put #1, i + 1, matriz(i) 'Guarda la informacion de los nodos Next Close #1
IEL2-I-2004-38
72
Open CommonDialog1.FileName & "2" For Random As #1 Len = Len(linea(0)) For i = 0 To u Put #1, i + 1, linea(i) 'Guarda la informacion de las lineas Next Close #1 'Cierra el archivo End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' End Sub Private Sub Simular_Click() 'Comando para simular If capreq = 0 Or desv = 0 Or nsim = 0 Then MsgBox "Ingrese a Tools - Options e ingrese los datos de simulacion" Else If u <> 0 Then 'Primero verifica que existan nodos para simular ProgressBar1.Visible = True 'Carga la barra de proceso Form1.MousePointer = 11 'Cambia el puntero del mouse a ocupado falla = 0 'inicia el contador de fallas Dim matrizValores(1 To 5) Dim i, j As Integer 'Se crea un enlace a una tabla de Excel Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets.Add Dim nodo_f(1 To 100) As Integer Set wkbObj = GetObject("C:\tesis.xls") 'Carga los datos de tesis.xls For i = 1 To nsim If i < u + 1 Then 'Escribe la informacion de las capacidades en la tabla de Excel wkbObj.Worksheets(1).Range("D" & (i + 1)).Value = "=" & linea(i).lambda wkbObj.Worksheets(1).Range("E" & (i + 1)).Value = "=" & linea(i).miu End If Next
IEL2-I-2004-38
73
Dim vec(0 To 200) As Integer Dim kr, r, mayor As Integer mayor = 10000 For i = 1 To 200 vec(i) = 0 Next ProgressBar1.max = u For kr = 1 To u Step 1 ProgressBar1.Value = kr 'Guarda los tiempos de falla y reparacion para un nodo especifico vec(1) = wkbObj.Worksheets(1).Range(Chr(97) & Chr(100 + 2 * kr) & "21").Value vec(2) = vec(1) + wkbObj.Worksheets(1).Range(Chr(97) & Chr(101 + 2 * kr) & "21").Value For r = 3 To 100 Step 1 If r Mod 2 = 0 Then vec(r) = vec(r - 1) + wkbObj.Worksheets(1).Range(Chr(97) & Chr(101 + 2 * kr) & (20 + r / 2)).Value Else vec(r) = vec(r - 1) + wkbObj.Worksheets(1).Range(Chr(97) & Chr(100 + 2 * kr) & (20 + (r + 1) / 2)).Value End If Next r 'Escribe en una tabla nueva los estados de los nodos en el tiempo vec(0) = 0 For i = 1 To 200 Step 1 For j = vec(i - 1) To vec(i) If j = nsim Then i = 200 Else If i Mod 2 = 0 Then xlSheet.Cells(j + 1, kr).Value = 0 Else xlSheet.Cells(j + 1, kr).Value = 1 End If End If If mayor > vec(20) Then mayor = vec(20)
IEL2-I-2004-38
74
End If Next j Next i Next kr '''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Esta funcion se encarga de buscar los nodos que se van a eliminar 'y guardar los datos de esos nodos para luego correr la funcion 'de Ford Fulkerson y así obtener la capacidad máxima del sistema 'en cada instante del tiempo Dim contador, k, m As Integer ProgressBar1.max = nsim For i = 1 To nsim ProgressBar1.Value = i For j = 1 To u If xlSheet.Cells(i, j).Value = 0 Then eliminar(j) = 0 Else eliminar(j) = 1 End If Next contador = 1 For k = 1 To u If eliminar(k) = 1 Then ltemp(contador) = linea(k) contador = contador + 1 End If Next Dim fso, txtfile Set fso = CreateObject("Scripting.FileSystemObject") Set txtfile = fso.CreateTextFile("c:\mf.in", True) txtfile.WriteLine (cont & " " & contador - 1) For m = 1 To contador - 1 txtfile.WriteLine (ltemp(m).nodoi - 1 & " " & ltemp(m).nodoj - 1 & " " & ltemp(m).cap) Next txtfile.Close dato(c) = main() '''''''''''''''''''''''''''''''''''''''''''''''''''''''' If dato(c) < capreq Then falla = falla + 1 'Almacena el número de fallas para el 'caso deterministico End If
IEL2-I-2004-38
75
xlSheet.Cells(c, u + 2) = dato(c) 'Guarda las capacidades 'disponibles en la tabla c = c + 1 Next total = 0 cporc(1, 1) = 0 cporc(1, 2) = 0 For i = 1 To c total = total + dato(i) Next For i = 1 To c cporc(i + 1, 1) = cporc(i, 1) + dato(i) / total cporc(i + 1, 2) = i Next 'Guardar la informacion en la tabla de resultados Set wkbObj = Nothing xlSheet.SaveAs "c:\Resultados.xls" xlBook.Close xlApp.Quit 'Elimina los enlaces con Excel Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing Dim max, d(1 To 20), mini max = 0 mini = dato(1) 'Procesamiento de los datos de las capacidades 'Se guarda el dato mas grande For i = 1 To UBound(dato) If max < dato(i) Then max = dato(i) End If Next 'Se guarda el dato mas pequeño
IEL2-I-2004-38
76
For i = 1 To nsim If mini > dato(i) Then mini = dato(i) End If Next Dim escala As Integer escala = 20 'Inicializa los datos a comparar para obtener porcentajes 'de ocurrencia For i = 1 To escala d(i) = 0 Next 'Se crean las divisiones entre el máximo y el mínimo For i = 1 To escala - 1 t(i) = mini + i * (max - mini) / escala Next t(escala) = max 'Se ubica el dato entre el maximo y el minimo 'y se asigna una probabilidad del evento contando 'la ocurrencia For i = 1 To nsim For j = 1 To escala If dato(i) < t(j) Then d(j) = d(j) + 1 'Ubica el dato en un espacio entre el 'máximo y el mínimo (cuenta) End If Next Next Form1.MousePointer = 0 'Vuelve el puntero a el estado normal 'Cálculo de las probabilidades acumulativas de las capacidades Dim f total2 = 0 For f = 1 To escala total2 = total2 + d(f) Next m_DataValues(1) = d(1) / total2 For f = 1 To escala - 1 m_DataValues(f + 1) = d(f) / total2 + m_DataValues(f) Next
IEL2-I-2004-38
77
'Funcion para encontrar el area del producto de la funcion de densidad 'y la funcion de distribucion de las capacidades dadas. Dim area, exponencial(1 To 20) As Single datog = 0 area = 0 'Calcula el area de la exponencial para normalizar la función For i = 0 To 1000 area = area + (Exp(-(1 / 2) * ((i - capreq) / desv) ^ 2)) / (Sqr(2 * 3.1416) * desv) Next 'Calculo de los valores de la funcion exponencial en el intervalo 'donde la funcion de distribucion es diferente de cero 'Funcion exponencial entre 0(+) y 1(-) For i = 1 To 20 exponencial(i) = (Exp(-(1 / 2) * ((t(i) - capreq) / desv) ^ 2)) / (area * Sqr(2 * 3.1416) * desv) Next 'Calculo del area del producto de la exponencial (densidad) y los datos 'de las capacidades (distribucion) For i = 1 To 20 datog = datog + exponencial(i) * m_DataValues(i) Next 'Adicional, se calcula el area donde la funcion de distribucion es 1 ' y la de densidad toma diferentes valores For i = t(20) To 10000 datog = datog + (Exp(-(1 / 2) * ((i - capreq) / desv) ^ 2)) / (area * Sqr(2 * 3.1416) * desv) Next 'Muestra las gráficas de las simulaciones Dialog3.Visible = True Dialog.Visible = True 'Dialog2.Visible = True 'Borra la barra de progreso (simulando) ProgressBar1.Value = 0 ProgressBar1.Visible = False Else MsgBox "No hay nodos para simular" 'Si u=0 no hay nodos para simular End If End If
IEL2-I-2004-38
78
End Sub DIALOG Option Explicit Private Sub CancelButton_Click() 'Funcion encargada de graficar la probabilidad acumulada en el tiempo Dim i As Integer MSChart1.ChartData = graf For i = 1 To nsim MSChart1.DataGrid.RowLabel(i, 1) = i Next MSChart1.DataGrid.RowLabel(nsim + 1, 1) = "t(años)" MSChart1.DataGrid.ColumnLabel(1, 1) = "Prob" End Sub Private Sub Form_Load() 'Funcion encargada de graficar la funcion de distribucion 'de probabilidad en funcion de la capacidad 'Se establecen los parametos que determinan los limites, la escala 'y ubicacion de la grafica Pic.ScaleLeft = LBound(m_DataValues) - 1 Pic.ScaleWidth = UBound(m_DataValues) - LBound(m_DataValues) + 1 Pic.ScaleTop = 1 Pic.ScaleHeight = -1 Dim i As Integer 'Datos por graficar en forma de columnas For i = LBound(m_DataValues) To UBound(m_DataValues) Pic.Line (i - 1, 0)-(i, m_DataValues(i)), QBColor(i Mod 16), BF Next i Pic.Visible = True 'Muestra la grafica despues de ingresados los valores Dim vecto(1 To 20) For i = 1 To 20 vecto(i) = i Next c1 = c
IEL2-I-2004-38
79
ReDim graf(1 To c1, 1 To 1) For i = 1 To c1 graf(i, 1) = cporc(i, 1) 'Datos de la funcion en el tiempo Next c = 1 End Sub Private Sub OKButton_Click() Unload Me 'Cierra la ventana End Sub Private Sub Pic_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Dim i As Integer i = Int(x) + 1 'Se muestran los valores de cada columna en un cuadro de mensaje MsgBox "Valor: " & i & " = " & m_DataValues(i) & " Cap:" & t(i) End Sub DIALOG1 Option Explicit Private Sub CancelButton_Click() Unload Me 'Cierra la aplicacion End Sub Private Sub OKButton_Click() 'Funcion encargada de eliminar un enlace 'al hacer click sobre la imagen del enlace Dim i, k As Integer Unload Form1.Image1(indx) 'Elimina cada uno de los elementos de Unload Form1.Image2(indx) 'los enlaces Unload Form1.Image3(indx) Unload Form1.Image4(indx) Unload Form1.Image5(indx) u = u - 1 'reduce en 1 los enlaces k = linea(0).cont 'Guarda el contador de las lineas en esta 'variable k For i = 1 To k If indx <> i Then ltemp(i) = linea(i) 'Guarda los datos en una matriz temporal End If Next
IEL2-I-2004-38
80
k = k - 1 For i = 1 To k linea(i) = ltemp(i) 'vuelve a cargar los datos en la matriz 'de los enlaces Next linea(0).cont = k 'Guarda el contador de los enlaces Unload Me 'Cierra la aplicacion End Sub DIALOG2 Option Explicit Private Sub CancelButton_Click() Unload Me End Sub Private Sub Form_Load() 'Funcion encargada de mostrar la funcion de distribucion de probabilidad Dim i, cuenta, inicio, fin As Integer cuenta = 1 Dim datos_n() As Single ReDim datos_n(1 To 2 * desv, 1 To 1) inicio = capreq - desv fin = CInt(desv) + CInt(capreq) For i = inicio To fin datos_n(cuenta, 1) = (Exp(-(1 / 2) * ((i - capreq) / desv) ^ 2)) / (Sqr(2 * 3.1416) * desv) cuenta = cuenta + 1 Next MSChart1.ChartData = datos_n End Sub Private Sub OKButton_Click() Unload Me 'Cierra la aplicacion End Sub DIALOG3 Option Explicit Private Sub Form_Load() 'funcion encargada de mostrar los resultados finales de la simulacion Label2.Caption = nsim 'Tiempo de simulacion
IEL2-I-2004-38
81
Label4.Caption = capreq 'Capacidad requerida Label6.Caption = desv 'desviacion estandar Label8.Caption = Abs(1 - datog) * 100 & "%" 'Confiabilidad Label10.Caption = falla / nsim * 100 & "%" 'Probabilidad 'deterministica End Sub Private Sub OKButton_Click() Unload Me 'Cierra la aplicacion End Sub FRMOPTIONS Option Explicit Private Sub cmdCancel_Click() Unload Me 'Cierra la aplicacion End Sub Private Sub cmdOK_Click() linea(u).cap = Text1.Text 'Guarda la informacion 'de la capacidad linea(u).lambda = Text3.Text 'Guarda la informacion 'de la tasa de fallas linea(u).miu = Text2.Text 'Guarda la informacion 'de la tasa de reparacion Unload Me 'Cierra la aplicacion End Sub Private Sub Form_Load() 'Centrar la ventada desde que se abre tbsOptions.Tabs.Item(1).Caption = "Enlace" Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 End Sub FRMOPTIONS1 Option Explicit Private Sub Check1_Click() 'Al seleccionar se muestra u oculta las gráficas If Check1.Value = 1 Then 'Habilita las gráficas Dialog.Visible = True Else 'Cierra las gráficas Dialog.Visible = False
IEL2-I-2004-38
82
End If End Sub Private Sub Check2_Click() If Check2.Value = 1 Then 'muestra la informacion de donde se guardan los resultados MsgBox "Archivo guardado en c:\Resultados.xls" End If End Sub Private Sub cmdCancel_Click() Unload Me 'Cierra la aplicacion End Sub Private Sub cmdOK_Click() 'Comprueba que se ingresen datos If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Then Else 'Guarda la informacion ingresada nsim = Text1.Text 'Tiempo de simulacion capreq = Text2.Text 'Capacidad requerida desv = Text3.Text 'Desviacion estandar Unload Me 'Cierra la aplicacion End If End Sub Private Sub Form_Load() 'Centrar desde que se carga Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 End Sub FRMOPTIONS2 Option Explicit Private Sub cmdCancel_Click() Unload Me 'Cierra la aplicacion End Sub Private Sub cmdOK_Click() 'Almacena la informacion de las entradas y salidas 'Transicion Inp = 1 Out = 1 'Fuente
IEL2-I-2004-38
83
If Combo1.Text = "Fuente" Then Inp = 0 Out = 1 'Sumidero ElseIf Combo1.Text = "Sumidero" Then Inp = 1 Out = 0 End If 'Guarda la informacion de entradas(Inp) y salidas (Out) matriz(cont + 1).Input = Inp matriz(cont + 1).Output = Out Unload Me 'Cierra la aplicacion End Sub Private Sub Form_Load() 'Desde el inicio se cargan las tres opciones de nodos Combo1.AddItem ("Fuente") 'Nodo Fuente Combo1.AddItem ("Transicion") 'Nodo Transicion Combo1.AddItem ("Sumidero") 'Nodo Sumidero 'Centrar la ventana Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 End Sub DEFINICION DE VARIABLES – “MODULE1” Public Type nodos 'Matriz donde se guarda la informacion de los nodo Xn As Integer 'ubicación en x Yn As Integer 'ubicacion en y Nodo As Integer 'Numero del nodo Input As Integer 'Numero de entradas 0 o 1 Output As Integer 'Numero de salidas cont As Integer 'Numero total de nodos End Type Public Type unir 'Matriz donde se guarda la informacion de los enlaces X1 As Integer 'ubicación en x – primer punto Y1 As Integer 'ubicación en y – primer punto X2 As Integer 'ubicacion en x – segundo punto Y2 As Integer 'ubicación en y – segundo punto L As Integer 'Numero de la linea nodoi As Integer 'nodo inicio nodoj As Integer 'nodo final cap As Integer 'Capacidad del nodo miu As Double 'Tasa de reparaciones lambda As Double 'Tasa de fallas cont As Integer 'Numero total de enlaces
IEL2-I-2004-38
84
End Type Public t(1 To 20), total2, u, c, capreq, Inp, Out, cont, X1, Y1, estado As Integer 'divisiones de las capacidades, total de capacidades acumulativas, temporal de cantidad 'de enlaces, contador del tiempo de simulacion, capacidad requerida, entradas, salidas, 'numero de nodos, ubicación x, ubicación y, estado de colocar nodo en pantalla Public desv, total, cporc(1 To 1000, 1 To 2) As Single 'Desviacion estandar, total
de 'capacidad y matriz de 'capacidades proporcionales
Public linea(0 To 40) As unir 'Matriz de enlaces Public matriz(0 To 40) As nodos 'Matriz de nodos Public ntemp(0 To 40) As nodos 'Matriz temporal de nodos Public ltemp(0 To 40) As unir 'Matriz temporal de enlaces Public m_DataValues(1 To 20) As Single 'Valores de las capacidades Public nsim As Integer 'Tiempo de simulacion Public indx, falla As Integer 'Indice de elemento a eliminar y fallas Public graf(), c1, datog As Single 'Variables par alas graficas EXAMPLE1.DLL Funcion que ejecuta Ford Fulkerson // example1.cpp #include "stdafx.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } #include <stdio.h> #define WHITE 0 #define GRAY 1 #define BLACK 2 #define MAX_NODES 100 #define oo 1000 int n; // Numero de nodos int e; // Numero de enlaces int capacity[MAX_NODES][MAX_NODES]; // Matriz de capacidad int flow[MAX_NODES][MAX_NODES]; // Matriz de flujos int color[MAX_NODES]; // caracteristicas de los nodos int pred[MAX_NODES]; // vector para almacenar los caminos de aumento
IEL2-I-2004-38
85
int min1(int x, int y) { return x<y ? x : y; // Retorna el minimo entre x y y } int head,tail; int q[MAX_NODES+2]; void enqueue (int x) { q[tail] = x; tail++; color[x] = GRAY; } int dequeue () { int x = q[head]; head++; color[x] = BLACK; return x; } int bfs (int start, int target) { int u,v; for (u=0; u<n; u++) { color[u] = WHITE; } head = tail = 0; enqueue(start); pred[start] = -1; while (head!=tail) { u = dequeue(); // Busca todos los nodos blanco adjacentes v. Si la capacidad // de u a v en la red residual es positiva, pone en cola v. for (v=0; v<n; v++) { if (color[v]==WHITE && capacity[u][v]-flow[u][v]>0) { enqueue(v); pred[v] = u; } } } // Si el color del nodo objetivo es negro ahora, // esto significa que fue alcanzado return color[target]==BLACK; }
IEL2-I-2004-38
86
int max_flow (int source, int sink) { int i,j,u; // Inicializa el flujo int max_flow = 0; for (i=0; i<n; i++) { for (j=0; j<n; j++) { flow[i][j] = 0; } } // Mientras exista un camino de aumento, // incrementa el flujo a traves de este camino while (bfs(source,sink)) { // Detemina la cantidad por la cual incrementamos el flujo int increment = oo; for (u=n-1; pred[u]>=0; u=pred[u]) { increment = min1(increment,capacity[pred[u]][u]-flow[pred[u]][u]); } // Incrementa el flujo. for (u=n-1; pred[u]>=0; u=pred[u]) { flow[pred[u]][u] += increment; flow[u][pred[u]] -= increment; } max_flow += increment; } // no hay mas caminos de aumento, devuelve el flujo maximo return max_flow; } void read_input_file() { int a,b,c,i,j; FILE* input = fopen("\\mf.in","r"); // lee el numero de nodos y enlaces fscanf(input,"%d %d",&n,&e); // inicializa la matriz de capcacidades for (i=0; i<n; i++) { for (j=0; j<n; j++) { capacity[i][j] = 0; } } // lee las capacidades de los enlaces for (i=0; i<e; i++) { fscanf(input,"%d %d %d",&a,&b,&c); capacity[a][b] = c; } fclose(input);
IEL2-I-2004-38
87
} int main () { read_input_file(); return max_flow(0,n-1); }
IEL2-I-2004-38
88
10. LISTA DE FIGURAS Pág.
Figura 1. Isomorfismos 21
Figura 2. Grafo tipo árbol 22
Figura 3. Distancia entre nodos 22
Figura 4. Distribución Normal 24
Figura 5. Modelo Esfuerzo-Resistencia y Probabilidad de Falla 32
Figura 6. Graficas del simulador 37
Figura 7. Tabla de resultados del simulador 38
Figura 8. Ejemplo 1 39
Figura 9. Grafo esquemático del simulador 39
Figura 10. Resultados de la simulación 40
Figura 11. Ejemplo 2 40
Figura 12. Grafo esquemático del simulador 41
Figura 13. Resutados de la simulación 41