You are on page 1of 14

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 1

Tema 6: Algoritmos Probabilistas


6.1.- Introduccin 6.2.- Generadores de Nmeros Aleatorios 6.3.- Algoritmos Numricos 6.3.1.- Clculo del nmero 6.3.2.- Integracin numrica 6.3.3.- Test de primalidad 6.4.- Algoritmos MonteCarlo 6.4.1.- Test de primalidad MonteCarlo 6.4.2.- Elemento mayoritario de un array 6.4.3.- Comparacin de series de multiplicacin de matrices 6.5.- Algoritmos Las Vegas 6.5.1.- El problema de las ocho reinas 6.5.2.- La eleccin de un jefe 6.6.- Algoritmos Sherwood 6.6.1.- Bsqueda del k-simo menor elemento de un array 6.7.- Algoritmos Genticos 6.7.1.- Introduccin 6.7.2.- Estructura de un Algoritmo Gentico bsico 6.7.3.- Tipos de Algoritmos Genticos 6.7.4.- Componentes bsicas de un Algoritmo Gentico 6.7.5.- Problemas: Mochila, 8-reinas, Viajante de Comercio

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 2

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

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 3

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:

4231 x 4231 4231 12693 8462 16924 17901361

9013 x 9013 27039 9013 81117 81234169

....

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

Teora de Algoritmos Tema VI: Algoritmos Probabilistas

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;

{ 231-1 } { m Div a } { m Mod a }

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

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 5

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

6.3.2.- Integracin numrica


Function Integral_1(f: Function;n: LongInt): Real; Begin k0; For i1 To n Do xRandom(0,1); yRandom(0,1); If yf(x) Then kk+1; Return(k/n); End; Clculo de integrales, dardos (I) Function Integral_2(f: Function;n: LongInt; a, b: Real): Real; Begin sum0; For i1 To n Do xRandom(a,b); sumsum+f(x); Return((b-a)*(sum/n)); End; Clculo de integrales, Algoritmos numricos (II)

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 6

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.3.3.- Test de primalidad


Const NOESPRIMO = FALSE; PROBABLEPRIMO = TRUE; Procedure Power(A, P, N: Integer; Var Result: Integer; Var QueEs: Boolean); Var X: Integer; Begin If P=0 Then Result0 Else Power(A, P Div 2, N, X, QueEs); Result(X*X) Mod N; If (Result=1) And (X<>1) And (X<>N-1) Then QueEsNOESPRIMO; If P Mod 2 = 1 Then Result(Result*A) Mod N; End; Function TestPrimo(N: Integer): Boolean; Var A, Result: Integer; QueEs: Boolean; Begin ARandom(2,N-2); { ambos inclusive } QueEs:=PROBABLEPRIMO; Power(A, N-1, N, Result, QueEs); TestPrimo(Result=1) And (QueEs=PROBABLEPRIMO); End; Test de primalidad, Algoritmos numricos

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 7

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

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 8

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

6.4.2.- Elemento mayoritario de un array


Function Mayor(T[1..n]): Boolean; Begin iRandom(1..n); xT[i]; k0; For j1 To n Do If T[j]=x Then kk+1; Return(k>n/2); End; Elemento mayoritario (I)

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)

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 9

6.4.3.- Comparacin de multiplicacin de matrices


Function Product(A, B, C: [1..n,1..n]; n: integer): boolean; Var x: Array[1..n]; Begin For i1 To n do x[i]Random(0,1); If ABX=CX Return(True) Else Return(False); End; Comparacin de matrices (I) Function ProductMC(A, B, C: [1..n,1..n]; n:integer): boolean; Var k: integer; : Real); Begin K Int (log2(1/)); For i1 To k Do If (not Product(A, B, C, n)) Then Return(False) Return(True); End; Comparacin de matrices, Algoritmos MonteCarlo (II)

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

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 10

6.5.1.- El problema de las ocho reinas


Procedure Colocar(var reinas: Treinas; var exito: Boolean); Var k,i,j: byte; nb: word; Begin k:=0; Repeat nb:=0; { nb = 0 no hay posicin libre } For i:=1 To 8 do begin Reinas[k+1]:=i; if Not Jaque(Reinas,k+1) then begin Inc(nb); {cuanto mayor es nb existe menos } {probabilidad de que cambie la decisin} if random(nb)+1 = 1 then j:=i; end; end; if nb>0 { si se coloc } then begin Reinas[k+1]:=j; Inc(k); end; until (nb=0) Or (k=8); { error o solucin } exito:= nb > 0; end; Problema de las ocho reinas, Algoritmo Las Vegas

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)

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 11

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

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 12

6.6.1.- Bsqueda del k-simo menor elemento de un array


Funcion SeleccionRB(T[1..n], k): tipoelemento; { Devuelve el k-simo menor elemento del array T } { se supone que 1 k n } Inicio i1; jn; Mientras i < j hacer inicio m T[random(i..j)]; particionar(T, i, j, m, u, v); Si k<u Entonces ju-1 Si_No Si k>v Entonces iv+1 Si_No ik; jk; fin_mientras; Devolver(T[i]); fin; Bsqueda del k-simo elemento de un array

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

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 13

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)

Teora de Algoritmos Tema VI: Algoritmos Probabilistas 14

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)

6.7.5.- Problemas Mochila 8-reinas Viajante de comercio

You might also like