Universidad Autónoma de Madrid Escuela Politécnica Superior Optimización y Simulación Practica 2 Optimización multivariante (sin restricciones) Fecha de entrega: 26 y 27 de abril de 2012 Objetivos: A. Estimación de extremos de funciones reales de varias variables. Estimaremos los extremos (máximos y mínimos, locales ó globales) de funciones de D variables independientes (dimensión D). Esta estimación servirá de punto de partida para obtener aproximaciones con mayor precisión. Ejercicios propuestos: Dadas las siguientes funciones: a) fun1(x, y)= b) fun2(x, y)= x 2 2 y 2 xy x 9 en el cuadrado [-1,1]². x 2 2 y 2 2 xy 9 50 ( y x x 2 9)( x 2 1)( y 2 1) en el cuadrado [-1,1]². 1) Realizar un barrido uniforme en las 2 dimensiones. Recoger en sendas matrices los valores de las funciones en los vértices de una cuadrícula uniformemente espaciada. Para evitar la utilización de bucles for ineficientes hay que tener en cuenta lo siguiente: a) En Matlab una matriz es también un array lineal, pues sus elementos se guardan adyacentes por columnas. Por ejemplo, [[1 2] [3 4]](3) devuelve 2. b) Si la expresión E calcula una función de dos variables (por ejemplo E=sin(X+Y)) y formamos una cuadrícula según las direcciones de los ejes (por ejemplo, los puntos de la forma (xj, yk) con xj=j.0,1 e yk=k.0,1 con j y k entre -20 y 20), entonces la matriz que forman de manera natural las primeras coordenadas de los vértices de la cuadrícula está formada por 21 columnas iguales mientras que la correspondiente a sus segundas coordenadas está formada por 21 filas iguales. Además, la matriz que corresponde a la expresión E se calcula mediante aritmética vectorial (con un solo bucle que Matlab optimiza como en el caso unidimensional), es decir que Eij=sin(Xij+Yij). c) Matlab incluye una función, meshgrid, que construye automáticamente las matrices anteriores para cuadrículas en dimensión 2 ó 3. También incluye otra función menos eficiente, ndgrid, para cuadrículas en cualquier dimensión. La forma de meshgrid en el caso bidimensional es [X,Y]=meshgrid(A,B), donde A y B son arrays crecientes con las coordenadas que definen la cuadrícula. Por ejemplo, si A=0:0.5:1 y B=2:1:3 y [X,Y]=meshgrid(A,B), entonces X=[0 0.5 1 ; 0 0.5 1] e Y=[2 2 2 ; 3 3 3], de manera que X+Y=[2 2.5 3 ; 3 3.5 4] y se pueden calcular análogamente expresiones arbitrarias como E=sin(X+Y). 2) Buscar los extremos de las funciones. Probar distintos valores para el espaciamiento de la malla, empezando con d=0,1. 3) Dibujar ambas funciones. Pintar la gráfica en 3D, usando la función surf. Analizar los puntos críticos de las funciones: extremos (máximos o mínimos), puntos de silla y singularidades. Usar estos resultados para acotar una región donde se realizará una búsqueda más fina en el apartado B. 4) Obtener el gradiente Df: un vector cuyas componentes son las derivadas parciales de la función, Dxf(x,y), Dyf(x,y), analiticamente y con ayuda de MatLab. Investigar la relación entre los puntos críticos de f(x,y) y Df(x,y). B. Programación de algorítmos para obtención de máximos y mínimos de funciones reales de varias variables. 1) Implementar en Matlab una función que devuelva el punto de valor mínimo (x,y) y el valor en él de la función fun, utilizando el método de Hooke y Jeeves, descrito al final de este documento. Sintaxis: [t,xmin,ymin,fmin] = BusMinMultHJ(fun,x1,x2,y1,y2,ep) Los parámetros de entrada son: - fun define la función a minimizar. - Los argumentos (x1, x2) e (y1, y2) definen la región de búsqueda de la solución. - ep define el parámetro de control (o de precisión) para el término de la ejecución. Los parámetros de salida son: - (xmin,ymin) es el punto donde la función fun alcanza el mínimo. - fmin es el valor de la función fun en el mínimo. - t es el número de iteraciones necesárias hasta encontrar la solución. 2) Construir una tabla para los valores del mínimo como función del parámetro de control: (ep,xmin,ymin). Variar ep entre 10-1 y 10-9 (factores de 10). Analizar los resultados obtenidos. Entrega: Se deberá entregar: 1) Una memoria impresa con a) una explicación abreviada sobre el método empleado en la implementación del algorítmo; b) los resultados, incluyendo las gráficas y tablas correspondientes. 2) Un único archivo comprimido (Os9p2.zip) con la memoria, os0P2.pdf, y el código fuente en MatLab del programa incluidos. Además se deberán presentar ambos miembros de cada equipo en el laboratorio con el programa y la memoria durante el dia de entrega. Algoritmo de Hooke y Jeeves. Notación: d1 y d2 representan los vectores directores (1,0) y (0, 1) respectivamente. Ademas, x, yj, z y d representan puntos del plano. Etapa de inicialización: Elegir un punto de partida x y un escalar >0 que determina la condición de terminación del algoritmo. Etapa principal: 1. Hacer y1=x y j=1. Sea j una solución óptima del problema de minimización de f(yj+dj) con [-1, 1], y sea yj+1=yj+jdj. Si j<2, reemplazar j por j+1 y repetir el paso 1. Si, por el contrario, j=2, sea z=y3. Si |z-x|<, stop y devolver z. En caso contrario, ir al paso 2. 2. Sea d=(z-x)/|z-x| y sea una solución óptima al problema de minimizar f(z+d) con [-1, 1]. Hacer x=f(z+d) y repetir el paso 1.