Algoritmos Dr. Enrique F. Garza Escalante © Facultad de Ingeniería
Algoritmo Conjunto finito de instrucciones bien definidas para lograr alguna tarea (objetivo), que dado un estado inicial, terminará en un estado final una vez alcanzado un criterio. Ejemplo 1: Torre de Hanoi  http://www.wikipedia.org/   El objetivo es mover todos los discos de su posición inicial a otra guía, obedeciendo las reglas: Sólo se puede mover un disco a la vez  Ningún disco se puede poner sobre un disco menor  ¿Cuántos pasos para “n” discos?
Ejemplo 2: Algoritmo de Euclides Dados dos enteros positivos m y n, encontrar su máximo común divisor  Paso 1: Dividir m por n y dejar que r sea el remanente (tendremos 0<= r<n) Paso 2: Si r=0, el algoritmo termina, n es la respuesta Paso 3: Fijar m   n, n  r, ir a Paso1 ¿Puedes demostrar que el algoritmo resuelve lo que ofrece?
Características de un Algoritmo Donald E. Knuth Fundamental Algorithms Vol. 1, 2nd edition Finito Definido con Precisión Entradas Salidas Efectividad
Búsquedas El obtener cada dato representa costo en tiempo de cálculo, por ello, deseamos obtener información de manera sistemática e inteligente (utilizando la información conforme se va generando para realizar la siguiente búsqueda)  Todo proceso de búsqueda consiste de definir una dirección de movimiento y que tanto nos moveremos en esa dirección.  Al elegir una dirección, el problema se reduce a búsqueda de un mínimo en una dirección. Una vez realizado el movimiento se analiza si seguimos con otra búsqueda o nos detenemos allí.
Búsqueda con la Serie Fibonacci  Si suponemos que en la búsqueda que vamos a realizar podemos: Encontrar el valor de la función f(x) en un punto dado,  Todos los puntos en los que vamos a buscar, se encuentran contenidos en un intervalo [a, b], y por último  La función f(x) es unimodal (es decir, tiene un mínimo y la función es estrictamente decreciente previo al mínimo y estrictamente creciente después del mismo).
Búsqueda Fibonacci Entonces podemos emplear la serie de Fibonacci para encontrar un intervalo d=2 (b-a)/F N  donde F k =F k-1 +F k-2  y “F N ” es el último término de la serie y “N” representa el número de mediciones a realizarse.  Recordemos que F 0  = F 1  = 1. Luego tenemos que los primeros 10 términos son: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55. La búsqueda se realiza de la manera siguiente:
Se determina el número de mediciones “N” y esto nos genera F N . Definimos P N =F N-1 /F N . Inicialización: Fijamos  Fijar n=N. x=a+(1-Pn)(b-a)  y=a+Pn (b-a) Evaluar f(x) y f(y).  I teración : Si f(x)>f(y)  reduce el intervalo a (x, b] (esto es, fija a=x),  decrementa n a n-1, y  fija x = y e y = a + Pn(b-a)  Si f(x) ≤ f(y),  reduce el intervalo a [a, y) (esto es fija b=y),  decrementa n a n-1, y  fija y = x e x= a + (1-Pn)(b-a). Si n=1, termina, de lo contrario regresa a Iteración. El Intervalo Final es b-a penúltimos, que es igual al intervalo original [a, b] *2 entre F N
Ejemplo con cinco mediciones, vamos a evaluar f(x)= 3x 4 -16x 3 + 18 x 2   tenemos lo siguiente (Ver ejemplo Busqueda Serie Fibonacci.xls):
Método de Newton  la función es continua y tiene primer y segunda derivada continua.  Se construye de la manera siguiente: Se toma un punto x k  y se evalúa el valor de la función en ese punto f(x k ), su derivada f’(x k ) y segunda derivada f’’(x k ). Luego aproximamos nuestra función original con una cuadrática utilizando el polinomio de Taylor en segundo orden: f(x)    g(x)= f(x k )+f ’(x k ) (x- x k )+0.5 f ’’(x k ) (x- x k ) 2
Método de Newton (Cont.) Como deseamos minimizar g(x), buscamos el punto en que su derivada se hace 0. g’(x) = f ’(x k )+ f ’’(x k ) (x- x k ) = 0 Despejamos x y obtenemos: x = x k  – f ’(x k )/ f ’’(x k ) Este punto representa el siguiente punto en que analizaremos si estamos en el mínimo. Por ello lo denotaremos x k+1   Una vez que f ’(x k )=0, tenemos que x k+1 =x k  que significa que estamos en el punto deseado.
Ejemplo Podemos aplicar este método a la misma función f(x)= 3x 4 -16x 3 + 18 x 2 . Primero calculamos la primera y segunda derivadas:  f ‘(x) = 12x 3  – 48x 2  + 36x f ´´(x) = 36x 2  – 96x + 36 Damos un punto de inicio x 0  e iniciamos la búsqueda de cada x i  .
Método de Newton (Conclusión) La convergencia a cada punto crítico lleva menos pasos que en el caso del método anterior. Claro que para emplear el método de Newton requerimos que la función sea dos veces diferenciable, y de evaluar la derivada y segunda derivada en cada punto. ¿Puedes definir claramente los pasos del algoritmo con que emplearías el método de Newton? ¿Qué criterio de terminación de iteraciones emplearías?
El método de Descenso Más Pronunciado (Steepest Descent)  Si tenemos a   f ( x ) como el vector renglón de derivadas parciales de f con respecto a cada argumento x i  y estas son continuas, definimos el vector columna  q ( x ) =  f ( x ) T  y empleamos la búsqueda: x k+1  = x k  -   k   q ( x k )  Encontraremos el parámetro    que minimice nuestra función f( x ) a partir de  x k  en la dirección de -  q ( x k ). Esto es, buscamos: f( x k  -   k *  q ( x k )) =Mín α ≥0  f( x k  -   k   q ( x k ))
Algoritmo  Inicio . Calcular el gradiente de f. Gradiente . Evaluamos gradiente en punto de partida k,   f( x k ). Sustituir . Sustituimos el vector transpuesto de ese vector [  f( x k )] de constantes en  x k+1  =  x k  -   k   q ( x k ) , obteniendo expresiones lineales de    para cada argumento del vector  x k+1 Evaluamos  la función f con esos argumentos y minimizamos para encontrar el parámetro   k * , utilizando uno de los métodos de búsqueda en una dirección (Fibonacci o Newton) o resolvemos analíticamente. Analizamos  si con ese mínimo cada elemento del gradiente |  f/  x i |≤є para toda i=1,...,n y є>0. Si se cumple detenerse,  x k+1  es la solución. Si no es el caso fijar k+1 como k y regresar a  Sustituir .
Ejemplo: f[x,y]=2x 2 -4xy+3y 2 ¿Qué puedes decir de esa función? Ver archivo: Steepest Descent 1.nb ¿Qué tan rápido converge Steepest Descent? ¿Se te ocurren posibles mejoras?

Algoritmos

  • 1.
    Algoritmos Dr. EnriqueF. Garza Escalante © Facultad de Ingeniería
  • 2.
    Algoritmo Conjunto finitode instrucciones bien definidas para lograr alguna tarea (objetivo), que dado un estado inicial, terminará en un estado final una vez alcanzado un criterio. Ejemplo 1: Torre de Hanoi http://www.wikipedia.org/ El objetivo es mover todos los discos de su posición inicial a otra guía, obedeciendo las reglas: Sólo se puede mover un disco a la vez Ningún disco se puede poner sobre un disco menor ¿Cuántos pasos para “n” discos?
  • 3.
    Ejemplo 2: Algoritmode Euclides Dados dos enteros positivos m y n, encontrar su máximo común divisor Paso 1: Dividir m por n y dejar que r sea el remanente (tendremos 0<= r<n) Paso 2: Si r=0, el algoritmo termina, n es la respuesta Paso 3: Fijar m  n, n  r, ir a Paso1 ¿Puedes demostrar que el algoritmo resuelve lo que ofrece?
  • 4.
    Características de unAlgoritmo Donald E. Knuth Fundamental Algorithms Vol. 1, 2nd edition Finito Definido con Precisión Entradas Salidas Efectividad
  • 5.
    Búsquedas El obtenercada dato representa costo en tiempo de cálculo, por ello, deseamos obtener información de manera sistemática e inteligente (utilizando la información conforme se va generando para realizar la siguiente búsqueda) Todo proceso de búsqueda consiste de definir una dirección de movimiento y que tanto nos moveremos en esa dirección. Al elegir una dirección, el problema se reduce a búsqueda de un mínimo en una dirección. Una vez realizado el movimiento se analiza si seguimos con otra búsqueda o nos detenemos allí.
  • 6.
    Búsqueda con laSerie Fibonacci Si suponemos que en la búsqueda que vamos a realizar podemos: Encontrar el valor de la función f(x) en un punto dado, Todos los puntos en los que vamos a buscar, se encuentran contenidos en un intervalo [a, b], y por último La función f(x) es unimodal (es decir, tiene un mínimo y la función es estrictamente decreciente previo al mínimo y estrictamente creciente después del mismo).
  • 7.
    Búsqueda Fibonacci Entoncespodemos emplear la serie de Fibonacci para encontrar un intervalo d=2 (b-a)/F N donde F k =F k-1 +F k-2 y “F N ” es el último término de la serie y “N” representa el número de mediciones a realizarse. Recordemos que F 0 = F 1 = 1. Luego tenemos que los primeros 10 términos son: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55. La búsqueda se realiza de la manera siguiente:
  • 8.
    Se determina elnúmero de mediciones “N” y esto nos genera F N . Definimos P N =F N-1 /F N . Inicialización: Fijamos Fijar n=N. x=a+(1-Pn)(b-a) y=a+Pn (b-a) Evaluar f(x) y f(y). I teración : Si f(x)>f(y) reduce el intervalo a (x, b] (esto es, fija a=x), decrementa n a n-1, y fija x = y e y = a + Pn(b-a) Si f(x) ≤ f(y), reduce el intervalo a [a, y) (esto es fija b=y), decrementa n a n-1, y fija y = x e x= a + (1-Pn)(b-a). Si n=1, termina, de lo contrario regresa a Iteración. El Intervalo Final es b-a penúltimos, que es igual al intervalo original [a, b] *2 entre F N
  • 9.
    Ejemplo con cincomediciones, vamos a evaluar f(x)= 3x 4 -16x 3 + 18 x 2 tenemos lo siguiente (Ver ejemplo Busqueda Serie Fibonacci.xls):
  • 10.
    Método de Newton la función es continua y tiene primer y segunda derivada continua. Se construye de la manera siguiente: Se toma un punto x k y se evalúa el valor de la función en ese punto f(x k ), su derivada f’(x k ) y segunda derivada f’’(x k ). Luego aproximamos nuestra función original con una cuadrática utilizando el polinomio de Taylor en segundo orden: f(x)  g(x)= f(x k )+f ’(x k ) (x- x k )+0.5 f ’’(x k ) (x- x k ) 2
  • 11.
    Método de Newton(Cont.) Como deseamos minimizar g(x), buscamos el punto en que su derivada se hace 0. g’(x) = f ’(x k )+ f ’’(x k ) (x- x k ) = 0 Despejamos x y obtenemos: x = x k – f ’(x k )/ f ’’(x k ) Este punto representa el siguiente punto en que analizaremos si estamos en el mínimo. Por ello lo denotaremos x k+1 Una vez que f ’(x k )=0, tenemos que x k+1 =x k que significa que estamos en el punto deseado.
  • 12.
    Ejemplo Podemos aplicareste método a la misma función f(x)= 3x 4 -16x 3 + 18 x 2 . Primero calculamos la primera y segunda derivadas: f ‘(x) = 12x 3 – 48x 2 + 36x f ´´(x) = 36x 2 – 96x + 36 Damos un punto de inicio x 0 e iniciamos la búsqueda de cada x i .
  • 13.
    Método de Newton(Conclusión) La convergencia a cada punto crítico lleva menos pasos que en el caso del método anterior. Claro que para emplear el método de Newton requerimos que la función sea dos veces diferenciable, y de evaluar la derivada y segunda derivada en cada punto. ¿Puedes definir claramente los pasos del algoritmo con que emplearías el método de Newton? ¿Qué criterio de terminación de iteraciones emplearías?
  • 14.
    El método deDescenso Más Pronunciado (Steepest Descent) Si tenemos a  f ( x ) como el vector renglón de derivadas parciales de f con respecto a cada argumento x i y estas son continuas, definimos el vector columna q ( x ) =  f ( x ) T y empleamos la búsqueda: x k+1 = x k -  k q ( x k ) Encontraremos el parámetro  que minimice nuestra función f( x ) a partir de x k en la dirección de - q ( x k ). Esto es, buscamos: f( x k -  k * q ( x k )) =Mín α ≥0 f( x k -  k q ( x k ))
  • 15.
    Algoritmo Inicio. Calcular el gradiente de f. Gradiente . Evaluamos gradiente en punto de partida k,  f( x k ). Sustituir . Sustituimos el vector transpuesto de ese vector [  f( x k )] de constantes en x k+1 = x k -  k q ( x k ) , obteniendo expresiones lineales de  para cada argumento del vector x k+1 Evaluamos la función f con esos argumentos y minimizamos para encontrar el parámetro  k * , utilizando uno de los métodos de búsqueda en una dirección (Fibonacci o Newton) o resolvemos analíticamente. Analizamos si con ese mínimo cada elemento del gradiente |  f/  x i |≤є para toda i=1,...,n y є>0. Si se cumple detenerse, x k+1 es la solución. Si no es el caso fijar k+1 como k y regresar a Sustituir .
  • 16.
    Ejemplo: f[x,y]=2x 2-4xy+3y 2 ¿Qué puedes decir de esa función? Ver archivo: Steepest Descent 1.nb ¿Qué tan rápido converge Steepest Descent? ¿Se te ocurren posibles mejoras?