View
4
Download
0
Category
Preview:
Citation preview
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
1
DIVISIÓN DE CIENCIAS BÁSICAS E INGENIERÍA
LICENCIATURA EN COMPUTACION
PROYECTO DE INVESTIGACION II
Implementación de una interfaz para la Generación e Intrusión de Mercurio en Redes Porosas
ASESORES: Dr. FRNANDO ROJAS Dra. GRACIELA ROMAN Dr. SALOMON CORDERO GONZALES ALONSO SANCHEZ ____________________ ______________________ _____________________ ALUMNOS: BENJAMIN MORENO MONTIEL 203214228 ISRAEL GUERRERO PEREZ 202119465
DICIEMBRE/2006
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
2
1. Antecedentes .............................................................................................................................. 4 2. Objetivos..................................................................................................................................... 7 3. Generación de redes con restricciones geométricas ............................................................... 9
3.1 Errores geométricos...............................................................................................................9 3.2 Corrección de los errores geométricos ................................................................................10
3.2.1 Relajación Sitio ............................................................................................................10 3.2.1.1 Algoritmo..............................................................................................................10 3.2.1.2 Descripción detallada de los módulos empleados .............................................12
3.2.2 Relajación Sitio-Enlace ................................................................................................19 3.2.2.1 Descripción detallada de los módulos empleados .............................................21
3.2.3 Relajación Enlace-Enlace .............................................................................................23 3.2.3.1 Descripción detallada de los módulos empleados .............................................25
3.2.4 Relajación sobre la Formula del calculo de errores Geométricos. ...............................27 4. Generación de Gráficas y Estatísticas ................................................................................... 30
4.1 Calculo del Área de Translape.............................................................................................30 4.1.1 Planteamiento del Problema .........................................................................................31 4.1.2 Algoritmo para resolver el Problema............................................................................32
4.1.2.1 Calculo de Translape...........................................................................................34 4.1.2.2 Punto de Intersección de las dos Funciones Gaussianas ..................................34 4.1.2.3 Método de Trapecio.............................................................................................34 4.1.2.4 Función de Evaluación de las Distribuciones....................................................35
4.2 Calculo de Probabilidad de Enlaces ....................................................................................36 4.2.1 Planteamiento Del Problema ........................................................................................36 4.2.2 Algoritmo para resolver el Problema............................................................................37
4.2.2.1 Calculo de probabilidad de Enlaces...................................................................39 4.2.2.2 Conteo de Enlaces que rodean a un Sitio. .........................................................40
4.3 Calculo de Probabilidad de Sitios........................................................................................41 4.3.1 Planteamiento Del Problema ........................................................................................41 4.3.2 Algoritmo para resolver el Problema............................................................................42
4.3.2.1 Calculo de Probabilidades de Sitios ...................................................................44 4.3.2.2 Conteo de Sitios que rodean a un Enlace ..........................................................45
4.4 Graficas Descriptivas de Resultados ...................................................................................49 4.4.1 Planteamiento Del Problema ........................................................................................49
4.4.1.1 GnuPlot.................................................................................................................49 4.4.2 Resolución del problema ..............................................................................................52
5. Interfaz de Generación de Red e Intrusión........................................................................... 55 5.1 Operaciones de la librería ....................................................................................................55
5.1.1 Calcular el Traslape de las Funciones ..........................................................................55 5.1.2 Generación de Red sin errores del Tipo 1 ....................................................................57 5.1.3 Generación Red sin errores del Geométricos aplicando relajación Enlace -Enlace ....................................................................................................................................58 5.1.4 Generación Red sin errores del Geométricos aplicando relajación Sitio Enlace .........60 5.1.5 Generación Red sin errores del Geométricos aplicando relajación sobre la formula ..................................................................................................................................62 5.1.6 Guardar alguna red .......................................................................................................64 5.1.7 Generación de Grafica de Distribución de Sitios Enlaces............................................66
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
3
5.1.9 Generación de Probabilidades de Enlaces ....................................................................67 5.1.10 Generación de Probabilidades de Sitios .....................................................................69 5.1.11 Graficar las Probabilidades de Enlaces ......................................................................71 5.1.12 Graficar las Probabilidades de Sitios..........................................................................73 5.1.12 Intrusión de Red si errores geométricos .....................................................................75 5.1.13 Intrusión de Red si errores geométricos leída desde un archivo ................................78 5.1.14 Generación de Graficas de Presión vs. Volumen .......................................................80 5.1.14 Generación de Graficas de Presión vs. Sitios .............................................................82
6. Resultados ................................................................................................................................ 85 6.1 Primer Resultado: ................................................................................................................86 6.2 Segundo Resultado: .............................................................................................................89 6.3 Tercer Resultado:.................................................................................................................92 6. 4 Cuarto Resultado: ...............................................................................................................95 6.5 Quinto Resultado: ................................................................................................................98 6.6 Sexto Resultado: ................................................................................................................101
7. Conclusiones........................................................................................................................... 104 8. Trabajos a futuro................................................................................................................... 105 9. Anexos..................................................................................................................................... 106 10. Referencias:.......................................................................................................................... 130
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
4
1. Antecedentes La construcción de un medio poroso por computadora puede basarse en el modelo Dual de Sitios y Enlaces (DSBM) descrito en la tesis doctoral del Dr. Carlos Felipe Mendoza1. El cual establece que un material poroso está compuesto por sitios y enlaces. Los sitios se encuentran unidos entre sí a través de los enlaces, correspondiéndole a cada sitio un determinado número de enlaces (conectividad). Si todos los sitios de la red poseen la misma conectividad, se dice que se tiene una red regular u homogénea, en caso contrario se trata de una red irregular o heterogénea”. La Figura muestra la representación de u medio poroso:
(a) (b) Figura 1.1 Representación del medio poroso a través de sitios y enlaces
a) Material poroso real b) Red porosa en 2D
El simulador del modelo anterior permite la construcción de Redes Tridimensionales, donde los sitios están representados por esferas y los enlaces por Cilindros como se muestra en la Figura 2
Figura 1.2 Red Tridimensional
1 Tesis doctoral descrita en las referencias
SITIOS
ENLACES
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
5
Radio enlace
izquierdo
En la Figura 2 se puede observar que se genera un cubo que simula una red porosa de conectividad 6, esto es, cada sitio esta rodeado por 6 enlaces .El primer Simulador2 fue creado por: Víctor Silva Cabrera Juan Guadalupe Rosiles Bernal Juan José Rodríguez Quintanar Y fue creado para Generación de Redes, Intrusión de Mercurio (Hg) y Retracción de Mercurio (Hg) La generación de redes es un paso importante en la simulación, pues se debe representar de la manera más fidedigna a las redes porosas reales. En el primer simulador los pasos que se seguían para generar estas redes fueron los siguientes:
1. Generación de Red Aleatoria: Se generan números aleatorios en donde cada uno de estos representara los radios de los sitios y de los enlaces sin tomar en cuenta si la red esta bien construida, estos valores se van almacenando en la estructura, la cual, consta de un arreglo tridimensional definido de la siguiente manera:
estructura RED { real radio_sitio; real radio_enlace_izquierdo; real radio_enlace_arriba; real radio_enlace_frente; };
Figura 1.3 Representación de medio Poroso donde un sitio es una esfera
Y un enlace es un cilindró
La generación de estos números aleatorios se genera de la fusión “randi” defina en Linux.
2. Corrección de errores del tipo 1. Una vez generada la red aleatoria el simulador procedía a corregir los errores del tipo 1, a continuación se explica que son estos errores.
2 Proyecto termina II descrito en Referencias
Radio sitio
Radio enlace arriba
Radio enlace frente
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
6
Decimos que un a red tiene errores del tipo1 cuando el radio del sitio es menor a alguno de los radios de los enlaces que lo rodean.
Figura 1.4 Representación Visual de un error del tipo 1
Una vez explicado esto, el simulador corregía los errores de tipo 1 mediante un algoritmo el cual generaban números aleatorios y en base a estos se intercambiaban enlaces por enlaces ò sitios por sitios y si el numero de errores disminuía se aceptaban estos cambios, en caso contrario se regresaba a la configuración anterior. 3. Batidos de la red ¿Por qué se realizaba este procedimiento? Antes de realizar este paso la red se encontraba sin ningún error del tipo 1 por lo que se pretendía llegar a una configuración de la red en la cual estuvieran sitios grandes con enlaces grandes y sitios pequeños con enlaces pequeños, de esta forma e lograba relajar la red para que la intrusión se llevara acabo de manera mas eficaz y que esta red se apegara a lo que es una medio poroso real. ¿Cómo funcionaba este algoritmo? Este algoritmo sigue la misma lógica que en la corrección de errores de tipo 1 pero además contenía la restricción de que en cada batido no debía generar ningún error de estos, el número de batidos era determinado por el usuario y este era el punto de parada para poder decir que se logro una relajación satisfactoria sobre la red. 4. Operaciones de la red Una vez que se obtenía una red sin errores de tipo 1 y relajada se procedía a intruir y retraer mercurio (Hg) sobre esta, de esta forma se completaban tres de las tareas primordiales en el estudio de un medio poroso.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
7
2. Objetivos Limitantes del programa
Las principales limitantes del primer simulador para la generación inicial de redes porosas fueron las siguientes:
• Existen otro tipo de errores dentro de la red, que son los geométricos, los cuales hacen que las redes modelen mejor a los materiales porosos.
• Los resultados de salida solo se visualizaban al momento de la ejecución del simulador lo que dificultaba llevar un historial de estos.
• Al inicio el simulador realizaba las operaciones (creación de red, intrusión, retracción) sobre una red de manera independiente ya que estas estaban en programas por separado y para poder comenzar cada una de las operaciones sobre la red se realizaban archivos de texto creados por el usuario los cuales contenían la información necesaria para la creación de la red como:
* Media de sitios. * Media de enlaces. * Desviación estándar. * Longitud de la red. * Numero de batidos. * Altura de sitios. * Altura de enlaces.
* Red sin errores tipo 1 (para intrusión y retracción).
• El programa no estaba estructurado de forma correcta, ya que no se podían visualizar cuales eran las operaciones de la generación de red, cuales eran las operaciones de intrusión y cuales eran las operaciones de la retracción. Todo esto se encantaba en programas por separado y no cumplía las características de una librería.
Los objetivos de este proyecto se orientan a la mejora de procesos de generación de redes porosas, a la generación de resultados para el análisis de redes y al desarrollo de una librería que defina la interfaz de un nuevo simulador. Estos tres se pueden listar de la siguiente forma:
1. Corrección de Errores Geométricos aplicando distintos métodos de relajación de Red.
2. Generación de resultados tales como:
• Calculo del Área de Translape de las distribuciones de Medias de Sitios y
Enlaces • Calculo de Probabilidades de Enlaces • Calculo de Probabilidades de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
8
• Realizar Graficas de probabilidades de Sitios y Enlaces • Realizar Graficas de Distribución de Sitios y Enlaces • Realizar Graficas de Comportamiento de Intrusión.
3. Desarrollar una interfaz de usuario para poder Generar Redes Porosas e Intruir sobre estas.
La manera de solucionar estos objetivos se explicara a lo largo de este informe. .
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
9
3. Generación de redes con restricciones geométricas
3.1 Errores geométricos
Un error geométrico en una red es aquel en donde los enlaces que rodear a un sitio se enciman uno con otro e.i. Sitio Enlace
Figura 3.1 Representación Visual de un Error Geométrico.
Analíticamente la forma de encontrar los errores geométricos es utilizando la formula del teorema de Pitágoras en donde se debe de cumplir la siguiente condición: Rs
2 ≥ Rb12 + Rb2
2 Donde: Rs es el radio del sitio Rb1 es el radio del enlace 1 Rb2 es el radio del enlace 2
Esta estrategia de utilizar el teorema de Pitágoras se utiliza para los diversos métodos de relajación que se implementaron para la corrección de los errores geométricos que podría tener una red. En el siguiente capitulo se describen cada uno de los métodos de relajación de forma detallada que fueron implementados.
Rs
Rb1
Rb2
Figura 3.2 Partes fundamen-
tales de los errores gemetricios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
10
3.2 Corrección de los errores geométricos
3.2.1 Relajación Sitio A continuación se describe la lógica empleada para corregir los errores geométricos de la red por el método de relajación Sitio. Con la finalidad de reducir al máximo el numero de errores geométricos de la red la estrategia utilizada fue la de aumentar el radio de los sitios de forma artificial, es decir, se incrementan los radios de los sitios hasta un cierto porcentaje y posteriormente se fue decrementando poco a poco (para nuestras pruebas incrementamos la red en un 30% y los fuimos reduciendo en 1%) hasta llegar a 0%, es decir, hasta llegar al radio inicial y original de los sitios, esto se realiza en el modulo llamado “Red_crea_c_RG_Sit” en el único ciclo “para” que contiene . 3.2.1.1 Algoritmo Al principio el procedimiento “copia_radios_sitios” se copian los radios originales de la red inicial a una matriz cúbica llamada “rad_orig”. La variable “zz” adquiere el valor con el que se incrementaran los radios de los sitios de forma artificial y se estará decrementando cada vez que se cumpla un ciclo. El procedimiento “modifica_radio_sitio” hace el cambio de los valores iniciales de los radios de los sitios por los valores de los radios de los sitios a los que ya se les ha aplicado el incremento según el porcentaje. La función “violacgeom” le regresa a la variable nviolG el numero de violaciones geométricas que existe antes de empezar a hacer las correcciones de los errores. La función “batidotgeom” regresa el nuevo número de violaciones existentes después de haber hecho modificaciones en la red y mientras nviolG > 0 se estará ejecutando el ciclo mientras, y hasta que zz sea igual a 0 se estará ejecutando el ciclo “para”. Por ultimo se realiza un ultimo batido a la red con la finalidad de relajar mas la red ya que aunque la red cumple con las correcciones geométricas todavía queda tensa, el numero de batidos es un parámetro que lo determina el usuario (a este proceso se le llama isotropía). A continuación se describen a detalle cada uno de los módulos involucrados para la corrección de los errores geométricos con el método de relajación de Sitio.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
11
Figura 3.3 Representación Grafica de la Relajación Sitio.
RED Red_crea_c_RG_Sit (red_sin_error_t1, xmb, L, PasosMonteCarlo) {
.
. .
copia_radios_sitios (red, rad_orig, L); para (zz=30; zz>=0; zz-=1) {
modifica_radio_sitio (red, rad_orig, z, L); haz { nviolG = batidotgeom (red, L, nviolG, randi); j++; } mientras (nviolG>0);
} . . .
mientras (MCS <= PasosMonteCarlo) batidotEq (red, L, &contadorMCS, &MCS, randi); }
Sitio con su radio Inicial.
Sitio aumentado 30%
Sitio aumentado 29%
Sitio aumentado 28%
Sitio aumentado 0%
Durante el decremento en el porcentaje de los sitios se van corrigiendo los errores geométricos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
12
3.2.1.2 Descripción detallada de los módulos empleados
• El procedimiento “copia_radios_sitios” copia los radios de los sitios originales en una matriz cúbica llamada rad_orig, la variable “L” tiene el valor del tamaño de la red.
void copia_radios_sitios (red, rad_orig, L) { int i, j, k; para (i=0; i<L; i++) para (j=0; j<L; j++) para (k=0; k<L; k++) rad_orig[i] [j] [k] =red[i] [j] [k].site; }
• El procedimiento “modifica_radio_sitio” modifica el radio de los sitios de toda la red, se modifican los radios en dependencia del valor “z” que es el que determina el porcentaje que se esta incrementando. Incremento de radios nuevo_radio = (radio_original)*(1+z) Por ejemplo Incremento de los radios en un 30% nuevo_radio = 256.32 * (1+0.3) nuevo_radio = 333.216
void modifica_radio_sitio (red, rad_orig, z, L) { int i, j, k; para (i=0; i<L; i++) para (j=0; j<L; j++) para (k=0; k<L; k++) red[i] [j] [k].site=rad_orig[i] [j] [k]*(1+z); } La función ”violacgeom” regresa el numero total de violaciones geométricas, esto se hace cada vez que se van a corregir los errores geométricos, es decir, cada vez que se decrementa el porcentaje de los radios de los sitios, esta función obtiene mediante las funciones ”enlace_izquierdo”, “enlace_arriba”, “enlace_frente”, “enlace_derecha”, “enlace_abajo”, “enlace_atras” y “sitio” los valores de los radios de los enlaces y el sitio a los que se hace referencia en ese momento (esta en dependencia de los valores i, j, k) y se envían estos parámetros a la función “errores_geom” que regresa el numero de errores geométricos que tiene el sitio que se esta evaluando en ese momento, ese valor lo regresa a la variable ”nviolgeom” que se suma a si misma y se almacena en la variable “nviolG” que es el valor que se regresa a la variable con el mismo nombre del modulo ”Red_crea_c_RG_Sit” que contiene el numero total de errores de la red .
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
13
Figura 3.4 Componentes de un Sitio. int violacgeom (red, L) { para (i=0; i<L; i++) para (j=0; j<L; j++) para (k=0; k<L; k++) { enlace_izquierdo = enizq (red, i, j, k); enlace_arriba = enarriba (red, i, j, k); enlace_frente = enfren (red, i, j, k); enlace_derecha = ender (red, i, j, k, L); enlace_abajo = enabajo (red, i, j, k, L); enlace_atras = enatras (red, i, j, k, L); sitio = sitioac (red, i, j, k); nviolgeom = errores_geom (enlace_derecha, enlace_abajo, enlace_izquierdo, enlace_arriba, enlace_frente, enlace_atras, sitio); nviolG+ = nviolgeom; } return nviolG; } Este modulo como se dijo regresa el número de violaciones geométricas de un sitio en particular, lo que verifica es lo siguiente:
Rs2 ≥ Rb1
2 + Rb22
Donde: Rs es el radio del sitio Rb1 es el radio del enlace 1 Rb2 es el radio del enlace 2 Si no se cumple esta condición el número de errores se incrementa Para encontrar un error geométrico en un sitio utilizamos esta condición de forma inversa y si es cierta se incrementa el numero de errores. Si (Rb1
2 + Rb22 > Rs
2) entonces N° violaciones geométricas se incrementa en 1
Enlace_izquierdo
Enlace_arriba
Enlace_frente
Enlace_abajo Enlace_derecha
Enlace_atras
Rs
Rb1
Rb2
Figura 3.5 Partes fundamen- tales de los errores
gemetricios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
14
Estas operaciones son las que se esta haciendo en el siguiente modulo: int errores_geom (en_derecha, en_abajo, en_izquierdo, en_arriba, en_frente, en_fondo, sitio) { int viol_geom = 0; si ((pow (en_derecha, 2)+pow (en_frente, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_abajo, 2)+pow (en_frente, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_izquierdo, 2)+pow (en_frente, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_arriba, 2)+pow (en_frente, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_derecha, 2)+pow (en_fondo, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_abajo, 2)+pow (en_fondo, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_izquierdo, 2)+pow (en_fondo, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_arriba, 2)+pow (en_fondo, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_arriba, 2)+pow (en_derecha, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_abajo, 2)+pow (en_derecha, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_arriba, 2)+pow (en_izquierdo, 2))>pow (sitio, 2)) viol_geom++; si ((pow (en_abajo, 2)+pow (en_izquierdo, 2))>pow (sitio, 2)) viol_geom++; return viol_geom; } La función ”batidotgeom” lo primero que hace es escoger uno de los casos que permiten cambiar ya sea un enlace por otro enlace (del caso 1 al 9) ò un sitio por otro sitio (casos 0 , 10 y 11) , una vez que se selecciona que tipo cambio es el que se va a hacer, para los cambios de enlaces hay una variable “eg1” que cuenta el numero de errores de los enlaces a los que se esta haciendo referencia (estos enlaces son obtenidos por los subíndices (i1,j1,k1) y (i2,j2,k2) que son obtenidos de forma aleatoria) posteriormente se hace el intercambio de enlaces y se vuelve a hacer el conteo de errores y se guarda en la variable “eg2” y si se cumple que eg1>eg2 quiere decir que el numero de errores disminuye y ya no se hace un cambio mas, pero si por el contrario eg1<= eg2 quiere decir que no hay una reducción en el numero de errores y entonces los enlaces se regresan como estaban en un principio.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
15
Por ejemplo: Suponiendo que el caso que se escoge de forma aleatoria es el 2 (case 2), va a cambiar un enlace X (Bx) por uno Y (By) Figura 3.6 Posibles cambios en Enlaces que se pueden realizar para los errores geométricos.
Como se muestra en este ejemplo eg1 > eg2 por lo que el numero de errores geométrico se redujo, si se hubiera dado el caso de que eg1 <= eg2 entonces los enlaces se regresan a su posición original. Lo que se hace en los casos en los que se cambian enlaces por enlaces (casos del 1 al 9) es lo siguiente: . . . Caso 1-9 :{ eg1 = cuenta_errores_geometricos (Enlace_1) + cuenta_errores_geometricos (Enlace_2) se_hace_el_cambio _de_ posición_de_enlaces eg1 = cuenta_errores_geometricos (Enlace_2) + cuenta_errores_geometricos (Enlace_1) si (eg1<= eg2) regresa_enlaces_a_su_ posición_original caso_contrario (eg2<eg1) numero_violaciones = numero_violaciones-(eg1-eg2) }
regresa (numero_violaciones) } case 2:{ /* enlace x - enlace y */
Enlace a cambiar Enlace_1 Enlace a cambiar
Enlace_2
3 errores2 errores
0 errores 1 errores
El número de errores que hay antes de hacer el cambio de posición de los enlaces es: eg1 = 5
El número de errores que hay después de hacer el cambio de posición de los enlaces es: Eg2 = 1
Enlace_2
Enlace_2
Los enlaces azules son los que se relacionan con los que se van a cambiar para revisar los errores geométricos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
16
eg1 = cuenta_viogeomBx (red, L, i1, j1, k1)+ cuenta_viogeomBy (red, L, i2, j2, k2); swap (&red [i1] [j1] [k1].xb, &red [i2] [j2] [k2].yb); /* Cambio los enlace */ eg2=cuenta_viogeomBx (red, L, i1, j1, k1)+ cuenta_viogeomBy (red, L, i2, j2, k2); si (eg1<=eg2) swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].yb); /*Re-Cambio los Bond*/ else violac = violac-(eg1-eg2); break; } Para los casos 0, 11 y 12 que es donde se hacen cambios de sitios por sitios es análogo a los casos en sonde se hacen cambios de enlaces. La función “cambia_sitiosgeom “ cambia de posición un sitio por otro sitio y regresa a la variable “nviolac” con el nuevo numero de errores en caso de que se haya mejorado este, en caso contrario regresa el mismo numero de errores que ya existían, lo que se hace primero es contar el numero de violaciones que hay antes de hacer el cambio de sitios, este valor se obtiene de la función “error_geom_sitios” que obtiene el numero de errores geométricos para cada uno de los sitios a los que se esta haciendo referencia y la suma errores se guarda en la variable “eg1” , posteriormente se hace el cambio de posición de los sitios y después se vuelven a contar el numero de errores geométricos de los sitios en su nueva posición y la suma de errores se guarda en la variable “eg2”. Después lo que se hace es verificar que no existen errores por llamar los así del “tipo 1” y los guardamos en una variable llamada “e2t” esto para asegurar que no se este descuidando este tipo de errores ya que al cambiar un sitio por otro se pueden volver a generar este tipo de errores con los enlaces que rodean a los sitios en cuestión. Si después de hacer estos cálculos se tiene que (eg1<eg2) ó (e2t!=0) quiere decir que después de los cambios de sitios el numero de errores geométricos incremento ó que en la red hay nuevamente errores del “tipo 1”, entonces se procede a regresarlos a la posición donde estaban originalmente. Y si por el contrario (eg2<eg1) y (e2t=0) quiere decir que el numero de errores geométricos se redujo y que además no existen errores del “tipo 1”, entonces el cambio se queda y se resta el numero de errores que se corrigieron y ese nuevo valor se regresa a la función ”batidotgeom”.
Figura 3.7 Otra representación de errores de Tipo 1
Radio del enlace Rb
Los errores tipo 1 son cuando: Rb > Rs
Radio del sitio S
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
17
Cambio de sitios Si (eg2<eg1) y además (e2t=0) el cambio se queda, de lo contrario (eg1<eg2 ó e2t!=0) se regresan los sitios a su posición original
Figura 3.8 Posibles cambios de Sitios que se pueden presentar el la corrección de errores geométricos.
Algoritmo caso 0,11 ó 12:{ /* sitio - sitio */ violac = cambia_sitiosgeom(red,L,violac,i1,j1,k1,i2,j2,k2); break; } Funcion cambia_sitiosgeom(red ,tamaño_red, No_de_violaciones_geometricas, posicion_sitio1,posicion_sito2) { eg1 = cuenta_errores_geometricos(sitio1) + cuenta_errores_geometricos(sitio2) se_hace_cambio_de_posicion_de_sitios eg1 = cuenta_errores_geometricos(sitio2) + cuenta_errores_geometricos(sitio1) e2t = cuenta_errores_tipo1(sitio1) + cuenta_errores_tipo1(sitio1) si ((eg1<eg2) ó (e2t!=0)) regreso_de_sitios_a_posicion_inicial si ((eg2<eg1) y (e2t==0)) numero_violaciones = numero_violaciones - (eg1-eg2)
Sitio1
Sitio2
Sitio2
Sitio1
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
18
regresa (numero_violaciones) } /*cambia sitios si se mejora el numero de errores geometricos*/ int cambia_sitiosgeom (red, L, nviolG, i1, j1, k1, i2, j2, k2) { int nviolac, eg1, eg2, e2t; nviolac = nviolG; eg1 = error_geom_sitios(red,L,i1,j1,k1)+error_geom_sitios(red,L,i2,j2,k2); swap (&red [i1] [j1] [k1].site, &red [i2] [j2] [k2].site); /* Cambio los sitios */ eg2= error_geom_sitios(red,L,i1,j1,k1)+error_geom_sitios(red,L,i2,j2,k2); e2t=cuenta_vioS(red,L,i1,j1,k1)+ cuenta_vioS(red,L,i2,j2,k2); si ((eg1<eg2) || (e2t!=0)) swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site);/*Re-Cambio los sitios */ si ((eg2<eg1) && (e2t==0)) nviolac = nviolac-(eg1-eg2); return nviolac; }
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
19
3.2.2 Relajación Sitio-Enlace Los fundamentos de este tipo de relajación están basados en el tipo de relajación anterior (Relajación sitio) pero a este se le adiciona un procedimiento el cual también va a modificar el radio de los enlaces. Básicamente en lo que consiste este tipo de relajación es en lo siguiente: Se pretende llegar a una red sin errores geométricos con una xmb_f y una xms, partiendo de una xmb_i con xmb_f > xmb_i , se corrige la red con xmb_i y una vez que ya no tiene errores xmb_i incrementa su valor y se vuelve a corregir y esto se repite hasta que xmb_i sea igual a xmb_f ,esto se hace con la finalidad de llegar a corregir una red de forma mas rápida y que permita además que la media de enlaces con respecto a la de sitios sea mas comprometida (e.i. la diferencia entre media de enlaces y de sitios en pequeña) ya que el método de relajación anterior llegaba a un punto en el cual el numero de errores geométricos ya no disminuía después de un periodo largo de tiempo y cuando las medias de enlaces y sitios era mas comprometida no llegaba a corregir toda la red. La secuencia de este algoritmo es la siguiente:
• Se copian los radios de los sitios a una matriz cúbica auxiliar que servirá como referencia para modificar el radio de los sitios en un cierto porcentaje.
• Se modifica el radio de los sitios según el porcentaje correspondiente al ciclo “para”.
• Se corrigen los errores geométricos para la red en cuestión(al inicio del ciclo es la red con la xmb inicial).
• Una vez que se haya corregido la red se incrementa la media de enlaces, es decir, a toda la red se le incrementa el valor de los radios de los enlaces según la constante “incremento_enlaces”.
• Este ciclo se va a repetir hasta que xmb_i sea igual a xmb_f • Por ultimo a la red se le aplica un cierto número de batidos que es determinado por
el usuario para relajar más la red, estos batidos se hacen cuidando que no se generen más errores en la red durante el cambio de posición de sitios y de enlaces.
En esencia los módulos ocupados en este método son los mismos que el anterior pero a este se le incorpora un nuevo método que incrementa el radio de los enlaces.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
20
Por ejemplo: Media inicial de enlaces = xmb_i
Figura 3.9 Representación Grafica de la Sitio - Enlace. Durante el decremento en el porcentaje de los sitios se van corrigiendo los errores geométricos. Se parte de una media de enlaces inicial y se incrementan los sitios en un 30% y se va decrementando en 1% hasta llegar a su radio original (0%), una vez que ya este corregida esta red la media de enlaces se incrementa en una unidad por ejemplo y se vuelve a repetir el procedimiento anterior hasta que la media de enlaces inicial sea igual a la media de enlaces final. Con esto se logra tener una red con medias de enlaces y sitios más comprometida y en un tiempo menor que si se hace de forma directa con el método anterior (Relajación Sitio).
Sitio aumentado 30% con xmb_i
Sitio aumentado 29% con xmb_i
Sitio aumentado 28% con xmb_i
Sitio aumentado 0% con xmb_i
Sitio aumentado 29% con xmb f
Sitio aumentado 28% con xmb f
Sitio aumentado 0% con xmb_f
Sitio aumentado 30% con xmb_f
xmb_i = xmb_f
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
21
3.2.2.1 Descripción detallada de los módulos empleados La función “Red_crea_c_RG_SitEnl” regresa un valor de tipo RED y es la que se encarga de hacer la corrección de los errores geométricos utilizando el método de relajación Sitio-Enlace. La primera operación que se hace es copiar los radios de los sitios originales en una matriz cúbica auxiliar, esto lo hace el procedimiento “copia_radios_sitios”. Posteriormente una vez que se esta dentro del ciclo “para” lo que se hace es modificar el radio de los sitios, esto es, se incrementan según el porcentaje que esta determinado por la variable “z” y lo hace el procedimiento ”modifica_radio_sitio” para después contar el número de errores geométricos que tiene la red actual, esto lo hace la función “violacgeom”, dentro del ciclo haz-mientras la función “batidotgeom” se encarga de realizar los batidos para corregir los errores geométricos que pueda tener la red en cuestión, esta función regresa el numero de errores que tiene la red y mientras sea mayor a 0 se va a estar ejecutando este ciclo. Una vez que se corrigen los errores geométricos se verifica si los sitios ya regresaron a su tamaño original (e.i cuando “zz = 0”) si no es así se repiten los pasos anteriores en caso contrario se verifica si la media de enlaces inicial (xmb_i) es menor a la media de enlaces final (xmb_f) y si se cumple se incrementa la media de enlaces en un valor que esta determinado por la variable “incremento_enlaces” y se procede a cambiar el radio de todos los enlaces de la red con el procedimiento llamado “modifica_enlaces” para que después se vuelvan a ejecutar todos los pasos antes mencionados, en caso contrario (xmb_i = xmb_f) el programa sale del ciclo “para” y por ultimo realiza el ultimo batido de la red para relajar aun mas la red, esto se hace mediante el procedimiento “batidotEq“ y se va a estar repitiendo según el valor de la variable “PasosMonteCarlo” que su valor es determinado por el usuario. RED Red_crea_c_RG_SitEnl (red, xmb_i, xmb_f, L, ruta, PasosMonteCarlo) { . . . increm = xmb_i; copia_radios_sitios (red, rad_orig, L); para (zz=30; zz>=0; zz-=1) { . . . modifica_radio_sitio (red, rad_orig, z, L); nviolG = batidotgeom (red, L, nviolG, randi); j++; } mientras (nviolG>0); si (zz==0) { . . . increm+ = incremento_enlaces; zz = 31;
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
22
modifica_enlaces (red, L, incremento_enlaces); } . . . } } mientras (MCS <= PasosMonteCarlo) batidotEq (red, L, &contadorMCS, &MCS, randi); return red; } El procedimiento “modifica_enlaces” cambia el radio de los enlaces según el valor de la variable “incremento_enlaces”, es decir, se incrementa la media de enlaces (xmb) para que después se vuelvan a corregir los errores geométricos de la nueva red. void modifica_enlaces (red, L, incremento_enlaces) { int i, j, k; para (i=0; i<L; i++) para (j=0; j<L; j++) para (k=0; k<L; k++) { red[i] [j] [k].xb+=incremento_enlaces; red[i] [j] [k].yb+=incremento_enlaces; red[i] [j] [k].zb+=incremento_enlaces; } } El resto de los módulos mencionados en la descripción anterior son los mismos que se utilizaron en el método de “Relajación Sitio” el único modulo que se adiciono fue el de “modifica_enlaces” en caso de dudas sobre los demás módulos utilizados se pueden consultar en la descripción del método de relajación “Relajación Sitio”
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
23
3.2.3 Relajación Enlace-Enlace En este tipo de relajación es parecido al anterior nada mas que en vez de incrementar en cierto porcentaje el radio de los sitios los que se hace ahora es disminuir en un cierto porcentaje el radio de los enlaces, básicamente en lo que consiste este tipo de relajación es en lo siguiente: Se pretende llegar a una red sin errores geométricos con una xmb_f y una xms, partiendo de una xmb_i con xmb_f > xmb_i , primero se disminuye el radio de los enlaces de la red con la xmb_i en un porcentaje y a esa red alterada se le comienzan a corregir los errores geométricos y una vez que se corrigen se incrementa el radio de los enlaces y se repite el procedimiento hasta que llegue a su radio original , esto se repite hasta que xmb_i sea igual a xmb_f ,esto se hace con la finalidad de llegar a corregir una red de forma mas rápida y que permita además que la media de enlaces con respecto a la de sitios sea mas comprometida (e.i. la diferencia entre media de enlaces y de sitios en pequeña). La secuencia de este algoritmo es la siguiente:
• Se copian los radios de los enlaces a una matriz cúbica auxiliar que servirá como referencia para modificar el radio de los enlaces en un cierto porcentaje.
• Se modifica el radio de los enlaces según el porcentaje correspondiente al ciclo “para”.
• Se corrigen los errores geométricos para la red en cuestión(al inicio del ciclo es la red con la xmb inicial).
• Una vez que se haya corregido la red se incrementa la media de enlaces, es decir, a toda la red se le incrementa el valor de los radios de los enlaces según la constante “incremento_enlaces”.
• Una vez que se hayan modificado los radios de los enlaces se vuelve a copiar estos radios a la matriz cúbica auxiliar para que cuando se repita el ciclo y se modifiquen los radios de los enlaces ya se haga sobre la nueva red que es a la que ya se le ha incrementado la media de enlaces (xmb).
• Este ciclo se va a repetir hasta que xmb_i sea igual a xmb_f • Por ultimo a la red se le aplica un cierto número de batidos que es determinado por
el usuario para relajar más la red, estos batidos se hacen cuidando que no se generen más errores en la red durante el cambio de posición de sitios y de enlaces.
En esencia los módulos ocupados en este método son los mismos que el anterior pero a este se le incorpora un nuevo método que incrementa el radio de los enlaces.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
24
Por ejemplo: Media inicial de enlaces= xmb_i
Figura 3.10 Representación Grafica de la Enlace - Enlace.
Durante el decremento en el porcentaje de los radios de los enlaces se van corrigiendo los errores geométricos. Se parte de una media de enlaces inicial y se decrementan sus radios en un 30% y se va aumentando en 1% hasta llegar a su radio original (0%), una vez que ya este corregida esta red, la media de enlaces se incrementa en una unidad por ejemplo y se vuelve a repetir el procedimiento anterior hasta que la media de enlaces inicial sea igual a la media de enlaces final. Con esto se obtiene una red con medias de enlaces y sitios más comprometida y en un tiempo menor que si se hace de forma directa con el método anterior (Relajación Sitio).
Radios de enlaces reducido 30% con
xmb_i
xmb_i = xmb_f
Radios de enlaces reducido 29% con
xmb_i
Radios de enlaces reducido 0% con xmb_i
(Tamaño original)
Radios de enlaces reducido 30% con
xmb_f
Radios de enlaces reducido 29% con
xmb_f
Radios de enlaces reducido 0% con xmb_f
(Tamaño original)
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
25
3.2.3.1 Descripción detallada de los módulos empleados La función “Red_crea_c_RG_EnlEnl” regresa un valor de tipo RED y es la que se encarga de hacer la corrección de los errores geométricos utilizando el método de relajación Enlace-Enlace. La primera operación que se hace es copiar los radios de los enlaces originales en una matriz cúbica auxiliar, esto lo hace el procedimiento “copia_radios_enlaces”. Posteriormente una vez que se esta dentro del ciclo “para” lo que se hace es modificar el radio de los enlaces, esto es, se decrementa el radio de los enlaces según el porcentaje que esta determinado por la variable “z” y lo hace el procedimiento ”modifica_radio_enlaces” para después contar el número de errores geométricos que tiene la red actual, esto lo hace la función “violacgeom”, dentro del ciclo do-mientras la función “batidotgeom” se encarga de realizar los batidos para corregir los errores geométricos que pueda tener la red en cuestión, esta función regresa el numero de errores que tiene la red y mientras sea mayor a 0 se va a estar ejecutando este ciclo. Una vez que se corrigen los errores geométricos se verifica si los enlaces ya regresaron a su tamaño original (e.i cuando “zz = 0”) si no es así se repiten los pasos anteriores, en caso contrario se verifica si la media de enlaces inicial (xmb_i) es menor a la media de enlaces final (xmb_f) y si se cumple se incrementa la media de enlaces en un valor que esta determinado por la variable “incremento_enlaces” y se procede a cambiar el radio de todos los enlaces de la red con el procedimiento llamado “modifica_enlaces” y una vez que ya se tenga la red con la nueva xmb se vuelve a copiar los radios de los enlaces a la matriz cúbica auxiliar para que cuando se repita el ciclo las operaciones siempre se realicen a la ultima red a la cual se le incremento la xmb, en caso contrario (xmb_i = xmb_f) el programa sale del ciclo “para” y por ultimo realiza el ultimo batido de la red para relajar aun mas la red, esto se hace mediante el procedimiento “batidotEq“ y se va a estar repitiendo según el valor de la variable “PasosMonteCarlo” que su valor es determinado por el usuario. RED Red_crea_c_RG_EnlEnl (red, xmb_i, xmb, L, ruta [], PasosMonteCarlo) { . . .
copia_radios_enlaces (red, rad_orig, L); increm=inicio; para(zz=30;zz>=0;zz-=1) { . . . modifica_radio_enlaces (red, rad_orig, z, L); nviolG = violacgeom (red, L); haz { nviolG = batidotgeom (red, L, nviolG, randi); j++; } mientras (nviolG>0); . . .
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
26
si (zz==0) { si (increm<xmb) { increm+=incremento_enlaces; zz = 31; modifica_enlaces (red, L, incremento_enlaces); copia_radios_enlaces (red, rad_orig, L); } . . . } } mientras (MCS <= PasosMonteCarlo) batidotEq (red, L, &contadorMCS, &MCS, randi); return red; } El procedimiento “copia_radios_enlaces” copia a una matriz cúbica auxiliar llamada “rad_orig” los radios de los enlaces de la red a la que se le este corrigiendo los errores geométricos. void copia_radios_enlaces (red, rad_orig, L) { int i, j, k; para (i=0; i<L; i++) para (j=0; j<L; j++) para (k=0; k<L; k++) { rad_orig[i] [j] [k].xb=red[i] [j] [k].xb; rad_orig[i] [j] [k].yb=red[i] [j] [k].yb; rad_orig[i] [j] [k].zb=red[i] [j] [k].zb; } } El procedimiento “modifica_radio_enlaces” modifica el radio de los enlaces de la red en la que actualmente se este trabajando, estos cambios se van a realizar en dependencia de la variable z que es la que determina el porcentaje con el cual la red se va a modificar. Por ejemplo:
Decremento de radios de enlaces nuevo_radio = (radio_original)*(1-z) Decremento de los radios de los sitios en un 30% nuevo_radio = 256.32 * (1-0.3) nuevo_radio = 179.424
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
27
void modifica_radio_enlaces (red, rad_orig, z, L) { int i, j, k; para (i=0; i<L; i++) para (j=0; j<L; j++) para (k=0; k<L; k++) { red[i] [j] [k].xb= (rad_orig[i] [j] [k].xb)*(1-z); red[i] [j] [k].yb= (rad_orig[i] [j] [k].yb)*(1-z); red[i] [j] [k].zb= (rad_orig[i] [j] [k].zb)*(1-z); } }
3.2.4 Relajación sobre la Formula del calculo de errores Geométricos. En este tipo de relajación no se hace ningún cambio sobre los radios de los enlaces o sobre los radios de los sitios sino que se hace cambios sobre la formula para corregir los errores geométricos (formula del teorema de Pitágoras). Rs
2 ≥ Rb12 + Rb2
2 Donde: Rs es el radio del sitio Rb1 es el radio del enlace 1 Rb2 es el radio del enlace 2 Lo que se hace es multiplicar la suma de los cuadrados de los radios de los enlaces por una variable “A”. Rs
2 ≥ A (Rb12 + Rb2
2) Con A є [0,1] y “A” va incrementando de 0.1 hasta legar a 1. Se pretende llegar a una red sin errores geométricos con una xmb_f y una xms, partiendo de una xmb_i con xmb_f > xmb_i , primero se parte de la xmb_i y cada vez que se corrigen los errores geométricos sobre la red se multiplica la variable “A” a la formula, donde el valor de A empieza en 0 y una vez que se corrigen los errores para ese valor de A se incrementa en 0.1 hasta y se repite el procedimiento hasta llegar a 1 y una vez que se corrigen los errores para xmb_i se incrementa ésta en dependencia de la variable “incremento_enlaces” y se repite este proceso hasta que xmb_i sea igual a xmb_f, esto se hace con la finalidad de llegar a corregir una red de forma mas rápida y que permita además que la media de enlaces con respecto a la de sitios sea mas comprometida (e.i. la diferencia entre media de enlaces y de sitios en pequeña).
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
28
La secuencia de este algoritmo es la siguiente: • Dentro del ciclo “para” se calculan los errores geométricos de la red tomando en
cuenta el valor que tiene “A” en ese momento (el valor de “A” lo determina la variable z).
• Se corrigen los errores geométricos para la red en cuestión(al inicio del ciclo es la red con la xmb inicial).
• Una vez que se haya corregido la red se incrementa la media de enlaces, es decir, a toda la red se le incrementa el valor de los radios de los enlaces según la constante “incremento_enlaces”.
• Este ciclo se va a repetir hasta que xmb_i sea igual a xmb_f • Por ultimo a la red se le aplica un cierto número de batidos que es determinado por
el usuario para relajar más la red, estos batidos se hacen cuidando que no se generen más errores en la red durante el cambio de posición de sitios y de enlaces.
RED Red_crea_c_RG_varA (red, xmb_i, xmb, L, ruta [], PasosMonteCarlo) { . . . para (zz = 0; zz<=10; zz++) { . . . nviolG=violacgeom_A (red, L, z); haz { nviolG = batidotgeom_A (red, L, nviolG, randi, z); j++; } mientras (nviolG>0); si (zz==10) { si (increm<xmb) { increm+=incremento_enlaces; zz = -1; modifica_enlaces (red, L, incremento_enlaces); } } } . . . mientras (MCS <= PasosMonteCarlo) batidotEq (red, L, &contadorMCS, &MCS, randi); return red; } El modulo que cuenta el número de errores geométricos en este tipo de relajación cambia ya que interviene la variable “A”. Para encontrar un error geométrico en un sitio utilizamos la siguiente lógica. Si (A (Rb1
2 + Rb22 ) > Rs
2) entonces violaciones geométricas se incrementa en 1
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
29
int errores_geom_A (en_derecha, en_abajo, en_izquierdo, en_arriba, en_frente, en_fondo, sitio, A) { int viol_geom = 0; si ((A*(pow (en_derecha, 2)+pow (en_frente, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_abajo, 2)+pow (en_frente, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_izquierdo, 2)+pow (en_frente, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_arriba, 2)+pow (en_frente, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_derecha, 2)+pow (en_fondo, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_abajo, 2)+pow (en_fondo, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_izquierdo, 2)+pow (en_fondo, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_arriba, 2)+pow (en_fondo, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_arriba, 2)+pow (en_derecha, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_abajo, 2)+pow (en_derecha, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_arriba, 2)+pow (en_izquierdo, 2)))>pow (sitio, 2)) viol_geom++; si ((A*(pow (en_abajo, 2)+pow (en_izquierdo, 2)))>pow (sitio, 2)) viol_geom++; return viol_geom; }
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
30
4. Generación de Gráficas y Estatísticas
4.1 Calculo del Área de Translape Como ya sabemos dentro de la generación de la Red, se están manejando dos distribuciones Gaussinas una para la Distribución de Sitios y la otra para la Distribución de enlaces. En ellas se presenta lo que llamamos Área de Traslape, en la Figura 4.1 se pueden observar el ejemplo de dos graficas las cuales tienen los siguientes datos: Media de Sitios = 265 Media de Enlaces = 225 Sigma = 15
Figura 4.1 Grafica que muestra las principales partes para el calculo de Área de Translape Procederemos pues a describir cada una de estas partes y veremos como calcular esta area.
Distribución de Enlaces:
⎥⎦
⎤⎢⎣
⎡ −−
∏ 2
2
221
σσ)RR(
exp BB
Distribución de Sitios:
⎥⎦
⎤⎢⎣
⎡ −−
∏ 2
2
221
σσ)RR(
exp SS
Ri = Punto de Intersección 1 - S (Ri) B (Ri)
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
31
4.1.1 Planteamiento del Problema Se deben identificar los principales elementos que se presentan en el calculo del Área de Translape, estos son los que pudieron observar en la figura 4.1, lo cuales son punto de intersección, Formula de Función de Distribución de Enlaces, Formula de Función de Distribución de Sitios, para poder calcular dicha área se debe proceder primero a plantear u despejar una serie de formulas analíticas que nos llevaran a ver como es el planteamiento de este problema. Para calcular el Área del Translape tenemos la siguiente formula:
))Ri(B)Ri(S(Translape +−=1 Formula 4.1 Se puede observa que para calcular el translape se necesita primero calcular el Área S (Ri) y posteriormente el Área B (Ri), para ello lo primero que haremos será igualar las dos funciones de distribución para poder encontrar el Punto de Intersección: Se igualan las funciones
⎥⎦
⎤⎢⎣
⎡ −−∏ 2
2
221
σσ)RR(
exp BB = ⎥⎦
⎤⎢⎣
⎡ −−
∏ 2
2
221
σσ)RR(
exp SS
Multiplicamos por σ∏2
1 ambas partes:
⎥⎥⎦
⎤
⎢⎢⎣
⎡⎥⎦
⎤⎢⎣
⎡ −−
∏∏=
⎥⎥⎦
⎤
⎢⎢⎣
⎡⎥⎦
⎤⎢⎣
⎡ −−
∏∏ 2
2
2
2
221
21
221
21
σσσσσσ)RR(
exp)RR(
exp BBBB
⎥⎦
⎤⎢⎣
⎡ −−=⎥
⎦
⎤⎢⎣
⎡ −−2
2
2
2
22 σσ)RR(
exp)RR(
exp BBBB
Se saca logaritmo de las dos partes:
⎥⎥⎦
⎤
⎢⎢⎣
⎡⎥⎦
⎤⎢⎣
⎡ −−=
⎥⎥⎦
⎤
⎢⎢⎣
⎡⎥⎦
⎤⎢⎣
⎡ −−2
2
2
2
22 σσ)RR(
explog)RR(
explog BBBB
2
2
2
2
22 σσ)RR()RR( BBBB −−
=−−
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
32
Como sabemos que las dos sigmas (“σ ”) son iguales podemos multiplicar por -2σ 2 ambos lados:
⎥⎦
⎤⎢⎣
⎡ −−−=⎥
⎦
⎤⎢⎣
⎡ −−− 2
22
2
22
22
22
σσ
σσ
)RR()RR( BBBB
22 )RR()RR( SSBB −=−
Sabemos que estamos buscando del punto de intersección de las dos funciones por ello podemos sustituir RB y RS por Ri, ya que hayamos hecho esto desarrollamos el cuadrado de ambos lados y optemos la siguiente formula para poder encontrar el punto de Intersección:
)RR(RR
RBS
Si −
−=
2
22B Formula 4.2
Donde:
• SR = Media de Sitios • BR = Media de Enlaces
Podemos calcular ahora cualquier punto de Intersección de dos funciones gaussianas, estos nos sirve además para poder entrar de lleno al calculo de el Área del Traslape, para esto recordamos que la Formula 4.1 tenia implícito el calculo de dos Áreas. Una era S (Ri) y la otra era B (Ri), calcularemos el área B (Ri) y como las funciones se encuentran normalizadas se puede calcular el otro pedazo de área que falta multiplican por 2 a B (Ri) y de esa forma tendremos el Área de Traslape.
)Ri(B*Translape 2= Formula 4.3
4.1.2 Algoritmo para resolver el Problema El primer punto que se tomo en consideración para poder resolver el problema del Calculo del Translape fue ver con que método se calcularía esta área, nosotros propusimos el método del trapecio el cual lo explicaremos a continuación:
El método de los trapecios es muy simple y se puede explicar fácilmente a partir de la Figura 4.2.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
33
Figura 4.2 Ejemplo del Método de Trapecio
Eligiendo un espaciado
Se divide el intervalo [a, b] por medio de puntos igualmente espaciados
Tenemos que, las ordenadas de dichos puntos son
En cada intervalo (xi, xi+1) se sustituye la función f(x) por la recta que une los puntos (xi, yi) y (xi+1, yi+1) tal como se aprecia en la Figura 4.2.
La parte sombreada, un trapecio, se toma como el área aproximada, su valor se puede calcular fácilmente
El área total aproximada es la suma de las áreas de los n pequeños trapecios de anchura h
O bien, agrupando términos
Cuanto mayor sea el número de divisiones del intervalo [a, b] que hagamos, menor será h, y más nos aproximaremos al valor exacto de la integral.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
34
Una vez que se explico esto dentro del código nosotros propusimos 4 módulos que se encargar de calcular el área, estos módulos son los siguientes:
• Calculo de Translape • Punto de Intersección de las dos funciones gaussianas • Método de Trapecio • Función de Evaluación de las Distribuciones
4.1.2.1 Calculo de Translape En este modulo se encuentran las llamadas a los otros tres módulos y es el que se encarga de poner los mensajes en pantalla de cada uno de los resultados obtenidos. 4.1.2.2 Punto de Intersección de las dos Funciones Gaussianas En este modulo es donde se calcula el punto de intersección de dos funciones gaussinanas, se le pasan los datos de las medias de Enlaces y de Sitios, recordamos la Formula 4.2 la cual era para calcular el punto de intersección pues esta es la que implementamos de manera directa en este modulo, por lo que la única función que tiene este modulo es sustituir los valores y obtener así Ri (Punto de Intersección), el cual será regresado al modulo Calculo de Translape. 4.1.2.3 Método de Trapecio En este modulo es donde se implemento el Meto de Trapecio explicado anteriormente: Lo primero que hay que localizar, es el Limite Inferior y Superior sobre los cuales se va integrar la función, estos se pueden visualizar mejor en la Figura 4.3: Limite Inferior = Limite Superior = xrb +
(3*sigma)
Figura 4.3 Limite Superior e Inferior
de la Grafica de distribución de Sitio - Enlace
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
35
Se procede posteriormente a calcular el tamaño de nuestras particiones que va esta almacenado en la variable h:
n)eriorinf_itelimeriorsup_ite(limh −
=
Entre mas grande sea n la aproximación será mejor. Se calcula posteriormente cuanto vale cada uno de los subintervalos evaluados en la función esto se hace mediante el siguiente ciclo: para (x=limite_inferior + h; x < limite_superior; x+=h) So+ = f (x, xrb, sigma); Donde:
• xmb = Media de Enlaces. • So = Variable donde se almacenará la evaluación de cada subintervalo.
Se propone la siguiente formula para poder calcular el Área de B (Ri): Area = (h*(f (inf, xrb, sigma) +2*So+f (sup, xrb, sigma))/2.0) Una vez obtenida esta área retomaremos la Formula 4.3 y obtendremos el traslape de la siguiente forma: Translape = Área * 2 4.1.2.4 Función de Evaluación de las Distribuciones La función que se va estar evaluando va ser la siguiente: 1/(sqrt (2*Pi)*sigma))*(exp ((-(pow ((Ri-xrb) ,2)))/ (2*pow (sigma, 2))) Donde:
• Sqrt = Función Raíz Cuadrada definida en C. • Pi = 2*Π • sigma = Desviación Estándar. • exp = Función exponencial definida en C. • pow = Función para poder elevar a alguna potencia un valor o
variable. • Ri = Punto de Intelección obtenido en el modulo punt_inters. • xrb = Media de Enlaces.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
36
4.2 Calculo de Probabilidad de Enlaces El cálculo de Probabilidades de Enlaces, localiza que enlaces de diferentes tamaños están rodeando a un sitio de un tamaño dado (Media de Sitios + sigma, Media de Sitios – sigma, Media de Sitios), con el objetivo de ver que comportamiento tienen estos sitios dentro de la generación de redes sin errores geométricos.
4.2.1 Planteamiento Del Problema Los siguientes pasos muestran como se localizan las Probabilidades de Enlaces:
1. Dentro de la RED sin ningún error geométrico, obtenida por los cuatro Métodos de Relajación explicados anteriormente, se localizan Sitios con ciertos tamaños, estos son:
• xms (Media de Sitios) • xms + sigma (Media de Sitios mas Sigma) • xms – sigma (Media de Sitios menos Sigma)
2. Cada uno de estos sitios es rodeado por enlaces de diferente tamaño dentro del
intervalo [xmb-(3*sigma), xmb + (3*sigma)], localizaremos estos enlaces y veremos que probabilidades tiene un sitio de estar rodeado por un enlace de diferente tamaño, de aquí radica el nombre de Probabilidad de Enlaces.
Definiremos la siguiente función:
⎥⎦
⎤⎢⎣
⎡
S
B
RR
ρ
Esta es la Densidad de Probabilidad Condicional de que dado un Sitios de tamaño RS, se encuentre conectado a un enlace de tamaño RB. Como se calcula directamente en la RED:
Nx
RR i
S
B ∑=⎥⎦
⎤⎢⎣
⎡ρ Formula 4.4
Donde:
• xi = Evento de Encontrar un enlace de tamaño RB conectado a un Sitio de tamaño fijo RS.
• N = Numero tal de enlaces conectados a sitios de tamaño Rs
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
37
Dado esto debemos localizar entonces estas tres probabilidades:
1. ⎥⎦
⎤⎢⎣
⎡
S
B
RR
ρ
2. ⎥⎦
⎤⎢⎣
⎡+ σ
ρS
B
RR
3. ⎥⎦
⎤⎢⎣
⎡−σ
ρS
B
RR
Correspondiente a los tamaños de Sitios: SR (Media de Sitios), σ+SR (Media de Sitios + sigma), σ−SR (Media de Sitios – sigma)
4.2.2 Algoritmo para resolver el Problema ¿Qué se planteo para resolver este Problema? Fue muy simple, se genera una red sin errores geométricos con cualquiera de los cuatro métodos de relajación, ya que se tiene esta red se localizan uno por uno los diferentes sitios que cumplan estar en los tres tamaños que se definieron anteriormente, dado que el programa genera números aleatorio reales, nunca encontraremos sitios con los tres tamaños anteriormente vistos, por ello se definen tres tamaños nuevos, que no necesariamente son tamaños, mas bien son inérvalos en los que puede caer algún sitio:
1. [xms-δ, xms+ δ] (Media de Sitios – Delta, Media de Sitios + Delta) 2. [(xms + sigma)-δ, (xms + sigma)+ δ] (Media de Sitios mas Sigma – Delta,
Media de Sitios mas Sigma + Delta ) 3. [(xms - sigma)-δ, (xms - sigma)+ δ] (Media de Sitios menos Sigma – Delta,
Media de Sitios menos Sigma + Delta ) Vamos a poner un ejemplo, se localiza un sitio que cae en el Intervalo numero 2:
Figura 4.4 Sitio que esta dentro del intervalo [(xms + sigma)-δ, (xms + sigma)+ δ]. Se localizan que enlaces lo están rodeando y de que tamaño son estos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
38
0 … 9 … 13 … 15 …. 30 …. 40 ….
Sabemos que cada uno de los sitios esta rodeado por enlaces de diferente tamaño, el tamaño de estos enlaces esta delimitado por el intervalo [xmb-(3*sigma), xmb + (3*sigma)], este intervalo lo tendremos que dividir en subintervalos pequeños, los subintervalos van a ser de la siguiente forma:
Primer Subintervalo = [xmb – (3*sigma), (xmb – (3*sigma)) + 1] Segundo Subintervalo = [(xmb – (3*sigma)) + 1, (xmb – (3*sigma)) + 2] Tercero Subintervalo = [(xmb – (3*sigma)) + 2, (xmb – (3*sigma)) + 3] Cuarto Subintervalo = [(xmb – (3*sigma)) + 3, (xmb – (3*sigma)) + 4] . . . n Subintervalo = [(xmb – (n-1*sigma)) + n-1, (xmb – (n-1*sigma)) + n] Cada subintervalo va ir de una unidad en unidad para que se consideren todos los tamaños de los enlaces, de esta forma podemos utilizar un tipo de dato definido en C, el cual es un arreglo, dentro de este arreglo irán cada una de las probabilidades para los distintos valores de enlaces. Retomando el ejemplo el sitio esta rodeado por 6 enlaces como máximo, los 6 enlaces pueden estar en el primer subintervalo, en el quinceavo, en el noveno, en el cuarentavo, en el treceavo y en el treintavo respectivamente, por lo que el arreglo ira depositando primero cuantos enlaces están rodeando a un sitio con un tamaño fijo de la siguiente forma: 1 …. 1 … 1 … 1 …. 1 …. 1 …
El arreglo ira de la posición [0, 1, 2, 3, …. , n], en donde n se conoce y se puede calcular muy fácil, sabemos que vamos estar monitoreando todos los tamaños de los enlaces, por ello tenemos un limite superior para la distribución que es xmb – (3*sigma) y un limite superior que es xmb + (3*sigma), por ello el tamaño de este intervalo seria la diferencia por lo que se obtiene el valor de n o lo que es lo mismo:
)))*(xmb())*(xmb((n σσ 33 −−+= De esta forma podemos declarar arreglos largos como se muestra a continuación: float *prob1; prob1= (float *) malloc (diferencia* sizeof (int)); Tenemos que declarar tres arreglos para cada uno de los valores posibles que puede tomar un Sitio, el algoritmo que se implemento para poder resolver esto se conforma por dos módulos:
• Calculo de Probabilidad de Enlaces • Conteo de Enlaces que rodean a un Sitio
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
39
4.2.2.1 Calculo de probabilidad de Enlaces En este modulo se van a ir localizando cada uno de los Sitios que se presenten en la Red este numero de Sitios va estas acumulado en tres variables distintas, una vez que se haya recorrido toda la RED, tendremos diferentes valores para estas variables, por ejemplo: N1 = 320 N2 = 420 N3 = 280 Comentamos anteriormente que cada sitio esta rodeado por 6 enlaces como máximo, pues ese número de enlaces es por el que vamos a multiplicar cada una de las variables N’es, y este va a ser el factor N de la Formula 4.4, esto es: N1 = 320 * 6 = 1920 N2 = 420 * 6 = 2520 N3 = 280 * 6 = 1680 ¿Como se obtienen estas N’es? Se hace mediante un triple ciclo anidado, el cual va estar recorriendo la RED Índice por Índice, como se muestra en el siguiente pseudo código: para(i=0;i<L;i++){ para(j=0;j<L;j++){ para (k=0; k<L; k++) { si ((sitio<= (xms+delta)) && (sitio>= (xms-delta))) { conts1++; prob_enlaces (parametros_de_la_funcion); } si ((sitio<= ((xms+sigma)+delta)) && (sitio>= ((xms+sigma)-delta))) { conts2++; prob_enlaces (parametros_de_la_funcion); } si ((sitio<= ((xms-sigma)+delta)) && (sitio>= ((xms- sigma)-delta))) { conts3++; prob_enlaces (parametros_de_la_funcion); } } } } N1=conts1*6; N2=conts2*6; N3=conts3*6; si((N1!=0)&&(N2!=0)&&(N3!=0)){ para (z=0; z<diferencia; z++) prob1[z]/=N1,prob2[z]/=N2,prob3[z]/=N3; }
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
40
Se puede observar que hay tres comparaciones que corresponden a los tres intervalos para los tamaños de sitios, en donde cada vez que se encuentra un sitio se incrementa un contador especial, y se hace una llamada a la función prob_enlaces la cual se va encargar de ver que enlace lo rodea e ir llenando el arreglo, al final se multiplica los diferentes contadores por 6 y se obtienen las N’es, después de obtener las N’es procedemos a obtener las probabilidades, lo único que se hace es dividir cada uno de los arreglos correspondientes a los tres intervalos de los valores de sitios entre su N correspondiente. 4.2.2.2 Conteo de Enlaces que rodean a un Sitio. En esta función se va a recorrer los diferentes intervalos de la distribución de enlaces, y de esta manera llenar cada uno de los arreglos para los distintos tamaños que pueda tomar un sitio, por ello se le va a mandar que arreglo es el que se va a manipular, y que enlaces están rodeando al sitio el algoritmo que se implemento es el siguiente: para (mrb = lim_infb; mrb<=lim_supb; mrb++) { si ((enlace_izquierdo<=b) && (enlace_izquierdo>=a)) contb++; si ((enlace_arriba<=b) && (enlace_arriba>=a)) contb++; si ((enlace_frente<=b) && (enlace_frente>=a)) contb++; si ((enlace_derecha<=b) && (enlace_derecha>=a)) contb++; si ((enlace_abajo<=b) && (enlace_abajo>=a)) contb++; si ((enlace_atras<=b) && (enlace_atras>=a)) contb++; acm=prob[ri]+contb; prob[ri]=acm; contb = 0; ri++; a=b; b++; } Se verifica en que posición del arreglo deben ir los 6 enlaces que rodean al sitio y así hasta terminar todo el modulo Red_prob_enlaces.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
41
4.3 Calculo de Probabilidad de Sitios El cálculo de Probabilidades de Sitios, localiza que sitios de diferentes tamaños están rodeando a un enlace de un tamaño dado (Media de Enlaces + sigma, Media de Enlaces – sigma, Media de Enlaces), con el objetivo de ver que comportamiento tienen estos enlaces dentro de la generación de redes sin errores geométricos
4.3.1 Planteamiento Del Problema Los siguientes pasos muestran como se localizan las Probabilidades de Sitios:
1. Dentro de la RED sin ningún error geométrico, obtenida por los cuatro Métodos de Relajación explicados anteriormente, se localizan Enlaces con ciertos tamaños, estos son:
• xmb (Media de Sitios) • xmb + sigma (Media de Sitios mas Sigma) • xmb – sigma (Media de Sitios menos Sigma)
2. Cada uno de estos enlaces es conectado por dos sitios como máximo, estos sitios son de diferente tamaño dentro del intervalo [xms-(3*sigma), xms + (3*sigma)], localizaremos estos sitios y veremos que probabilidades tiene un enlace de estar rodeado por un sitio de un tamaño dado, de aquí radica el nombre de Probabilidad de Sitios.
Definiremos la siguiente función:
⎥⎦
⎤⎢⎣
⎡
B
S
RR
ρ
Esta es la Densidad de Probabilidad Condicional de que dado un Enlace de tamaño RB, se encuentre conectado a un Sitio de tamaño RS. Como se calcula directamente en la RED:
Nx
RR i
B
S ∑=⎥⎦
⎤⎢⎣
⎡ρ Formula 4.5
Donde:
• xi = Evento de Encontrar un sitio de tamaño RS conectado a un Enlace de tamaño fijo RB.
• N = Numero tal de Sitios conectados a un Enlace de tamaño RB Dado esto debemos localizar entonces estas tres probabilidades:
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
42
1. ⎥⎦
⎤⎢⎣
⎡
B
S
RR
ρ
2. ⎥⎦
⎤⎢⎣
⎡+ σ
ρB
S
RR
3. ⎥⎦
⎤⎢⎣
⎡−σ
ρB
S
RR
Correspondiente a los tamaños de Sitios: BR (Media de Enlaces), σ+BR (Media de Enlaces + sigma), σ−BR (Media de Enlaces – sigma)
4.3.2 Algoritmo para resolver el Problema ¿Qué se planteo para resolver este Problema? Fue muy simple, se genera una red sin errores geométricos con cualquiera de los cuatro métodos de relajación, ya que se tiene esta red se localizan uno por uno los diferentes enlaces que cumplan estar en los tres tamaños que se definieron anteriormente, dado que el programa genera números aleatorio reales, nunca encontraremos enlaces con los tres tamaños anteriormente vistos, por ello se definen tres tamaños nuevos, que no necesariamente son tamaños, mas bien son inérvalos en los que puede caer algún enlace:
4. [xmb-δ, xmb+ δ] (Media de Enlaces – Delta, Media de Enlaces + Delta) 5. [(xmb + sigma)-δ, (xmb + sigma)+ δ] (Media de Enlaces mas Sigma – Delta,
Media de Enlaces mas Sigma + Delta ) 6. [(xmb - sigma)-δ, (xmb - sigma)+ δ] (Media de Enlaces menos Sigma – Delta,
Media de Enlaces menos Sigma + Delta ) Vamos a poner un ejemplo, se localiza un enlace que cae en el Intervalo numero 2:
Figura 4.5 Enlace que esta dentro del intervalo [(xmb + sigma)-δ, (xmb + sigma)+ δ]. Se localizan que sitios lo están rodeando y de que tamaño son estos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
43
0 … 9 … 13 … 15 …. 30 …. 40 ….
Sabemos que cada uno de los enlaces esta rodeado por sitios de diferente tamaño, el tamaño de estos sitios esta delimitado por el intervalo [xms-(3*sigma), xms + (3*sigma)], este intervalo lo tendremos que dividir en subintervalos pequeños, los subintervalos van a ser de la siguiente forma:
Primer Subintervalo = [xms – (3*sigma), (xms – (3*sigma)) + 1] Segundo Subintervalo = [(xms – (3*sigma)) + 1, (xms – (3*sigma)) + 2] Tercero Subintervalo = [(xms – (3*sigma)) + 2, (xms – (3*sigma)) + 3] Cuarto Subintervalo = [(xms – (3*sigma)) + 3, (xms – (3*sigma)) + 4] . . . n Subintervalo = [(xms – (n-1*sigma)) + n-1, (xms – (n-1*sigma)) + n] Cada subintervalo va ir de una unidad en unidad para que se consideren todos los tamaños de los sitios, de esta forma podemos utilizar un tipo de dato definido en C, el cual es un arreglo, dentro de este arreglo irán cada una de las probabilidades para los distintos valores de sitios. Retomando el ejemplo el enlace esta conectado con dos sitios como máximo, los dos enlaces pueden estar en el quinceavo subintervalo y en el treintavo respectivamente, por lo que el arreglo ira depositando primero cuantos sitios están rodeando a un enlace sitio con un tamaño fijo de la siguiente forma:
El arreglo ira de la posición [0, 1, 2, 3, …. , n], en donde n se conoce y se puede calcular muy fácil, sabemos que vamos estar monitoreando todos los tamaños de los sitios, por ello tenemos un limite superior para la distribución que es xms – (3*sigma) y un limite superior que es xms + (3*sigma), por ello el tamaño de este intervalo seria la diferencia por lo que se obtiene el valor de n o lo que es lo mismo:
)))*3(())*3((( σσ −−+= xmsxmsn De esta forma podemos declarar arreglos largos como se muestra a continuación: float *prob1; prob1= (float *) malloc (diferencia* sizeof (int)); Tenemos que declarar tres arreglos para cada uno de los valores posibles que puede tomar un Enlace, el algoritmo que se implemento para poder resolver esto se conforma por dos módulos:
• Calculo de Probabilidad de Sitios • Conteo de Sitios que rodean a un Enlace
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
44
4.3.2.1 Calculo de Probabilidades de Sitios En este modulo se van a ir localizando cada uno de los Enlaces que se presenten en la Red este numero de Enlaces va estas acumulado en tres variables distintas, una vez que se haya recorrido toda la RED, tendremos diferentes valores para estas variables, por ejemplo: N1 = 560 N2 = 830 N3 = 380 Comentamos anteriormente que cada enlace esta rodeado por 2 sitios como máximo, pues ese número de sitios es por el que vamos a multiplicar cada una de las variables N’es, y este va a ser el factor N de la Formula 4.5, esto es: N1 = 560 * 2 = 1120 N2 = 830 * 2 = 1660 N3 = 380 * 2 = 760 ¿Como se obtienen estas N’es? Se hace mediante un triple ciclo anidado, el cual va estar recorriendo la RED Índice por Índice, como se muestra en el siguiente pseudo código: para (i=0;i<L;i++){ para (j=0;j<L;j++){ para (k=0;k<L;k++){
si ((e_iz <= (xmb+delta))&&(e_iz >= (xmb-delta))||(e_ar <= (xmb+delta))&&(e_ar >= (xmb-delta))||(e_fr <= (xmb+delta))&&(e_fr >= (xmb-delta))||(e_de <= (xmb+delta))&&(e_de >= (xmb-delta))||(e_ab <= (xmb+delta))&&(e_ab >= (xmb-delta))||(e_at <= (xmb+delta))&&(e_at >= (xmb-delta))){
tamanio1 = xmb+delta; tamanio2 = xmb-delta;
contb1=contb1 + prob_sitios (parámetros de la función);
}
si ((e_iz <= ((xmb+sigma)+delta))&&(e_iz >= ((xmb+sigma)-delta))||(e_ar <= ((xmb+sigma)+delta))&&(e_ar >= ((xmb+sigma)-delta))||(e_fr <= ((xmb+sigma)+delta))&&(e_fr >= ((xmb+sigma)-delta))||(e_de <= ((xmb+sigma)+delta))&&(e_de >= ((xmb+sigma)-delta))||(e_ab <= ((xmb+sigma)+delta))&&(e_ab >= ((xmb+sigma)-delta))||(e_at <= ((xmb+sigma)+delta))&&(e_at >= ((xmb+sigma)-delta))){
tamanio1= (xmb+sigma)+delta; tamanio2= (xmb+sigma)-delta;
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
45
contb2=contb2 + prob_sitios (parámetros de la función);
}
si ((e_iz <= ((xmb-sigma)+delta))&&(e_iz >= ((xmb-sigma)-delta))||(e_ar <= ((xmb-sigma)+delta))&&(e_ar >= ((xmb-sigma)-delta))||(e_fr <= ((xmb-sigma)+delta))&&(e_fr >= ((xmb-sigma)-delta))||(e_de <= ((xmb-sigma)+delta))&&(e_de >= ((xmb-sigma)-delta))||(e_ab <= ((xmb-sigma)+delta))&&(e_ab >= ((xmb-sigma)-delta))||(e_at <= ((xmb-sigma)+delta))&&(e_at >= ((xmb-sigma)-delta))){
tamanio1= (xmb-sigma)+delta;
tamanio2= (xmb-sigma)-delta; contb3=contb3 + prob_sitios (parámetros de la función);
} } } } N1=contb1*2; N2=contb2*2; N3=contb3*2; si((N1!=0)&&(N2!=0)&&(N3!=0)){
para (z=0; z<diferencia; z++) prob1[z]/=N1,prob2[z]/=N2,prob3[z]/=N3; } Se puede observar que las comparaciones de este modulo solo cuentan un solo enlace de un determinado tamaño para ver los distintos enlaces que se localizan de distintos tamaños debemos ver como se planteo en la función Calculo de Probabilidad de Sitios. 4.3.2.2 Conteo de Sitios que rodean a un Enlace Esta es la función que tiene mas peso para localizar las probabilidades de sitios, sabemos que al haber echo una llamada a esta función se encontró un enlace con uno de los intervalos de tamaños de enlaces, tenemos 6 posibilidades, de que esto haya ocurrido, se puede haber tratado de un enlace izquierdo, enlace derecho, enlace arriba enlace abajo, enlace frente y enlace atrás, por ello, se deben hacer 6 comparaciones para ver cuantos de todos estos posibles enlaces están dentro del intervalo localizado, por ello este algoritmo prevé esta situación realizando las 6 comparaciones y en cada comparación reporta que Sitios dentro del intervalo de distribución de sitios esta rodeando a los enlaces, y se vera en donde corresponde ponerlos dentro del arreglo para tener las probabilidades de los tres intervalos de tamaño de enlaces, el algoritmo es el siguiente:
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
46
si ((e_iz <= (tamanio1))&&(e_iz >= (tamanio2))){ contb++; para (mrs = lim_infs; mrs<=lim_sups; mrs++) { si ((sitio<=b) && (sitio>=a)) conts++; si((s_iz<=b) && (s_iz>=a)) conts++; acm = prob [ri] +conts; prob [ri] =acm; conts=0; ri++; a=b; b++; } a=lim_infs; b=lim_infs+1; ri=0; } si ((e_ar <= (tamanio1))&&(e_ar >= (tamanio2))){ contb++; para (mrs = lim_infs; mrs<=lim_sups; mrs++) { si ((sitio<=b) && (sitio>=a)) conts++; si ((s_ar<=b) && (s_ar>=a)) conts++; acm=prob [ri] +conts; prob [ri] =acm; conts=0; ri++; a=b; b++; } a=lim_infs; b=lim_infs+1; ri=0; } si ((e_fr <= (tamanio1))&&(e_fr >= (tamanio2))){ contb++; para (mrs = lim_infs; mrs<=lim_sups; mrs++) { si ((sitio<=b) && (sitio>=a)) conts++; si ((s_fr<=b) && (s_fr>=a)) conts++; acm = prob [ri] +conts; prob [ri] =acm; conts=0; ri++; a=b; b++; } a=lim_infs;
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
47
b=lim_infs+1; ri=0; } si ((e_de <= (tamanio1))&&(e_de >= (tamanio2))){ contb++; para (mrs = lim_infs; mrs<=lim_sups; mrs++) { si ((sitio<=b) && (sitio>=a)) conts++; si ((s_de<=b) && (s_de>=a)) conts++; acm=prob [ri] +conts; prob [ri] =acm; conts=0; ri++; a=b; b++; } a=lim_infs; b=lim_infs+1; ri=0; } si ((e_ab <= (tamanio1))&&(e_ab >= (tamanio2))){ contb++; para (mrs=lim_infs; mrs<=lim_sups; mrs++) { si ((sitio<=b) && (sitio>=a)) conts++; si ((s_ab<=b) && (s_ab>=a)) conts++; acm=prob [ri] +conts; prob [ri] =acm; conts=0; ri++; a=b; b++; } a=lim_infs; b=lim_infs+1; ri=0; } si ((e_at <= (tamanio1))&&(e_at >= (tamanio2))){ contb++; para (mrs=lim_infs; mrs<=lim_sups; mrs++) { si ((sitio<=b) && (sitio>=a)) conts++; si ((sat <= b) && (sat>=a)) conts++; acm=prob [ri] +conts; prob [ri] =acm; conts=0; ri++; a=b; b++;
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
48
} a=lim_infs; b=lim_infs+1; ri=0; } return (contb); Donde:
• tamanio1 = Se pasa del modulo Red_prob_enlaces y es el limite inferior de los tres posibles intervalos de tamaño de Enlaces.
• tamanio2 = Se pasa del modulo Red_prob_enlaces y es el limite superior de los tres posibles intervalos de tamaño de Enlaces.
• contb es el contador que nos va a servir para poder calcular las N’es para el calculo de Probabilidades.
• conts es el contador que nos va ayudar a ver cuantos y de que tamaño de sitios están rodeando a un enlace de tamaño fijo.
Se pudo observar que la explicación es la misma que la de Probabilidad de Enlaces, solo que este es mas rebuscado ya que hay mas posibilidades de encontrar enlaces de distintos tamaños dados, y se debe de contar todas estas posibilidades, y además hay notar una cosa la cual es que pueden ser contados sitios dos veces, por ejemplo si se localiza un enlace izquierdo Rb1 de un tamaño dado, se cuenta tanto su sitio izquierdo Rs1 y su sitio derecho Rs2, pero se sabemos que un enlace derecho Rb2 va a tener un sitio izquierdo Rs3 que puede ser el sitio derecho Rs2 del primer enlace Rb1 por lo que se estaría contando dos veces este mismo sitio, para que se entienda mejor esto la siguiente figura muestra este caso:
Figura 4.6 Muestra un ejemplo de Probabilidad de Enlaces
Enlace Izquierdo Rb1 de tamaño dado
Sitio Derecho Rs2 Sitio Izquierdo Rs1 Y Sitio Derecho Rs3
Enlace Derecho Rb2 de tamaño dado
Sitio Izquierdo Rs4
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
49
4.4 Graficas Descriptivas de Resultados Además de todos los cálculos numéricos anteriormente mencionados, se necesitaba tener una visualización grafica de los resultados de salida que arrojaba nuestro simulador, por ello se realizaron las siguientes graficas:
• Grafica de Distribución de Sitios & Enlaces: Muestra las dos Funciones Gaussinas y el translape que existe entre ellas
• Grafica de probabilidades de Sitios y Enlaces: Muestra el comportamiento que tiene las diferentes probabilidades ya sea de sitios o de enlaces comparadas con su distribución de cada una.
• Graficas de Intrusión: Muestra el comportamiento que tuvo la operación de Intrusión sobre redes sin errores geométricos, mostrando la relación que hubo entre presión vs volumen y presión vs sitios llenos
4.4.1 Planteamiento Del Problema Para poder resolver el problema de graficar las probabilidades de los Sitios y de los Enlaces utilizamos la herramienta de Linux llama “GnuPlot”, la cual nos sirve para graficar ya sean valores o graficas de manera directa, a continuación se explicaran las principales características de GnuPlot 4.4.1.1 GnuPlot Introducción: Es un programa muy flexible para generar gráficas de funciones y datos.
• Tiene una de licencia de software libre particular (no es compatible con la GPL). • Fue creado por Thomas Williams de la Pixar Corporation en 1986, aunque desde
entonces ha sufrido numerosas modificaciones. • Es el motor de “plotting” utilizado en el programa GNU Octave de computación
numérica. • Puede producir información directamente en la pantalla o en multitud de formatos
gráficos. • El programa puede ser utilizado desde la línea de comandos interactiva o en
proceso “batch”.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
50
Comandos básicos:
• Salvar la situación actual gnuplot> save “fichero.plt”
• Leer de un fichero desde gnuplot gnuplot> load “fichero.plt”
• Leer de un fichero desde fuera de gnuplot $gnuplot savefile.plt
• Salir de gnuplot gnuplot> exit gnuplot> quit
Trazado de Funciones: Existen dos comandos básicos para realizar el trazado de una función
• Trazado de funciones en 2D gnuplot> plot sin(x)
• Trazado de funciones en 3D gnuplot> splot sin(x)
Cuando se traza una función como la anterior gnuplot determina las divisiones y escalas de la gráfica de forma automática.
o Para trazar la función solo para 0 ≤ x ≤ 5 gnuplot> plot [0:5] sin (x)
o de otra forma gnuplot> set xrange [0:5] gnuplot> plot sin(x)
• Se pueden indicar rangos para las variables x,y,z
gnuplot> splot [0:5] [3:2] [1:2] sin (x) O de otra forma gnuplot> set xrange [0:5] gnuplot> set yrange [3:2]
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
51
gnuplot> set zrange [1:2] gnuplot> splot sin(x)
Ayuda en GnuPlot:
• Para obtener la ayuda general de GnuPlot gnuplot> help
• Para obtener ayuda sobre un comando concreto gnuplot> help command Ejemplo
gnuplot> help replot gnuplot> help set xrange gnuplot> help expressions functions
Definición de funciones:
• Variables gnuplot> k=3 gnuplot> print k
• Funciones
gnuplot> a=1+2*sqrt (k) gnuplot> plot (a)
• Constantes
gnuplot> plot [-2*pi:2*pi] sin(x),cos(x) Estilos de trazado:
• El estilo de trazado se cambia con “with estilo” gnuplot> plot sin(x) with impulses
• Estilos comunes
o lines: une los puntos con líneas suaves. o dots: representa puntos, difícil de ver si no hay muchos. o points: símbolos para los puntos (set point size). o impulses: representa con barras verticales de altura “y”. o steps: utiliza tramos rectos entre puntos.
Formatos de salida:
• Si no se especifica una Terminal de dibujo las gráficas se realizan en la estándar (x11)
o Es posible cambiar la Terminal utilizando el comando para elegir como salida la impresora, un fichero, la consola, etc.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
52
gnuplot> set terminal postscript gnuplot> set terminal x11 gnuplot> set terminal ...
• Indicar tipo de Terminal y salida de datos
o Salida PNG
gnuplot> set terminal png gnuplot> set output “sin.png” gnuplot> plot sin(x)
o Salida Latex gnuplot> set gnuplot> set output “sin.tex” gnuplot> replot
4.4.2 Resolución del problema Se creo un archivo de texto en el cual se puso los principales componentes para poder lograr las graficas de las distribuciones de enlace & sitio, probabilidades de sitios, probabilidades de enlaces y graficas de intrusión, estos archivos contienen las siguientes líneas: Distribución de Sitios & Enlace: plot "archivos_50/distribucion_enlaces.txt" title "Distribucion de Enlaces" with lines linetype 25 linewidth 1, "archivos_50/distribucion_sitios.txt" title "Distribucion de Sitios" with lines linetype 2 linewidth 1 set ylabel "N U M E R O D E S I T I O & E N L A C E" set xlabel " E N L A C E S I T I O" set grid xtics set grid ytics set output "archivos_50/distribucion_translape.eps" set terminal postscript eps set title "G R A F I C A D E T R A N S L A P E" replot pause 5 quit Probabilidad de Enlaces: plot "archivos_50/Red_ree__xms+sigma.txt" title "xms+sigma" with lines linetype 25 linewidth 1, "archivos_50/Red_ree__xms-sigma.txt" title "xms-sigma" with lines linetype 2 linewidth 1 ,"archivos_50/Red_ree__xms.txt" title "xms" with lines linewidth 1 , "archivos_50/Red_ree__dist_enl.txt" title "distribucion_enlaces" with lines linetype 13 linewidth 7 set ylabel "P R O B A B I L I D A D E S"
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
53
set xlabel "I N T E R V A L O S [xms-(3*sigma),xms+(3*sigma)]" set grid xtics set grid ytics set output "archivos_50/Red_ree_.eps" set terminal postscript eps set title "" replot pause 5 quit Probabilidades de Sitios: plot "archivos_50/Red_ree__xmb+sigma.txt" title "xmb+sigma" with lines linetype 25 linewidth 1, "archivos_50/Red_ree__xmb-sigma.txt" title "xmb-sigma" with lines linetype 2 linewidth 1,"archivos_50/Red_ree__xmb.txt" title "xmb" with lines linewidth 1, "archivos_50/Red_ree__dist_sitio.txt" title "distribucion_sitios" with lines linetype 13 linewidth 7 set ylabel "P R O B A B I L I D A D E S" set xlabel "I N T E R V A L O S [xms-(3*sigma),xms+(3*sigma)]" set grid xtics set grid ytics set output "archivos_50/Red_ree_.eps" set terminal postscript eps set title "" replot pause 5 quit Presión vs. Volumen: plot "archivos_50/pres_vs_vol" title "presion_vs_volumen" with lines linetype 13 linewidth 7 set ylabel "V O L U M E N I N T R U I D O" set xlabel "P R E S I O N" set grid xtics set grid ytics set output "archivos_50/pres_vs_vol_Grafica.eps" set terminal postscript eps set title "I N T R U S I O N" replot pause 5 quit Presión vs. Sitos llenos plot "archivos_50/pres_vs_sit" title "presion_vs_sitio" with lines linetype 13 linewidth 7 set ylabel "S I T I O S L L E N O S" set xlabel "P R E S I O N" set grid xtics set grid ytics set output "archivos_50/pres_vs_sit_Grafica.eps" set terminal postscript eps set title "I N T R U S I O N" replot pause 5 quit
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
54
Cada uno de estos contiene las instrucciones que se explicaron anteriormente. Después de crear estos cuatro archivos nosotros creamos cuatro módulos llamados:
1. Red_grafica_distribuciones_e_s 2. Red_grafica_prob_sitios 3. Red_grafica_prob_enlaces 4. Red_grafica_p_vs_v 5. Red_grafica_p_vs_s
Estos módulos crean de forma automática los archivos de texto anteriormente descritos y hace una llamada al sistema para poder graficar cada una de las graficas anteriormente citadas Algunas de las Graficas que se pueden obtener son las siguientes: Figura 4.7 Se puede observar que existen cuatro graficas sobrepuestas ya que se trata de los
tres tamaños de probabilidades, de la distribución de sitios o enlaces.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
55
5. Interfaz de Generación de Red e Intrusión Se debe de crear un archivo con extensión .c el cual deberá incluir la siguiente librería: #include “pores.h” En donde “pores.h” es donde se encuentra todos los prototipos para poder generar y manipular una red de materiales porosos.
5.1 Operaciones de la librería
5.1.1 Calcular el Traslape de las Funciones
void Red_Traslape (float xms, float xmb , float sigma , float *Translape, float *Ri)
• Esta es una operación que calcula el Área del Traslapé de dos funciones gaussianas utilizadas (Distribución de Sitios, Distribución de enlaces) por el Método del Trapecio y obtiene el punto de intersección de estas.
Figura 5.1 Grafica que muestra el translape de las dos funciones gaussianas.
Traslape
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
56
Parámetros de entrada:
float xms Variable de tipo Real que es la Media de Sitios. float xmb_f Variable de tipo Real que es la Media de Enlaces
final. float sigma Variable de tipo Real que es la Desviación Estándar. float Traslape Variable de tipo Real pasada por referencia que es el
Traslapé de Funciones float Ri Variable de tipo Real pasada por referencia que es el
Punto de intersección que debe ser de
Parámetros de Salida:
float *Traslape Traslape obtenido de las dos funciones gaussianas float *Ri Punto de intersección
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener el resultado del Traslape y Punto de Intersección.
Compilación y Ejecución
bash-3.00$ make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4
================================================
Punto de Intersección = 85.000000
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
57
================================================ ================================================ Translape = 0.222481 ================================================
5.1.2 Generación de Red sin errores del Tipo 1
RED Red_sin_violaciones_t1 (int L, float xms, float sigma, float alturaB, float alturaS, long int randi)
• Esta es una operación que genera una red sin ningún tipo de error elemental, esto es, que ningún enlace grande este con un sitio pequeño. La operación regresa un arreglo de tipo red.
Parámetros de entrada:
RED_I red Variable de tipo RED_I int L Variable de tipo Entero que es la Longitud de la red. float xms Variable de tipo Real que es la Media de Sitios. float xmb_i Variable de tipo Real que es la Media de Enlaces
Inicial. float xmb_f Variable de tipo Real que es la Media de Enlaces
Final. float sigma Variable de tipo Real que el la Desviación Estándar. float alturaB Variable de tipo Real que es la Altura de Enlaces. float alturaS Variable de tipo Real que es la Altura de Sitios. long int randi[55] Arreglo de tipo Entero Largo para generar los
números aleatorios.
Esta función regresa una RED sin errores de tipo 1
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la red sin errores del tipo 1.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
58
Compilación y Ejecución bash-3.00$ make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 4651 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 1107881 MCS para corrección de errores del Tipo 1: 307.74
5.1.3 Generación Red sin errores del Geométricos aplicando relajación Enlace -Enlace
RED_I Red_crea_c_RG_EnlEnl (RED_I red_sin_error_t1, float xmb_i, float xmb_f, int L , long int randi[55] , char ruta_e [50], long int PasosMonteCarlo[500])
• Esta es una operación que genera una red sin ningún tipo de errores
geométricos utilizando la relajación Enlace – Enlace. La operación regresa una Red.
Parámetros de entrada:
RED_I red_sin_error_t1
Variable de tipo RED_I en donde se corrigieron los errores de tipo 1.
int L Variable de tipo Entero que es la Longitud de la red. float xmb_i Variable de tipo Real que es la Media de Enlaces
Inicial. float xmb_f Variable de tipo Real que es la Media de Enlaces
Final. long int randi[55] Arreglo de tipo Entero Largo para generar los
números aleatorios. char ruta_e[20] Arreglo de Caracteres el cual contiene la Ruta para
guardar errores geometricos presentes en la relajación.
int long PasosMonteCarlo[n]
Arreglo de Enteros Largos donde se encuentra el Numero de Batidos que se le aplican a la red después de la corrección de errores geométricos.
La función regresa una RED donde se corrigieron los Errores Geométricos con la Relajación Enlace - Enlace
Ejemplo:
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
59
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la red sin errores geométricos aplicando el Método de Relajación Enlace - Enlace.
Compilación y Ejecución bash-3.00$ make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 33 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 8474 MCS para correcion de errores del Tipo 1: 21.18
Al inicio hay 825 violaciones geomètricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E
XMB 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
50.0 0 0 0 1 5 6 9 18 14 22 19 20 19 30 26 30 33 36 52 67 59 72 89 99 110 123 126 110 131 151 180
. . .
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
60
57.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 6 30 54 104 144 182 215 273 262 314 400 405
Se corrigieron 405 de los 405 errores geométricos, actualmente hay 0 errores MCS para correcciones geométricas: 9410.59 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 97.0000 segundos
5.1.4 Generación Red sin errores del Geométricos aplicando relajación Sitio Enlace
RED_I Red_crea_c_RG_SitEnl (RED_I red_sin_error_t1, float xmb_i, float xmb_f, int L, long int randi [55], char ruta_e [50], long int PasosDeMonteCarlo [500])
• Esta operación que genera una red sin ningún tipo de errores geométricos utilizando la relajación Sitio – Enlace. La operación regresa una red.
Parámetros de entrada:
RED_I red_sin_error_t1
Variable de tipo RED_I en donde se corrigieron los errores de tipo 1.
int L Variable de tipo Entero que es la Longitud de la red. float xmb_i Variable de tipo Real que es la Media de Enlaces
Inicial. float xmb_f Variable de tipo Real que es la Media de Enlaces
Final. long int randi[55] Arreglo de tipo Entero Largo para generar los
números aleatorios. char ruta_e[20] Arreglo de Caracteres el cual contiene la Ruta para
guardar errores geometricos presentes en la relajación.
int long PasosMonteCarlo[n]
Arreglo de Enteros Largos donde se encuentra el Numero de Batidos que se le aplican a la red después de la corrección de errores geométricos.
La función regresa una RED donde se corrigieron los Errores Geométricos con la Relajación Sitio - Enlace
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
61
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la red sin errores geométricos aplicando el Método de Relajación Sitio - Enlace.
Compilación y Ejecución
bash-3.00$ make
gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 43 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 5893 MCS para corrección de errores del Tipo 1: 14.73
Al inicio hay 1066 violaciones geométricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N S I T I O - E N L A C E
XMB 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
50.0 18 10 7 8 7 11 16 25 22 22 22 26 24 30 30 35 31 35 37 42 38 54 64 62 92 87 111 119 107 115 173
.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
62
. .
57.0 1 0 0 0 0 0 1 0 1 0 0 0 2 3 4 5 5 6 5 10 13 11 15 15 19 38 57 84 130 181 401
Se corrigieron 401 de los 401 errores geométricos, actualmente hay 0 errores MCS para correcciones geométricas: 14364.28 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 143.0000 segundos
5.1.5 Generación Red sin errores del Geométricos aplicando relajación sobre la formula
RED_I Red_crea_c_RG_varA (RED_I red_sin_error_t1, float xmb_i, float xmb_f, int L, long int randi [55], char ruta_e [50], long int pasosDeMonteCarlo [500])
• Esta operación que genera una red sin ningún tipo de errores geométricos
utilizando la relajación sobre la Formula. La operación regresa una red. Parámetros de entrada:
RED_I red_sin_error_t1
Variable de tipo RED_I en donde se corrigieron los errores de tipo 1.
int L Variable de tipo Entero que es la Longitud de la red. float xmb_i Variable de tipo Real que es la Media de Enlaces
Inicial. float xmb_f Variable de tipo Real que es la Media de Enlaces
Final. long int randi[55] Arreglo de tipo Entero Largo para generar los
números aleatorios. char ruta_e[20] Arreglo de Caracteres el cual contiene la Ruta para
guardar errores geometricos presentes en la relajación.
int long PasosMonteCarlo[n]
Arreglo de Enteros Largos donde se encuentra el Numero de Batidos que se le aplican a la red después de la corrección de errores geométricos.
La función regresa una RED donde se corrigieron los Errores Geométricos con la Relajación sobre la formula.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
63
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la red sin errores geométricos aplicando el Método de Relajación sobre la Formula.
Compilación y Ejecución bash-3.00$ make gcc -c oper_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 55 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 6815 MCS para corrección de errores del Tipo 1: 17.04
Al inicio hay 1072 violaciones geométricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N S O B R E L A F O R M U L A
XMB 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
50.0 0 0 0 0 0 0 23 81 199 270 351 . . .
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
64
57.0 0 0 0 0 0 0 0 0 4 43 690
Se corrigieron 690 de los 690 errores geométricos, actualmente hay 0 errores MCS para correcciones geométricas: 7819.09 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 84.0000 segundo
5.1.6 Guardar alguna red
void Red_guarda (RED_I red_nombre_dela_relajacion, int L, float xms, flota xmb_f, float sigma, char ruta_red [20], char ruta_foto [20], ruta_param [20], char ruta_identificador [5])
• En esta operación guarda todas la redes que se generan (Aleatoria, Sin
Errores tipo 1, Sin Errores Geométricos con relajación Enlace – Enlace, Sin Errores Geométricos con relajación Sitio – Enlace, Sin Errores Geométricos con relajación Sobre la Formula).
Parámetros de entrada:
RED_I red_nombre_de_la_red Variable de tipo RED_I la cual contiene Cualquier tipo de RED generada
int L Variable de tipo Entero que es la Longitud de la red.
float xmb_f Variable de tipo Real que es la Media de Enlaces Final.
float sigma Variable de tipo Real que el la Desviación Estándar.
char ruta_red[20] Arreglo de Caracteres el cual contiene la Ruta para guardar la red.
char ruta_foto[20] Arreglo de Caracteres el cual contiene la Ruta para guardar graficar la red en le programa RASMOL.
char ruta_param[20] Arreglo de Caracteres el cual contiene la Ruta para guardar graficar la red en le programa RASMOL.
char ruta_identificador[5] Arreglo de Caracteres el cual contiene el identificador del tipo de relajación que se uso.
La Función genera tres archivos de texto con los datos necesarios de las redes construidas. Nótese que pueden ser 9 archivos como mínimo para cubrir todas las redes generadas con los distintos métodos de relajación.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
65
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder salvar la red obtenida de la relajación Enlace - Enlace.
Compilación y Ejecución
bash-3.00$ make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 48 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 6825 MCS para corrección de errores del Tipo 1: 17.06
Al inicio hay 966 violaciones geométricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E . . . Se corrigieron 439 de los 439 errores geométricos, actualmente hay 0 errores
MCS para correcciones geométricas: 13785.19 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 143.0000 segundos Archivo de red guardado: archivos_ejemplos/Red_ree.bin
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
66
5.1.7 Generación de Grafica de Distribución de Sitios Enlaces
void Red_grafica_distribuciones_e_s (RED_I red_sin_error_t1, float xms, float xmb_i, float sigma, int L, char ruta_d[100])
• Esta es una operación se genera la grafica de Distribución de Sitio y Enlaces.
Parámetros de entrada:
RED_I red_sin_error_t1
Variable de tipo RED_I en donde se corrigieron los errores de tipo 1.
int L Variable de tipo Entero que es la Longitud de la red. float xms Variable de tipo Real que es la Media de Sitios float xmb_i Variable de tipo Real que es la Media de Enlaces
Inicial. float sigma Variable de tipo Real que el la Desviación Estándar. char ruta_d[20] Arreglo de Caracteres el cual contiene la Ruta para
guardar la grafica de distribución de Sitios y Enlaces La función genera un archivo de texto el cual contiene las instrucciones para poder graficar la distribución desde gnuplot, además de generar la grafica en el lugar indicado por el usuario.
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la Grafica de Distribución de Sitios y Enlaces.
Compilación y Ejecución bash-3.00$ make gcc -c apli_gen_redv4.c
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
67
gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 4459 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 737356 MCS para correcion de errores del Tipo 1: 204.82 Archivo de red guardado: archivos_ejemplos/distribucion_sitios.txt Archivo de red guardado: archivos_ejemplos/distribucion_enlaces.txt Generando la Grafica de Distribución de Sitios y Enlaces
5.1.9 Generación de Probabilidades de Enlaces
void Red_prob_enlaces (RED_I red_Enl_Enl, int L, float xms, float xmb_f, float sigma, Res_prob &R_xmb, char ruta_probenlace[20], char ruta_enlaces[20])
• En esta operación se generan las probabilidades la cual ve que tipos de
enlaces rodean a un sitio de tamaño dado (Media de Sitios, Media de Sitios + sigma, Media de Sitios – sigma)
Parámetros de entrada:
RED_I red_nombre_de_relajacion
Variable de tipo RED_I la cual contiene Cualquier tipo de RED generada por los tres Métodos de Relajación.
int L Variable de Tipo Entero que es la Longitud de la red.
float xms Variable de Tipo Real que es la Media de Sitios. float xmb_f Variable de Tipo Real que es la Media de Enlaces
Final. float sigma Variable de Tipo Real que es la Desviación
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
68
Estándar. Res_prob R_xmb Registro de tipo Res_prob donde van estar
presentes los 4 arreglos para guardar las probabilidades de enlaces.
char ruta_probenlaces[20] Arreglo de Caracteres el cual contiene la Ruta para guardar las probabilidades de enlaces.
char ruta_enlaces[20] Arreglo de Caracteres el cual contiene la Ruta para guardar la distribución original de enlaces.
Parámetros de Salida:
Res_prob *R_xmb Un registro con cuatro arreglos de tipo Real, tres de ellos con los datos de la probabilidades para cada uno de los valores buscados (xms, xms + σ, xms – σ), el ultimo contiene la información de la distribución de los enlaces.
La Función genera cuatro archivos de texto, tres de ellos con los datos de la probabilidades para cada uno de los valores buscados (xms, xms + σ, xms – σ), el ultimo contiene la información de la distribución de los enlaces que nos va a ser útil para que posteriormente se grafiquen en GNU- PLOT
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder calcular las probabilidades de enlaces con la red que se obtuvo de la relajación Enlace - Enlace.
Compilación y Ejecución bash-3.00$ make gcc -c apli_gen_redv4.c
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
69
gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 52 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 7487 MCS para corrección de errores del Tipo 1: 18.72
Al inicio hay 970 violaciones geométricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E …
Se corrigieron 440 de los 440 errores geométricos, actualmente hay 0 errores MCS para correcciones geométricas: 13815.62 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 136.0000 segundos
Archivo de red guardado: archivos_ejemplos/Red_reexms.txt Archivo de red guardado: archivos_ejemplos/Red_reexms+sigma.txt Archivo de red guardado: archivos_ejemplos/Red_reexms-sigma.txt Archivo de red guardado: archivos_ejemplos/Red_reedist_enl.txt
5.1.10 Generación de Probabilidades de Sitios
void Red_prob_sitios (RED_I red_Enl_Enl, int L, float xms, float xmb_f, float sigma, Res_prob &R_xms, char ruta_probsitios [20], char ruta_sitios [20])
• En esta operación se generan las probabilidades de que tipos de sitios
rodean a un enlace de tamaño dado (Media de Enlaces, Media de Enlaces + sigma, Media de Enlaces – sigma)
Parámetros de entrada:
RED_I red_nombre_de_relajacion
Variable de tipo RED_I la cual contiene Cualquier tipo de RED generada por los tres Métodos de Relajación.
int L Variable de Tipo Entero que es la Longitud de la red.
float xms Variable de Tipo Real que es la Media de Sitios. float xmb_f Variable de Tipo Real que es la Media de Enlaces
Final. float sigma Variable de Tipo Real que es la Desviación
Estándar.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
70
Res_prob R_xmb Registro de tipo Res_prob donde van estar presentes los 4 arreglos para guardar las probabilidades de sitios.
char ruta_probenlaces[20] Arreglo de Caracteres el cual contiene la Ruta para guardar las probabilidades de sitios.
char ruta_enlaces[20] Arreglo de Caracteres el cual contiene la Ruta para guardar la distribución original de sitios.
Parámetros de Salida:
Res_prob *R_xms Un registro con cuatro arreglos de tipo Real, tres de ellos con los datos de la probabilidades para cada uno de los valores buscados (xmb, xmb + σ, xmb – σ), el ultimo contiene la información de la distribución de los sitios que nos va a ser útil para que posteriormente se grafiquen en GNU- PLOT.
La Función genera cuatro archivos de texto, tres de ellos con los datos de la probabilidades para cada uno de los valores buscados (xmb, xmb + σ, xmb – σ), el ultimo contiene la información de la distribución de los enlaces que nos va a ser útil para que posteriormente se grafiquen en GNU- PLOT
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder calcular las probabilidades de sitios con la red que se obtuvo de la relajación Enlace - Enlace.
Compilación y Ejecución bash-3.00$ make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
71
./apli_gen_redv4 Al inicio hay 46 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 8571 MCS para corrección de errores del Tipo 1: 21.43 Al inicio hay 962 violaciones geométricas C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E … Se corrigieron 411 de los 411 errores geométricos, actualmente hay 0 errores MCS para correcciones geométricas: 14188.44 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 155.0000 segundos Archivo de red guardado: archivos_ejemplos/Red_reexmb.txt Archivo de red guardado: archivos_ejemplos/Red_reexmb+sigma.txt Archivo de red guardado: archivos_ejemplos/Red_reexmb-sigma.txt Archivo de red guardado: archivos_ejemplos/Red_reedist_sitio.txt
5.1.11 Graficar las Probabilidades de Enlaces
void Red_grafica_prob_enlaces (cadena nombre_s)
• En esta operación se grafican las probabilidades de enlaces con los cuatro
archivos de texto que se generaron en el modulo de Red_prob_enlaces. Parámetros de entrada:
cedana ruta_graficas_prob Arreglo de Caracteres de tipo Cadena el cual contiene la Ruta para guardar las graficas de probabilidades de enlaces.
Esta función genera una grafica donde se puede observar las tres probabilidades y la distribución de enlaces.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
72
Ejemplo:
En este ejemplo solo se muestra los dos llamados a las funciones para poder generar la grafica.
Compilación y Ejecución
bash-3.00$ make
gcc -c apli_gen_redv4.c gcc -c oper_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 60 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 5215 MCS para corrección de errores del Tipo 1: 13.04 Al inicio hay 1133 violaciones geométricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E …
Se corrigieron 491 de los 491 errores geométricos, actualmente hay 0 errores MCS para correcciones geométricas: 20021.55 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 201.0000 segundos
Archivo de red guardado: archivos_ejemplos/Red_ree_xms.txt Archivo de red guardado: archivos_ejemplos/Red_ree_xms+sigma.txt Archivo de red guardado: archivos_ejemplos/Red_ree_xms-sigma.txt
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
73
Archivo de red guardado: archivos_ejemplos/Red_ree_dist_enl.txt
Generando grafica de Probabilidad de Enlaces
5.1.12 Graficar las Probabilidades de Sitios
void Red_grafica_prob_sitios ()
• En esta operación se grafican las probabilidades de sitio con los cuatro
archivos de texto que se generaron en el modulo de Red_prob_sitios. Parámetros de entrada:
cadena ruta_graficas_prob Arreglo de Caracteres de tipo Cadena el cual contiene la Ruta para guardar las graficas de probabilidades de sitios.
Esta función genera una grafica donde se puede observar las tres probabilidades y la distribución de sitios.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
74
Ejemplo:
En este ejemplo solo se muestra los dos llamados a las funciones para poder generar la grafica.
Compilación y Ejecución
bash-3.00$ make gcc -c apli_gen_redv4.c gcc -c oper_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall bash-3.00$ make ejecutar ./apli_gen_redv4 Al inicio hay 50 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 10444 MCS para correcion de errores del Tipo 1: 26.11 Al inicio hay 1063 violaciones geomètricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E …
Se corrigieron 485 de los 485 errores geométricos, actualmente hay 0 errores MCS para correcciones geométricas: 17536.01 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 171.0000 segundos Archivo de red guardado: archivos_ejemplos/Red_ree_xmb.txt Archivo de red guardado: archivos_ejemplos/Red_ree_xmb+sigma.txt
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
75
Archivo de red guardado: archivos_ejemplos/Red_ree_xmb-sigma.txt Archivo de red guardado: archivos_ejemplos/Red_ree_dist_sitio.txt Generando grafica de Probabilidad de Sitios
5.1.12 Intrusión de Red si errores geométricos listaPV intrusión (RED_I red, float radio_ini, float radio_fin, int L, cadena pres_vol, cadena pres_sit)
• En esta operación se intruye una red sin errores geométricos obtenida por alguno de los métodos de relajación de Red dentro de la ejecución del programa.
Parámetros de entrada:
RED_I red_nombre_de_relajacion
Variable de tipo RED_I obtenida por los tres métodos de relajación.
int L Variable de tipo Entero que es la Longitud de la red.
float radio_inicial Variable de tipo Real que es el Radio inicial
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
76
para comenzar la intrusión. float radio_final Variable de tipo Real que es el Radio Final con
el cual va terminar la intrusión. cadena pres_vol Arreglo de Caracteres de tipo Cadena que sirve
para saber donde guardar los archivos que contengan la información sobre que presión se necesita para ir intruyendo un determinado volumen.
cadena pres_sit Arreglo de Caracteres de tipo Cadena que sirve para saber donde guardar los archivos que contengan la información sobre que presión se necesita para ir intruyendo un determinado numero de sitios
Parámetros de Salida:
listaPV lista_pv La función regresa una lista donde se puede ver que determinada volumen se ha intuido a una determinada presión.
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la intrusión de una red sin errores geométricos obtenida a partir de cualquier Método de Relajación Enlace - Enlace.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
77
Compilación y Ejecución
lobo@linux:~/Proyecto2/v_final> make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall lobo@linux:~/Proyecto2/v_final> make ejecutar ./apli_gen_redv4 Al inicio hay 47 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 5091 MCS para corrección de errores del Tipo 1: 12.73 Al inicio hay 999 violaciones geométricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E ….
Se corrigieron 505 de los 505 errores geométricos, actualmente hay 0 errores MCS para correcciones geométricas: 16924.56 Procesando los pasos de Monte Carlo... Tiempo de generación de la red con correcciones geométricas: 18.0000 segundos
Radio inicial: 280.000000 Volumen esperado: 4478400958.285532
Radio Volumen Intruido Volumen Por Llenar Sitios llenos Total 280.00 0.000000 4478400958.285532 0 . . . 31.00 4478400958.285531 0.000001 1000
Intrusión realizada en 0.0000 segundos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
78
5.1.13 Intrusión de Red si errores geométricos leída desde un archivo listaPV Red_fintruir(cadena archivo, int L, float radio_ini ,float radio_fin)
• En esta operación se instruye una red sin errores geométricos leída desde
un archivo de texto que se hay generado cuando salvamos alguna red sin errores geométricos con cualquiera de los tres métodos de relajación
Parámetros de entrada:
cadena archivo Ruta de tipo Cadena para poder guardar encontrar la red que se haya generado.
int L Variable de tipo Entero que es la Longitud de la red.
float radio_inicial Variable de tipo Real que es el Radio inicial para comenzar la intrusión.
float radio_final Variable de tipo Real que es el Radio Final con el cual va terminar la intrusión.
Parámetros de Salida:
listaPV lista_pv La función regresa una lista donde se puede ver que determinada volumen se ha intuido a una determinada presión.
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la intrusión de una red sin errores geométricos obtenida por algún archivo guardado por el usuario con la operación de salvar redes.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
79
Compilación y Ejecución
lobo@linux:~/Proyecto2/v_final> make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall lobo@linux:~/Proyecto2/v_final> make ejecutar ./apli_gen_redv4 Al inicio hay 42 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 5547 MCS para correcion de errores del Tipo 1: 13.87 Al inicio hay 1016 violaciones geomètricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E ….
Se corrigieron 474 de los 474 errores geometricos, actualmente hay 0 errores MCS para correcciones geometricas: 13988.52 Procesando los pasos de Monte Carlo... Tiempo de generacion de la red con correcciones geomètricas: 15.0000 segundos Archivo : archivos_ejemplos/Red_ree.bin SI se puede leer el archivo archivos_ejemplos/Red_ree.bin, L=10 Radio inicial: 280.000000 Volumen esperado: 4486570539.766445
Radio Volumen Intruido Volumen Por Llenar Sitios llenos Total 280.00 0.000000 4486570539.766445 0 . . . 31.00 4486570539.766452 -0.000007 1000
Intrusión realizada en 0.0000 segundos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
80
5.1.14 Generación de Graficas de Presión vs. Volumen
void Red_grafica_p_vs_v(cadena nombre_c_p_vs_v)
• En esta operación se grafican el comportamiento que se tiene al ir intruyendo mercurio sobre una red porosa que nos dice que presión se necesita para ir intruyendo un determinado volumen.
Parámetros de entrada:
cadena nombre_c_p_vs_v Arreglo de Caracteres de tipo cadena el cual contiene la Ruta para guardar las graficas de presión contra volumen.
Esta función genera una Grafica para ver el comportamiento que se tiene al ir intruyendo mercurio sobre una red porosa que nos dice que presión se necesita para ir intruyendo un determinado volumen.
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la Grafica de Presión contra Volumen de la intrusión de una red sin errores geométricos obtenida a partir de cualquier Método de Relajación Enlace – Enlace
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
81
Compilación y Ejecución lobo@linux:~/Proyecto2/v_final> make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall lobo@linux:~/Proyecto2/v_final> make ejecutar ./apli_gen_redv4 Al inicio hay 51 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 7088 MCS para correcion de errores del Tipo 1: 17.72 Al inicio hay 1141 violaciones geomètricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E …
Se corrigieron 296 de los 296 errores geometricos, actualmente hay 0 errores MCS para correcciones geometricas: 14406.74 Procesando los pasos de Monte Carlo... Tiempo de generacion de la red con correcciones geomètricas: 18.0000 segundos
Radio inicial: 280.000000 Volumen esperado: 4405913764.962739
Radio Volumen Intruido Volumen Por Llenar Sitios llenos Total 280.00 0.000000 4405913764.962739 0 . . . 32.00 4405913764.962744 -0.000005 1000
Intrusión realizada en 0.0000 segundos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
82
5.1.14 Generación de Graficas de Presión vs. Sitios
void Red_grafica_p_vs_s(cadena nombre_c_p_vs_s)
• En esta operación se grafican el comportamiento que se tiene al ir intruyendo mercurio sobre una red porosa que nos dice que presión se necesita para ir intruyendo un determinado numero de Sitios.
Parámetros de entrada:
cadena nombre_c_p_vs_s Arreglo de Caracteres de tipo cadena el cual contiene la Ruta para guardar las graficas de Presión contra Sitios.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
83
Esta función genera una grafica para ver el comportamiento que se tiene al ir intruyendo mercurio sobre una red porosa que nos dice que presión se necesita para ir intruyendo un determinado número de Sitios.
Ejemplo:
En este ejemplo se presenta una forma de declara las variables que son locales, y se les da un valor de inicialización para poder obtener la Grafica de Presión contra Sitios de la intrusión de una red sin errores geométricos obtenida a partir de cualquier Método de Relajación Enlace – Enlace
Compilación y Ejecución lobo@linux:~/Proyecto2/v_final> make gcc -c apli_gen_redv4.c gcc -lm -o apli_gen_redv4 apli_gen_redv4.o oper_redv4.o intrusion_recursiva_vSitios31.o listas31.o -Wall lobo@linux:~/Proyecto2/v_final> make ejecutar ./apli_gen_redv4 Al inicio hay 44 violaciones Generando la red inicial sin violaciones... Red inicial sin violaciones generada Numero de batidos: 5417 MCS para correcion de errores del Tipo 1: 13.54
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
84
Al inicio hay 1005 violaciones geomètricas
C O R R E C C I O N D E E R R O R E S G E O M E T R I C O S R E L A J A C I O N E N L A C E - E N L A C E …
Se corrigieron 456 de los 456 errores geometricos, actualmente hay 0 errores MCS para correcciones geometricas: 12834.92 Procesando los pasos de Monte Carlo... Tiempo de generacion de la red con correcciones geomètricas: 14.0000 segundos Radio inicial: 280.000000 Volumen esperado: 4483371593.437043
Radio Volumen Intruido Volumen Por Llenar Sitios llenos Total 280.00 0.000000 4483371593.437043 0
. . .
29.00 4483371593.437047 -0.000004 1000 Intrusión realizada en 0.0000 segundos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
85
6. Resultados Los siguientes resultados muestran algunas corridas que realizamos con nuestro simulador, en donde se pueden observar los monitoreos de tiempos de ejecución para poder producir alguna red con cualquiera de los tres métodos de relajación anteriormente explicados, estos resultados además de mostrar estos tiempos de ejecución, dan también los paso de MonteCarlo que se necesitaron para lleva r a cabo dicho objetivo, así como los datos iniciales que se aplicaron en la generación de red e intrusión, que por cierto también se le aplica a una red que se genero, que por lo regular fue la de Relajación Enlace – Enlace. Definiremos ahora que significa cada una de las siglas utilizadas para que se tenga una mejor comprensión de lo que se esta repostando:
• xmb inicia: Se trata de la Media de Enlaces que es con la que se va a generar la primera red sin restricciones geométricas, pieza fundamental para poder proceder con los tres métodos de relajación.
• xmb final: Se trata de la Media de Enlaces a la que queremos llegar por ello lleva el pseudónimo final.
• xms: Se trata de la Media de Sitios con la que se va a generar la Red. • Desviación Estándar: Su nombre lo dice es la tolerancia que se va a utilizar para
hacer crecer un poco mas las distintas medias ya sea la de sitios o la de enlaces, para todo los casos se esta utilizando +/- 3 * Desviación Estándar
• Longitud de la Red: Obviamente es el Tamaño de la Red a generar el cual como es una red cúbica su tamaño será L*L*L
• Traslape: Se refiere a que tanto se encuentran encimadas las graficas presentes. • Sitio – Enlace: Se refiere a la relajación de tipo Sitio - Enlace que corrige errores
geométricos. • Enlace – Enlace: Se refiere a la relajación de tipo Enlace - Enlace que corrige
errores geométricos. • Sobre Formula: Se refiere a la relajación que se realiza sobre la formula que
corrige errores geométricos. • Tiempo (hr: mm: ss): Esto es el tiempo de ejecución de los tres tipos de relajación
dado por horas, minutos y segundos respectivamente. • MCS: Paso de Monte Carlo necesarios para corregir los errores geométricos. • Tiempo de intrusión: Tiempo necesario para poder realizar la Intrusión de alguna
Red generada por alguno de los tres métodos de relajación o leída desde un archivo.
Estas definiciones se estarán presentando en cada unos de los resultados que se presenten a continuación así como sus graficas que haya arrojado la ejecución de estos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
86
6.1 Primer Resultado: xmb inicial = 45.0 xmb final = 50.0 xms = 90.0 Desviación estándar = 15.0 Longitud de la red = 10 Traslape = 0.127096 Tipo de relajación
Tiempo (hr:mm:ss)
MCS
Sitio-Enlace 00:02:58 17573.47 Enlace-Enlace 00:03:08 18859.10 Sobre Formula 00:01:13 5885.26
Grafica de Distribución de Sitios & Enlaces
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
87
Grafica de Probabilidad de Enlaces
Grafica de Probabilidad de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
88
Tiempo de Intrusión (seg.)
0.0000
Grafica de Intrusión Presión - Volumen
Grafica de Intrusión Presión - Sitio
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
89
6.2 Segundo Resultado: xmb inicial = 50.0 xmb final = 57.0 xms = 100.0 Desviación estándar = 15.0 Longitud de la red = 20 Traslape = 0.105422 Tipo de relajación
Tiempo (hr:mm:ss)
MCS
Sitio-Enlace 00:18:37 55602.17 Enlace-Enlace 00:26:17 71986.95 Sobre Formula 00:05:32 15484.80
Grafica de Distribución de Sitios & Enlaces
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
90
Grafica de Probabilidad de Enlaces
Grafica de Probabilidad de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
91
Tiempo de Intrusión (seg.)
1.0000
Grafica de Intrusión Presión - Volumen
Grafica de Probabilidad de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
92
6.3 Tercer Resultado: xmb inicial = 45.0 xmb final = 52.0 xms = 100.0 Desviación estándar = 10.0 Longitud de la red = 30 Traslape = 0.084689 Tipo de relajación
Tiempo (hr:mm:ss)
MCS
Sitio-Enlace 00:11:14 4332.61 Enlace-Enlace 00:09:47 3389.31 Sobre Formula 00:05:17 1165.06
Grafica de Distribución de Sitios & Enlaces
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
93
Grafica de Probabilidad de Enlaces
Grafica de Probabilidad de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
94
Tiempo de Intrusión (seg.)
1.0000
Grafica de Intrusión Presión - Volumen
Grafica de Intrusión Presión - Sitio
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
95
6. 4 Cuarto Resultado: xmb inicial = 45.0 xmb final = 50.0 xms = 100.0 Desviación estándar = 15.0 Longitud de la red = 40 Traslape = 0.065686 Tipo de relajación
Tiempo (hr:mm:ss)
MCS
Sitio-Enlace 00:53:15 2589.23 Enlace-Enlace 01:03:27 2135.17 Sobre Formula 00:20:00 4580.89
Grafica de Distribución de Sitios & Enlaces
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
96
Grafica de Probabilidad de Enlaces
Grafica de Probabilidad de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
97
Tiempo de Intrusión
(seg.) 4.0000
Grafica de Intrusión Presión – Volumen
Grafica de Intrusión Presión - Sitio
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
98
6.5 Quinto Resultado: xmb inicial = 45.0 xmb final = 55.0 xms = 100.0 Desviación estándar = 15.0 Longitud de la red = 50 Traslape = 0.092582 Tipo de relajación
Tiempo (hr:mm:ss)
MCS
Sitio-Enlace 10:12:11 145709.15 Enlace-Enlace 11:01:60 160303.62 Sobre Formula 03:45:55 48588.88
Grafica de Distribución de Sitios & Enlaces
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
99
Grafica de Probabilidad de Enlaces
Grafica de Probabilidad de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
100
Tiempo de Intrusión (seg.)
9.0000
Grafica de Intrusión Presión - Volumen
Grafica de Intrusión Presión – Sitio
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
101
6.6 Sexto Resultado: xmb inicial = 45.0 xmb final = 50.0 xms = 100.0 Desviación estándar = 15.0 Longitud de la red = 70 Traslape = 0.065686 Tipo de relajación
Tiempo (hr:mm:ss)
MCS
Sitio-Enlace 09:23:06 65564,55 Enlace-Enlace 07:02:60 47483,32 Sobre Formula 04:15:37 14294,60
Grafica de Distribución de Sitios & Enlaces
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
102
Grafica de Probabilidad de Enlaces
Grafica de Probabilidad de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
103
Tiempo de Intrusión (seg.)
19.0000
Grafica de Intrusión Presión - Volumen
Grafica de Probabilidad de Sitios
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
104
7. Conclusiones Con los resultados anteriores podemos concluir lo siguiente sobre los métodos de relajación de redes: El método que presenta un mejor comportamiento es el que se aplica sobre la formula de calculo de errores geométricos ya que mejora el tiempo de corrección de los errores geométricos y en numero de Pasos de MonteCarlo se reduce en un buen numero como se presento en los resultados, aunque tiene un comportamiento distinto para redes de tamaño muy grande ya que el numero de errores que presenta cuando se trabaja sobre la formula en su valor real (A = 1) es muy inestable por ejemplo si para xmb_inicial = 350 el numero de errores es de 78541 cuando se incrementa xmb a 350.5 el numero de errores es de 7500 ò puede pasar de forma inversa y elevarse de forma considerable el numero de errores geométricos y con esto el tiempo de corrección de la red se incrementa de forma considerable. En cuanto al método de relajación “Sitio -Enlace” se puede considerar como el segundo mejor ya que es mas estable (los errores de la red en su tamaño original no son volátiles) y corrige los errores en un tiempo considerablemente bueno a pesar de que los resultados muestran que es aproximadamente en promedio 2.5 veces mas tardado, aunque para redes en donde las medias de enlaces y de sitios son mas grandes como por ejemplo xmb = 190 y xms = 240 su comportamiento cambia y es el método que mas tarda para generar una red sin errores geométricos. En lo que se refiere al método “Enlace-Enlace” es el que más tiempo utiliza para corregir los errores geométricos y en consecuencia de esto es también el que mas pasos de MonteCarlo emplea para el proceso y al igual que los métodos anteriores presenta variaciones en su comportamiento cuando las medias de enlaces y de sitios son más grandes ya que en estos casos se convierte en el segundo mejor método para generar una red. En base a los resultados consideramos que el mejor método es el de relajación que se aplica sobre la formula de calculo de errores geométricos (“método relajación sobre la formula”) ya que los resultados que se obtienen en redes grandes y mas comprometidas son buenas en ambos casos. En lo que se refiere al número de errores geométricos que puede tener una red antes de aplicarle cualquiera de los métodos antes mencionados podemos concluir que no esta tanto en dependencia del translape como se pensaba al inicio de esta implementación (al inicio se creía que entre mas grande fuera el translape se generarían mas errores geométricos) sino que depende mas del valor que se le den a las medias de sitios y de enlaces ya que se puede dar el caso de que sean medias grandes (xmb = 370 y xms = 465 por ejemplo) en una red de tamaño L=10 con un translape que es casi cero pero sin embargo genera un numero muy elevado de errores geométricos (casi el 80% de la red tiene errores geométricos) y en consecuencia el proceso puede tardar mas de 15 horas y por el contrario se pueden dar valores como el de primer resultado el capitulo anterior en donde existe un translape de 0.127096 y los resultados se obtienen a lo mas en 3 minutos. Esto es mas que nada por la formula de evaluación para contar el numero de errores geométricos (formula de teorema de Pitágoras en donde se considera a los catetos como los radios de los enlaces y a la hipotenusa como el radio de los sitios) que al sumar medias de enlaces al cuadrado de un tamaño pequeño con una media de sitios proporcional a ellos van a existir pocos errores que si se realiza con valores de enlaces grandes (mayores a 200).
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
105
8. Trabajos a futuro Una de las cosas que se pueden hacer son la finalidad de obtener redes con media de enlaces y media de sitios y con valores grandes además con un translape mas comprometido es hacer combinaciones de los métodos de relajación, por ejemplo primero utilizar el método que se aplica sobre la formula de calculo de errores geométricos y corregir los errores cuando las medias no sean tan comprometidas, después relajar la red con el procedimiento “batidotEq” con la finalidad de que la red no quede muy tensa para después aplicar el cualquiera de los otros dos métodos de relajación y repetir este procedimiento hasta que se obtenga una mejor red, esto mismo se puede experimentar con el método. Además algo que ayudaría a reducir los tiempos de forma muy considerable es paralelizar el proceso de la corrección de errores geométricos ya que para redes de tamaño grande (L>100) el tiempo es demasiado alto ya que es de días. Consideramos que primero se puede partir la red en 8 partes para que después a cada una de ellas de forma independiente se corrijan los errores que puedan tener y una vez hecho esto unirlas nuevamente tomando en cuenta que las caras que son adyacentes unas con otras al momento de unirlas no generen errores. De esta forma seria posible reducir los tiempos de generación de redes con las restricciones geométricas. Otro de los aspectos que se tienen que considerar es el de paralelizar la intrusión de mercurio ya que al utilizar algoritmos recursivos para realizar las operaciones llega un punto en el que la memoria se vuelve un recurso insuficiente para redes le longitud mayor a 90. Por ultimo se puede incluir en la librería las funciones que realizan la simulación de la retracción de mercurio.
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
106
9. Anexos
Benjamín Moreno Montiel. Proyectos ll, Licenciatura en Computación, UAM-I Israel Guerrero Pérez
130
10. Referencias:
1. Estudio de Fenómenos Capilares en Medios Porosos: Sorción de Nitrógeno y Porosimetría de Mercurio. Acuerdos y Discordancias”. Mendoza Carlos Felipe. Tésis doctoral. 2005
2. http://computacion.cs.cinvestav.mx/~acaceres/courses/gnuplotCurso/gnuplotCurso.pdf
3. “Estudio y paralelizacion de intrusión y retracción de mercurio en un medio poroso”. Silva Cabrera Víctor, Rosiles Bernal Juan Guadalupe, Rodríguez Quintanar Juan José. Proyecto Terminal II. 2006
Recommended