Enunciado - Universidad Autónoma de Madrid

Anuncio
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.
Descargar