Documente Academic
Documente Profesional
Documente Cultură
6.1.- Introduccin Existen muchos problemas en los que llegado a cierto punto, se ha de tomar una decisin ptima. A menudo, la bsqueda de esta decisin toma un tiempo excesivo A veces es mejor no tomar esta decisin ptima, sino tomar una buena decisin En algunas ocasiones tomar decisiones aleatorias nos puede llevar a la solucin deseada En trminos de la Teora de Algoritmos: cuando se tenga que realizar una eleccin en un algoritmo, a veces es preferible hacerlo aleatoriamente en vez de perder tiempo en decidir cul de las posibles alternativas es la correcta Esta eleccin aleatoria debe se, en promedio, ms eficiente que la decisin, aunque en algn caso el proceso aleatorio tome, por mala suerte, ms tiempo En estos casos hablamos de tiempo esperado de ejecucin y no de orden de complejidad En este tema se vern algoritmos que, basados en la Teora de la Probabilidad, encuentran una solucin aproximada o una solucin exacta (aunque a veces no la encuentran o dan una solucin errnea) Clasificacin de los algoritmos probabilistas: Numricos: solucin aproximada Monte Carlo: solucin exacta; pero a veces se equivocan Las Vegas: Sherwood: nunca devuelven una solucin errnea, pero a veces no la encuentran siempre encuentran la solucin y siempre es correcta
Cada uno de ellos se debe aplicar bajo ciertas condiciones especficas y todos buscan soluciones de distina forma e incluso encuentran (a veces no) distinto tipo de soluciones
6.2.- Generadores de Nmeros Aleatorios No se puede definir un nmero como aleatorio por si mismo Lo que si se pueden definir son series de nmeros aleatorios: cuando, de entre un rango de valores posibles, la distribucin de los nmeros de la serie es uniforme Encontrar un mtodo que nos permita obtener series de nmeros aleatorios en un ordenador es una tarea difcil, pero no lo es obtener series de nmeros pseudoaleatorios: nmeros que a todo el mundo le parezcan aleatorios excepto al programador que sabe el mtodo Propiedades que deben cumplir las series de nmeros aleatorios: Los nmeros han de estar uniformemente distribuidos Han de ser estadsticamente independientes Han de ser reproducibles Que requieran poco espacio en memoria Que se obtengan rpidamente
Existen muchos mtodos posibles para obtener series de nmeros pseudoaleatorios. Ejemplo simple: escoger un nmero de n cifras, elevarlo al cuadrado, coger las k cifras centrales del resultado obtenido, siendo stas el siguiente nmero de la serie. Para n=k=4:
....
Este mtodo no tiene nada de aleatorio, pero lo parece. No tiene ninguna propiedad aceptable, ya que no se puede comprobar absolutamente nada, por lo que es impredecible cundo comenzarn a repetirse los nmeros (comenzar con el 2500) Una serie de nmeros es aleatoria cuando no se descubre en ella ninguna propiedad: de crecimiento, repeticin, siguiente, etc. Definicin de Lehmer de serie de nmeros pseudoaleatoria: nocin vaga que encierra la idea de una sucesin de nmeros en la que cada trmino es impredecible para la persona ajena al problema y cuyos dgitos se someten a un cierto nmero de pruebas estadsticas
Generacin de nmeros aleatorios: los mtodos ms comunes son los llamados mtodos congruenciales. El ms famoso es el de Lehmer, en el cual se utilizan tres datos segn la frmula:
X n +1 = (a * X n
Tipos:
+ c) mod m
Generador congruencial mixto: aquel en el que c 0 Generador congruencial multiplicativo: aquel en el que c = 0 o Diferencias: los multiplicativos son ms rpidos, aunque tienen una menor longitud de ciclo Propiedades del generador de esta naturaleza: fcilmente reproducible (comenzando por la misma semilla), se obtiene rpidamente y ocupa poco espacio de memoria. Hay que esforzarse en conseguir que cumpla tambin las dos primeras propiedades: uniformidad e independencia Teorema: La sucesin congruencial definida por X0, a, c y m es de perodo mximo si y slo si: C es primo relativo a m (su mximo comn divisor es 1) a-1 es mltiplo de p, p primo que divida a m a-1 es mltiplo de 4 si m es mltimplo de 4 o Ejemplo: a = 21, c = 27 y m = 20 Generador que cumple las 5 reglas: el propuesto por Lehmer: a = 48.271; c = 0; m = 231 1 = 2.147.483.647 Problema: produce overflow con algunos valores Solucin: Reducir la expresin a:
X n +1
= a( X n
mod Q) R( X n
div Q) +
f ( m)
donde Q = m div a, R = m mod a y f(m) = 0 si la suma de los dos primeros sumandos de la frmula es mayor o igual que 0 y f(m) = m en caso contrario
Const a=48271; m=2147483647; Q=44488; R=3399;
Function Random(Var Serie:Real): Real; Begin Seriea*(Serie Mod Q)-R*(Serie Div Q); If Serie<0 Then SerieSerie+m; Return(Serie); End; Generador congruencial de nmeros aleatorios
6.3.- Algoritmos Numricos Estos algortimos dan una solucin aproximada En algunos casos la solucin real calculada por un algoritmo tradicional no es exacta debido a la resolucin de la representacin de la informacin utilizada Cuando el error cometido sea menor que dicha resolucin, la solucin obtenida por el algoritmo probabilista es tan exacta como la encontrada por el algoritmo tradicional Cuando la precisin del ordenador no es significativa, se puede dar como resultado un intervalo o bien una probabilidad En los ejmplos que veremos a continuacin se refleja claramente la filosofa de los algoritmos numricos (aunque no son buenos algoritmos) 6.3.1.- Clculo del nmero
Function dardos(n: LongInt): Real; Begin k0; For i1 To n Do xRandom(0,1); yRandom(0,1); If x2+y21 Then kk+1; Return(4k/n); End; Clculo del nmero , dardos
Function Trapezoidal(f: Function;n: LongInt; a, b: Real): Real; Begin delta(b-a)/(n-1); sum(f(a)-f(b))/2; For xa+delta To b-delta Step delta Do sumsum+f(x); Return(sum*delta); End; Clculo de integrales, Algoritmo determinista (y III)
6.4.- Algoritmos MonteCarlo En contraposicin a los algortimos numricos, los algoritmos MonteCarlo siempre encuentran soluciones exactas, aunque a veces se equivocan La caracterstica ms importante de estos algoritmos es que suele ser posible reducir arbitrariamente la probabilidad de error a costa de un ligero aumento del tiempo de clculo La precisin de la respuesta va en funcin del tiempo de ejecucin, por lo que su eficiencia estar en orden inverso a su precisin El objetivo de estos algoritmos es que en sucesivas llamadas a la rutina principal, se rebaje la probabilidad de error Nunca se debe dar como vlido un algoritmo MonteCarlo que falle siempre para una misma instancia de un problema Definicines: o Algoritmo MonteCarlo p-correcto, (con < p < 1): algoritmo que devuelve una solucin correcta con una probabilidad no menor que p sea cual sea el caso considerado o Algoritmo MonteCarlo consistente: devuelve siempre la misma solucin correcta para la misma entrada Los algoritmos resultantes de aplicar la tcnica MonteCarlo son extremadamente simples y eficientes Ejemplo: o Suponer un algoritmo MonteCarlo consistente 0.7-correcto: MC(x) o Considerar otro algoritmo que llame varias veces al anterior, chequeando si alguna de las soluciones devueltas por l son iguales entre si (indicara que probablemente esa sea la solucin correcta) o Este segundo algoritmo es mejor que MC(x) puesto que al ser consistente, si hubieran dos soluciones iguales tienen que ser la correcta o La probabilidad de acierto de este segundo algortimo aumenta a un 0.84% (Amplificacin de la ventaja estocstica)
o
Function MC3(x); Begin tMC(x); uMC(x); vMC(x); If t=u Or t=v Then Return(t); Return(v); End; Algoritmo MonteCarlo consistente
6.4.1.- Test de primalidad MonteCarlo Ejemplo de algoritmo inaceptable: siempre falla para la misma instancia del problema (289 = 17 * 17) 30030 = 2 * 3 * 5* 7* 11* 13
Function Primo(n): Boolean; Begin If MCD(n,30030)=1 {algoritmo de Euclides } Then Return(True) Else Return(False); End; Test de primalidad inaceptable, Algoritmo MonteCarlo
Function Mayor2(T[1..n]): Boolean; Begin If Mayor(T) Then Return(True) Return(Mayor(T)); End; Elemento mayoritario (II)
Function MayorMC(T[1..n]): Boolean; Begin klog2(1/); For i1 To k Do If Mayor(T) Then Return(True); Return(False); End; Elemento mayoritario, Algoritmo MonteCarlo (y III)
6.5.- Algoritmos Las Vegas Estos algoritmos avanzan un paso ms: nunca devuelven una solucin errnea, pero si no encuentran una solucin correcta, no devuelven nada Al igual que en los algoritmos numricos y MonteCarlo, la probabilidad de encontrar una solucin correcta aumenta con el tiempo empleado en obtenerla Estn especialmente indicados en problemas que de implementarlos determinsticamente seran casi intratables, pero probabilsticamente son bastante eficientes: problemas NP-Completos Se arriesgan a no encontrar la solucin del problema a costa de reducir el tiempo de ejecucin El objetivo es minimizar la probabilidad de no encontrarla, tomando decisiones aleatorias con inteligencia Su esquema general se parece en parte al de los algoritmos MonteCarlo, salvo que incluyen una variable booleana para saber cuando se encuentra la solucin correcta En ocasiones, en lugar de realizar el clculo completo, podemos dejar al azar encontrar parte de la solucin, calculando el resto de forma determinista con el algoritmo tradicional
El xito de este algoritmo reside en que existen aproximadamente 100 soluciones, lo que es un nmero suficientemente significativo para encontrar soluciones Para el problema de las 12 reinas: utilizar el algoritmo Las Vegas para colocar 4 reinas y Backtracking para las 8 restantes (el nmero ptio de posiciones al azar es 5)
6.5.2.- La eleccin de un jefe Definicin: la estructura de red en anillo se utiliza en muchos sistemas informticos. En ellos, cada host se puede comunicar con sus vecinos inmediatos. Si extrapolamos lo dicho a una computadora con varios procesadores, nos encontramos con un sistema similar, pero con algunas dificultades. Problema: qu procesador ser el jefe o encargado de gestionar la mquina Solucin: utilizar un algoritmo Las Vegas, siempre y cuando el nmero de procesadores sea conocido por cada uno de ellos La clave la dan los generadores de nmeros aleatorios. Cada procesador escoge un nmero semilla para iniciar su generador A continuacin escoge un nmero entre 1 y m (m = nmero de procesadores del sistema) Los que escogen el nmero 1 se lo hacen saber a los dems haciendo circular un mensaje. Posibilidades: o Ninguno sac un 1: la red sigue tal y como estaba o Ms de uno sac un 1: slo ellos seguirn activos y reinicializan su variable m con la cantidad de procesadores que sacaron 1 o Slo uno sac 1: este se convierte en el nuevo jefe Este algoritmo nunca se equivoca, nunca elige dos jefes y la probabilidad de bloqueo es cero Problema: que todos tengan el mismo generador de nmeros aleatorios. Solucin: que las semillas sean distintas
6.6.- Algoritmos Sherwood Estos algoritmos siempre encuentran la solucin y sta siempre es correcta Filosofa: tomar una decisin aleatoria que disminuya el tiempo de ejecucin en el peor de los casos, sin que perjudique la exactitud de la solucin La decisin aleatoria es crucial y debe hacer que todas las instancias del problema se distancien del peor caso
El procedimiento particionar separa los elementos de T entre las posiciones i y j en tres partes, segn el valor del m o Los elementos T[i,..,u-1] son menores que m o Los elementos T[u,..,v] son iguales que m o Los elementos T[v+1,..,j] son mayores que m
void particionar(int t[], int i, int j, int m, int *u, int *v){ int k, ele; *u= *v= i; for(k=i; k<=j; k++) { ele = t[k]; if (ele < m) { t[k] = t[*v]; t[*v] = t[*u]; t[*u] = ele; (*u)++; (*v)++; } else if (ele == m) { t[k] = t[*v]; t[*v] = ele; (*v)++; } } (*v)--; } Particionar
6.7.- Algoritmos Genticos 6.7.1.- Introduccin Un AG es un algoritmo de optimizacin, bsqueda y aprendizaje inspirado en los procesos de Evolucin natural y Evolucin gentica Elementos: o Una poblacin de candidatos a solucin (cromosomas) que se actualiza rpidamente o Funciones de evaluacin y seleccin que sirven para decidir los mejores indiviudos, que sern los que se van a reproducir o Explotacin y exploracin mediante el cruce de individuos y la mutacin 6.7.2.- Estructura de un Algoritmo Gentico bsico(AG) Propuesta por J. Holland en 1975
Procedimiento Algoritmo_Gentico Inicio t 0 ; Inicializar P(t); Evaluar P(t); Mientras (no se cumpla la condicin de parada) hacer Inicio t t + 1; seleccionar P(t) desde P(t-1); recombinar P(t); evaluar P(t); Fin_Mientras; Fin ; Estructura de un Algoritmo Gentico
6.7.3.- Tipos de Algoritmos Genticos Modelo Generacional. Es el modelo clsico. Durante cada generacin se crea una poblacin completa de nuevos individuos mediante la seleccin de padres de la poblacin anterior y la aplicacin de los operadores genticos sobre ellos. LA nueva poblacin reemplaza directamente a la antigua Modelo Estacionario. Durante cada generacin se escogen dos padres de la poblacin (usando muestreo simple u otro tipo de muestreo) y se le aplican los operadores genticos. Los dos nuevos cromosomas (o el nico hijo) reemplaza a dos cromosomas (un cromosoma) de la poblacin (normalmente el/los peor/es)
El modelo estacionario produce una presin selectiva (convergencia rpida) cuando se reemplazan los peores Alternativas: o Escoger de forma aleatoria los individuos a reemplazar o Reemplazar los individuos ms antiguos de la poblacin
alta
6.7.4.- Componentes bsicas de un Algoritmo Gentico Codificacin Binaria: cada individuo se representa medinate una cadena de bits (0010111 . 1001) Codificacin Entera: permutaciones de elementos (E5 E9 E1E7 E0) Codificacin Real: lista de nmeros reales (0.5 0.8 0.2 0.7 1.0 0.3)