41
UNIVERSIDAD AUTONOMA DE COAHUILA Métodos de optimización Simulación y optimización FERNANDO ARANDA GUEVARA 29/10/2013 Métodos de búsqueda unidireccional y optimización multivariable sin restricciones

Métodos de optimización 111

Embed Size (px)

Citation preview

Page 1: Métodos de optimización 111

UNIVERSIDAD AUTONOMA DE COAHUILA

Métodos de optimización

Simulación y optimización

FERNANDO ARANDA GUEVARA

29/10/2013

Métodos de búsqueda unidireccional y optimización multivariable sin restricciones

Page 2: Métodos de optimización 111

BÚSQUEDA UNIDIRECCIONAL: MÉTODOS DE APROXIMACIÓN POLINÓMICA. Otra clase de métodos de minimización unidimensional localizan un punto x cercano a x*, el valor de la variable independiente correspondiente al mínimo de f(x), por interpolación y extrapolación utilizando aproximaciones polinómicas a f(x). Se han propuesto tanto aproximaciones cuadráticas como cúbicas usando tanto los valores de la función solamente como los de sus derivadas primeras. Se ha comprobado que los métodos de interpolación polinómica son normalmente ligeramente mejores que el método de la sección áurea.

Interpolación cuadrática. Si comenzamos con tres puntos, por ejemplo x1, x2, x3 en orden creciente, y no necesariamente igualmente espaciados, pero contenidos dentro de la zona de

búsqueda (a,b), podemos aproximarlos a un polinomio de grado 2, f xa bx

cx2 de tal manera que dicho polinomio pasa exactamente por esos tres puntos y debe presentar un mínimo en:

Si suponemos que f(x) se evalúa en los tres puntos, podríamos calcular los valores de a, b, c resolviendo el sistema de tres ecuaciones lineales:

lo que nos lleva a :

Criterio de selección:

I. Si x* esta entre x2 y x3

a). f*<f2 y f*<f3 entonces x2, x*,x3

b). f*>f2 y f*<f3 entonces x1,x2 ,x

Page 3: Métodos de optimización 111

II Si x* está entre x1 y x2

a). f*<f2 y f*<f1 entonces x1, x*, x2

b). f*>f2 y f*<f1 entonces x* , x2 ,x3

Ejercicio:

Encontrar por el método de interpolación cuadrada el mínimo de la siguiente

función.

Si tomamos las siguientes aproximaciones:

x1=-5 x2=-4 x3=-3

Observamos que el método se desborda y nos arroja un resultado equivocado de

x*= -2.5954

Si tomamos las siguientes aproximaciones:

x1=+3 x2=+4 x3=+5

Observamos que el método se desborda y nos arroja un resultado equivocado de

x*= 2.6005

Si tomamos las siguientes aproximaciones:

x1=-5 x2=-4 x3=+3

Observamos que el mínimo es x*= 0.5000

Si tomamos las siguientes aproximaciones:

x1=-3 x2=+4 x3=+5

Observamos que el mínimo es x*= 0.5000

Si tomamos las siguientes aproximaciones:

Page 4: Métodos de optimización 111

x1=-0.005 x2=-0.004 x3=0.9

Observamos que el mínimo es x*= 0.5000

Si tomamos las siguientes aproximaciones:

x1=-0.0005 x2=0.0004 x3=0.8

Observamos que el mínimo es x*= 0.5000

Conclusiones sobre el método:

Es un método de fácil programación pero no acepta valores muy lejanos al punto

de búsqueda (mínimo) y no acepta que las tres aproximaciones estén ubicadas a

la derecha o izquierda del punto que buscamos. También es necesario dar las

aproximaciones en orden creciente.

-10 -8 -6 -4 -2 0 2 4 6 8

-1

0

1

2

3

4

5

x 104

valores X

valo

res Y

Page 5: Métodos de optimización 111

METODO PROGRAMADO EN MATLAB:

%interpolacion polinomial% clc x1=input('dame el primer valor '); x2=input('dame el segundo valor '); x3=input('dame el tercer valor '); f1=6*x1^4-3*x1+7 f2=6*x2^4-3*x2+7 f3=6*x3^4-3*x3+7 subs x x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-x2^2)*f3)/(((x2-

x3)*f1+(x3-x1)*f2+(x1-x2)*f3))) f=6*x^4-3*x+7 i=0 while 1000>i if x2<x if x<x3 sprintf('x esta entre x2 y x3') if f<f3 if f<f2 sprintf('se cumplen las condiciones a')

x1=x2 x2=x x3=x3 f1=6*x1^4-3*x1+7 f2=6*x2^4-3*x2+7 f3=6*x3^4-3*x3+7 x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-

x2^2)*f3)/(((x2-x3)*f1+(x3-x1)*f2+(x1-x2)*f3))) f=6*x^4-3*x+7 else if f>f2 sprintf('se cumplen las condiciones b') x1=x1 x2=x2 x3=x f1=6*x1^4-3*x1+7 f2=6*x2^4-3*x2+7 f3=6*x3^4-3*x3+7 x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-

x2^2)*f3)/(((x2-x3)*f1+(x3-x1)*f2+(x1-x2)*f3))) f=6*x^4-3*x+7 else end end else end else end

else if x1<x sprintf('x esta entre x1 y x2 ') if f<f1 if f<f2 sprintf('se cumplen las condiciones a') x1=x1 x3=x2 x2=x

Page 6: Métodos de optimización 111

f1=6*x1^4-3*x1+7 f2=6*x2^4-3*x2+7 f3=6*x3^4-3*x3+7 x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-

x2^2)*f3)/(((x2-x3)*f1+(x3-x1)*f2+(x1-x2)*f3))) f=6*x^4-3*x+7 else if f>f2 sprintf('se cumplen las condiciones b') x1=x x2=x2 x3=x3 f1=6*x1^4-3*x1+7 f2=6*x2^4-3*x2+7 f3=6*x3^4-3*x3+7 x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-

x2^2)*f3)/(((x2-x3)*f1+(x3-x1)*f2+(x1-x2)*f3))) f=6*x^4-3*x+7 else end

end else end else end end i=i+1 end sprintf('el minimo es ') x sprintf('¿quieres ver la grafica? si=1 no=2 ') s=input('dame tu eleccion '); if s==1 x=-10:0.1:10 y=6*x.^4-3*x+7 plot(x,y) end

Page 7: Métodos de optimización 111

Sección dorada.

El método solicita una aproximación adecuada a la función problema así como

también requiere un tamaño de paso coherente, a partir de estos dos valores el

método comienza a realizar iteraciones reduciendo el tamaño de paso en cada una

de ellas hasta encontrar el punto mínimo de la función, básicamente trabaja

eliminando regiones de búsqueda en cada iteración.

Los métodos más eficientes de búsqueda por eliminación de regiones son los métodos de Fibonacci y de la ‘sección áurea’, los cuales usan una relación constante para dividir el intervalo en segmentos. Pasaremos a discutir el método de la sección áurea que viene de los números de Fibonacci. La estrategia empleada en el método de la sección áurea es localizar dos puntos interiores del intervalo eliminado en cada iteración de tal manera que se cumpla la relación:

Además solamente una nueva evaluación se realiza en cada etapa de búsqueda.

Ejercicio:

Encontrar por el método de la sección dorada el mínimo de la siguiente función.

Si tomamos los siguientes valores x1=3 y tamaño de paso s=0.005 nos

arroja lo que sigue.

x4 =0.5059 la función evaluada es f4 =-5.8753

Si tomamos los siguientes valores x1=-30 y tamaño de paso s=0.0005 nos

arroja lo que sigue.

x4 = 0.4902 la función evaluada es f4 = -5.8759

Si tomamos los siguientes valores x1=0.002 y tamaño de paso s=0.00005

nos arroja lo que sigue.

x4 = 0.5016 la función evaluada es f4 = -5.8750

Page 8: Métodos de optimización 111

Conclusiones del método:

P ara calcular el mínimo de una función utilizando este método es necesario

multiplicar la función objetivo por (-1). Es fácil de utilizar ya que solo necesita dos

valores iniciales para comenzar las iteraciones.

-10

-5

0

5

-6-5-4-3-2-10x 10

4

-1

-0.5

0

0.5

1

valores yvalores x

Page 9: Métodos de optimización 111

METODO PROGRAMADO EN MATLAB:

%seccion dorad% clc x1=input('dame x1 '); s=input('dame el tamaño de paso '); x3=x1+s; f1=-6*x1^4+3*x1-7; f3=-6*x3^4+3*x3-7; t=0.618034; if f3>f1 else x3=x1; x1=x1+s; s=-1*s; end s=s/t; x2=x3+s; f2=-6*x2^4+3*x2-7; f3=-6*x3^4+3*x3-7;

while f2>f3 x1=x3; x3=x3+s; f1=-6*x1^4+3*x1-7; f3=-6*x3^4+3*x3-7; s=s/t; x2=x3+s; f2=-6*x2^4+3*x2-7; end x1; x2; x3; f2=-6*x2^4+3*x2-7; f1=-6*x1^4+3*x1-7; f3=-6*x3^4+3*x3-7; x4=(1-t)*x1+t*x2; f4=-6*x4^4+3*x4-7; l=abs(f3-f4);

while 0.001<l if f3>f4 x2=x1; x1=x4; x3=x3; x4=(1-t)*x1+t*x2; f2=-6*x2^4+3*x2-7; f1=-6*x1^4+3*x1-7; f4=-6*x4^4+3*x4-7; f3=-6*x3^4+3*x3-7; l=abs(f3-f4); else x1=x3; x2=x2; x3=x4; x4=(1-t)*x1+t*x2; f2=-6*x2^4+3*x2-7; f1=-6*x1^4+3*x1-7; f4=-6*x4^4+3*x4-7;

Page 10: Métodos de optimización 111

f3=-6*x3^4+3*x3-7; l=abs(f3-f4); end

end disp ('el minimo de la funcion es ') x4 disp ('la funcion evaluada es ') f4=-6*x4^4+3*x4-7

sprintf('¿quieres ver la grafica? si=1 no=2 ') s=input('dame tu eleccion '); if s==1 x=-10:0.1:10 y=-6*x.^4+3*x-7 plot(x,y) end

Page 11: Métodos de optimización 111

Método de Newton en diferencias finitas Los métodos en diferencias finitas tipo Newton, se utilizan si la derivada de la función objetivo es difícil de calcular, o ésta viene dada de forma numérica. Se basan en sustituir las derivadas por aproximaciones en diferencias finitas.

Ejercicio:

Encontrar por el método de diferencias finitas el mínimo de la siguiente función.

Si tomamos x0= -0.00003 entonces min = 0.5099

Si tomamos x0= 389 entonces min = 0.5098

METODO PROGRAMADO EN MATLAB:

%diferencias finitas % clc xo=input('dame la primera aproximacion '); n=1000; tol=0.001; [con,x]=cuasinewton('taller3',xo,n,tol); min=x

function [con,x]=cuasinewton(f,xo,n,tol) for i=1:n dx=xo/1000; fd=(feval(f,xo+dx)-feval(f,xo-dx))/dx; fdd=(feval(f,xo+dx)-2*feval(f,xo)+feval(f,xo-dx))/dx^2; x=xo-fd/fdd; if (abs((x-xo)/x))<tol con=true; return

Page 12: Métodos de optimización 111

else xo=x; con=false; end end end

Conclusión del método:

En este método de diferencias finitas no es necesario calcular la derivada de la

función de forma analítica ya que esto se hace por medio de las aproximaciones

en diferencias finitas que pueden ser diferencias centrales, hacia adelante o hacia

atrás.

Método de Newton

De acuerdo con la primera condición necesaria para que una función tuviera un

mínimo local se debe cumplir que f 'x0. Por lo tanto podemos aplicar el

método de Newton a la derivada, así: Realmente lo que hace el método de Newton es aproximar la función por una

función cuadrática en xk.

y dado que f 'x0, diferenciando la ecuación anterior:

0

Que se puede reordenar para dar la primera ecuación. El método de Newton es equivalente a usar un modelo cuadrático y aplicar las condiciones necesarias de optimalidad.

Page 13: Métodos de optimización 111

Ejercicio:

Encontrar por el método de newton el mínimo de la siguiente función.

Si tomamos x0= -0.00003 entonces min = 0.5000

Si tomamos x0= 389 entonces min = 0.5000

METODO PROGRAMADO EN MATLAB:

%metodo de newton% clc xo=3; n=1000; tol=0.001; [con,x]=newton('taller3d','taller3dd',xo,n,tol); resultado=x

function y=taller3d(xo) y=24*xo^3-3; end

function y=taller3dd(xo) y=72*xo^2; end

Conclusión del método:

El procedimiento es cuadráticamente convergente (p=2), siempre que f ''(x) 0 y Para una función cuadrática el mínimo se obtiene en una única iteración. Si existe más de un extremo, el método podría no converger al extremo deseado. Además el método podría oscilar.

Page 14: Métodos de optimización 111

Método de la secante

Los métodos de secante toman dos puntos, xp y xq y resuelve una ecuación similar

a la dada en el método de Newton:

El método de la secante aproxima la segunda derivada por una línea recta.

Cuando xqxp el valor de m se aproximará al valor de la segunda derivada. En este sentido el método de la secante se podría considerar también un método cuasi Newton. Admitiendo que la función es unimodal, el método comienza con dos puntos cualquiera del intervalo de tal manera que la primera derivada tenga signos diferentes. Calculando el cero de la ecuación de partida se obtiene.

Los dos puntos seleccionados para el paso siguiente son x* y xp ó xq dependiendo de los signos de f’(xp) y de f’(xq) con respecto al de f (x*)

El método de la secante parece bastante “crudo” pero funciona bastante bien en la práctica. El orden de convergencia para funciones de una sola variable es de

15/ 2 1.6. Su convergencia es ligeramente menor que la del método de

Newton de diferencias finitas, pero en muchas ocasiones funciona mejor que este en lo que a número de evaluaciones de la función objetivo se refiere. . Ejercicio:

Encontrar por el método de la secante el mínimo de la siguiente función.

Si tomamos xp= 90; xq=95 entonces x= 0.5001 con 95102 iteraciones.

Si tomamos xp= 3;xq=4 entonces x= 0.5001 con 122 Iteraciones.

Si tomamos xp= -17; xq=17 entonces x= 0.4999 con 3969 iteraciones.

Conclusión del método:

El método de la secante solo utiliza l derivada de la función y dos valores iniciales para realizar las iteraciones. El valor que se mantiene constante es el valor de xp y el método termina cuando encuentra un valor tal que df/dx=0

Page 15: Métodos de optimización 111

METODO PROGRAMADO EN MATLAB:

%metodo de la secante% clc xp=input('dame xp aproximacion '); xq=input('dame xq aproximacion '); fp=24*xp^3-3; fq=24*xq^3-3; x=xq-(fq*(xq-xp)/(fq-fp)); f=24*x^3-3; e=0.001; i=0; while (abs(f))>e xq=x; xp=xp; fp=24*xp^3-3; fq=24*xq^3-3; x=xq-(fq*(xq-xp)/(fq-fp)); f=24*x^3-3; i=i+1; end sprintf('el numero de iteraciones '); i

sprintf('el valor del minimo es '); x

-10

-5

0

5

10 -5

0

5

10

x 104

-1

0

1 funcion

derivada de la funcion

Page 16: Métodos de optimización 111

OPTIMIZACIÓN NUMÉRICA MULTIVARIABLE SIN RESTRICCIONES

La optimización numérica de funciones no lineales requiere la utilización de técnicas de optimización eficiente y robusta. La eficiencia es importante porque la solución de estos problemas se lleva a cabo por un procedimiento iterativo. La robustez (habilidad para encontrar la solución) es una propiedad deseable dado que el comportamiento de las funciones no lineales puede ser impredecible: pueden presentar máximos, mínimos y puntos de silla. En algunas regiones el avance hacia el óptimo puede ser muy lento, necesitando mucho tiempo de cálculo etc. Afortunadamente se posee mucha experiencia utilizando métodos de optimización numérica lo que permite contar con buenos algoritmos y conocer sus limitaciones y posibilidades.

Método de lagrange

Criterio de selección:

Δ>0 y fxx>0 existe un mínimo relativo

Δ>0 y fxx<0 existe un máximo relativo

Δ<0 no existe ni máximo ni mínimo

Δ=0 el criterio no da información

Page 17: Métodos de optimización 111

Ejercicio:

Encontrar el mínimo de la siguiente función.

La primera derivada respecto a x es

grafica de df/dx

-10-5

05

10

-10

0

10-4000

-2000

0

2000

4000

6000

valores xvalores y

valo

res z

Page 18: Métodos de optimización 111

La primera derivada respecto a y es

Grafica de df/dx

Resolviendo df/dx y df/dy de manera simultanea tenemos que

Despejando x de df/dx

Sustituyendo x en df/dy y despejando para ‘’y’’ tenemos

Y1= 1.5000

Y2= 1.6514

Y3= -0.1514

X1= -0.5000

x2= -0.6514

x3= 1.1514

-10-5

05

10

-10

-5

0

5

10

-50

0

50

valores x

valores y

valo

res z

Page 19: Métodos de optimización 111

Si para cada pareja de valores resolvemos los determinantes tendremos que.

Y1= 1.5000 y X1= -0.5000…… no existe ni máximo ni mínimo.

Y2= 1.6514 y X2= -0.6514……tienes un máximo.

Y3= -0.1514 y x3= 1.1514…….tienes un máximo.

La grafica de la función es:

-10-5

05

10

-10-5

05

10

-12000

-10000

-8000

-6000

-4000

-2000

valores xvalores y

valo

res z

Page 20: Métodos de optimización 111

METODO PROGRAMADO EN MATLAB:

%dos dimensiones% clc syms x y f=3.5*x+2*y+x^2-x^4-2*x*y-y^2;

%----------------calculando derivadas de la funcion-------------------

--% sprintf('la 1er derivada respectoa a x es ') f1=diff(f,x)

sprintf('la 2da derivada respectoa a x es ') f2dx=diff(f,x,2)

sprintf('la 1er derivada respectoa a y es ') f2=diff(f,y)

sprintf('la 2da derivada respectoa a y es ') f2dy=diff(f,y,2)

sprintf('la 2da derivada respectoa a y-x es ') f2yx=diff(f2,x)

sprintf('la 1er derivada respectoa a x-y es ') f2xy=diff(f1,y)

%-----------------resolviendo la df/dx y df/dy -----------------------

-% sprintf('si df/dx y df/dy se resuelven por simultaneas presiona 1 de

lo contrario 2') g=input('dame tu eleccion '); if g==1 subs x y sprintf('resolviendo la 1a derivada en x-y ') %--c=df/fy---% w1=input('dame la df/dy '); x=solve(w1*1.0,x) x=x*1.0; %---d=df/dx---% w=input('dame la df/dx '); d=solve(w*1.0,y) sprintf('los valores del polinomio son los siguientes ') y1=input('dame el primer valor del polinomio '); y2=input('dame el segundo valor del polinomio '); y3=input('dame el tercer valor del polinomio '); y1 y2 y3 x1=1-y1 x2=1-y2 x3=1-y3 else

if g==2

Page 21: Métodos de optimización 111

subs x y %--w1=df/fy---% w1=input('dame la df/dx '); x=solve(w1*1.0,x) %---d=df/dx---% w=input('dame la df/dy '); d=solve(w*1.0,y) sprintf('los valores del polinomio son los siguientes ') y1=input('dame el primer valor del polinomio y1 '); y2=input('dame el segundo valor del polinomio y2 '); y3=input('dame el tercer valor del polinomio y3 '); y1 y2 y3 x1=input('dame el primer valor del polinomio x1 '); x2=input('dame el segundo valor del polinomio x2 '); x1 x2 end end

%----------------calculando el determinante-------------------------% x1=input('dame el valor de x1 '); y1=input('dame el valor de y1 '); sprintf('introduce los valores en funcion de x1-y1') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0 sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else sprintf('EL CRITERIO NO DA INFORMACION') end

x1=input('dame el valor de x2 '); y2=input('dame el valor de y2 ');

Page 22: Métodos de optimización 111

sprintf('introduce los valores en funcion de x2-y2') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0 sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else sprintf('EL CRITERIO NO DA INFORMACION') end

x1=input('dame el valor de x3 '); y3=input('dame el valor de y3 '); sprintf('introduce los valores en funcion de x3-y3') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0 sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else

Page 23: Métodos de optimización 111

sprintf('EL CRITERIO NO DA INFORMACION') end

%--------------------------grafica---------------------------------% sprintf('si quieres ver la grafica presiona 2 si no presiona 1') s=input('dame s '); if s>1 sprintf('COMIENZA LA GRAFICA') [x,y]=meshgrid(-10:0.5:10); z=3.5*x+2*y+x.^2-x.^4-2*x*y-y.^2; mesh(x,y,z) else end

Page 24: Métodos de optimización 111

Ejercicio:

Encontrar el mínimo de la siguiente función.

La primera derivada respecto a x es

-10-5

05

10

-10

0

10-10

-5

0

5

10

15

20

25

30

valores xvalores y

valo

res z

Page 25: Métodos de optimización 111

La primera derivada respecto a y es

Resolviendo df/dx y df/dy de manera independiente tenemos

X1= 9

x2= -9

Y1= 0

Y2= 1

Y3= -1

Si para cada pareja de valores resolvemos los determinantes tendremos que.

-10

-5

0

5

10

-10-5

05

10-4000

-2000

0

2000

4000

valores xvalors y

valo

res z

Page 26: Métodos de optimización 111

X1= 9 y Y1=0 tienes un máximo

X1= 9 y Y2=1 no existe ni máximo ni mínimo.

X1= 9 y Y3=-1 no existe ni máximo ni mínimo.

X2=- 9 y Y1=0 no existe ni máximo ni mínimo

X2= -9 y Y2=1 no tienes un mínimo.

X2= -9 y Y3=-1 no tienes un mínimo.

La grafica de la función es:

-10

-5

0

5

10

-10

-50

5

10-2000

0

2000

4000

6000

8000

10000

valores xvalores y

valo

res z

Page 27: Métodos de optimización 111

METODO PROGRAMADO EN MATLAB:

%dos dimensiones% clc syms x y f=27*x-(1/9)*x^3-2*y^2+y^4;

%----------------calculando derivadas de la funcion-------------------

--% sprintf('la 1er derivada respectoa a x es ') f1=diff(f,x)

sprintf('la 2da derivada respectoa a x es ') f2dx=diff(f,x,2)

sprintf('la 1er derivada respectoa a y es ') f2=diff(f,y)

sprintf('la 2da derivada respectoa a y es ') f2dy=diff(f,y,2)

sprintf('la 2da derivada respectoa a y-x es ') f2yx=diff(f2,x)

sprintf('la 1er derivada respectoa a x-y es ') f2xy=diff(f1,y)

%-----------------resolviendo la df/dx y df/dy -----------------------

-% sprintf('si df/dx y df/dy se resuelven por simultaneas presiona 1 de

lo contrario 2') g=input('dame tu eleccion '); if g==1 subs x y sprintf('resolviendo la 1a derivada en x-y ') %--c=df/fy---% w1=input('dame la df/dy '); x=solve(w1*1.0,x) x=x*1.0; %---d=df/dx---% w=input('dame la df/dx '); d=solve(w*1.0,y) sprintf('los valores del polinomio son los siguientes ') y1=input('dame el primer valor del polinomio '); y2=input('dame el segundo valor del polinomio '); y3=input('dame el tercer valor del polinomio '); y1 y2 y3 x1=1-y1 x2=1-y2 x3=1-y3 else

if g==2

Page 28: Métodos de optimización 111

subs x y %--w1=df/fy---% w1=input('dame la df/dx '); x=solve(w1*1.0,x) %---d=df/dx---% w=input('dame la df/dy '); d=solve(w*1.0,y) sprintf('los valores del polinomio son los siguientes ') y1=input('dame el primer valor del polinomio y1 '); y2=input('dame el segundo valor del polinomio y2 '); y3=input('dame el tercer valor del polinomio y3 '); y1 y2 y3 x1=input('dame el primer valor del polinomio x1 '); x2=input('dame el segundo valor del polinomio x2 '); x1 x2 end end

%----------------calculando los valores-------------------------% x1=input('dame el valor de x1 '); y1=input('dame el valor de y1 '); sprintf('introduce los valores en funcion de x1-y1') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0 sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else sprintf('EL CRITERIO NO DA INFORMACION') end

x1=input('dame el valor de x1 '); y2=input('dame el valor de y2 ');

Page 29: Métodos de optimización 111

sprintf('introduce los valores en funcion de x1-y2') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0 sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else sprintf('EL CRITERIO NO DA INFORMACION') end

x1=input('dame el valor de x1 '); y3=input('dame el valor de y3 '); sprintf('introduce los valores en funcion de x1-y3') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0 sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else

Page 30: Métodos de optimización 111

sprintf('EL CRITERIO NO DA INFORMACION') end

x2=input('dame el valor de x2 '); y1=input('dame el valor de y1 '); sprintf('introduce los valores en funcion de x2-y1') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0 sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else sprintf('EL CRITERIO NO DA INFORMACION') end

x2=input('dame el valor de x2 '); y2=input('dame el valor de y2 '); sprintf('introduce los valores en funcion de x2-y2') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0

Page 31: Métodos de optimización 111

sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else sprintf('EL CRITERIO NO DA INFORMACION') end

x2=input('dame el valor de x2 '); y3=input('dame el valor de y3 '); sprintf('introduce los valores en funcion de x2-y3') z1=input('dame f2dx '); z2=input('dame f2xy '); z3=input('dame f2yx '); z4=input('dame f2dy '); z1=z1; z2=z2; z3=z3; z4=z4; h(1,1)=z1; h(1,2)=z2; h(2,1)=z3; h(2,2)=z4; h h1=det(h) d1=z1 if h1~=0 if h1>0 if d1>0 sprintf('TIENES UN MINIMO') else sprintf('TIENES UN MAXIMO') end else sprintf('NO EXISTE NI MAXIMO NI MINIMO') end else sprintf('EL CRITERIO NO DA INFORMACION') end

%--------------------------grafica---------------------------------% sprintf('si quieres ver la grafica presiona 2 si no presiona 1') s=input('dame s '); if s>1 sprintf('COMIENZA LA GRAFICA') [x,y]=meshgrid(-10:0.5:10); z=27*x-(1/9)*x.^3-2*y.^2+y.^4; mesh(x,y,z) else end

Page 32: Métodos de optimización 111

Conclusiones sobre el método:

Este método presenta inconsistencias al momento de resolver df/dx y df/dy ya que

en este punto puede presentarse indeterminaciones o valores fuera de lo

esperado así como puntos de inflexión o de silla.

Método del máximo descenso del gradiente

Empezamos en un punto (po) y buscamos una mejora en la semirrecta que parte de (po) en la dirección señalada por el vector s0=-g/abs(g). este es un problema en una variable que podemos resolver con métodos de búsqueda unidireccional . de esta manera llegamos a (p1), en el cual hay un mínimo local de la función f(x) restringida a los puntos x de la semirrecta x=p1+t*s0. Esto es un proceso iterativo hasta encontrar la solución con la tolerancia deseada.

Encontrar por máximo descenso del gradiente el mínimo de la siguiente función.

i x1 x2 foriginal dF1 dF2 normal alfa

0 1,5 0,5 0,3125 0,5 -2 2,061552813 0,103

La minimización de alfa es mediante el método de la secante como se puede

ver en la grafica para la primera iteración.

-10 -8 -6 -4 -2 0 2 4 6 8 10-1000

-500

0

500

1000

1500

2000

2500

3000

Page 33: Métodos de optimización 111

La siguiente tabla desarrollada en Excel muestra algunas iteraciones hechas

para resolver el mínimo de la función.

i x1 x2 foriginal dF1 dF2 normal alfa h

0 1,5 0,5 0,3125 0,5 -2 2,061552813 0,10283145 0,09384025

1 1,44858427 0,7056629 0,09384025

-0,59613539

-0,14903387 0,6144823 0,36752205 0,03374833

2 1,66767718 0,76043614 0,03374833 0,14680492

-0,58721961 0,605292126 0,10404737 0,01468555

3 1,65240251 0,8215348 0,01468555

-0,14932666

-0,03733167 0,153922401 0,67718545 0,00727786

4 1,75352435 0,84681526 0,00727786 0,05989384

-0,23957533 0,246948598 0,10445618 0,00409268

5 1,74726807 0,87184038 0,00409268

-0,05739682

-0,01434921 0,059163284 0,95530035 0,00249505

6 1,80209927 0,88554819 0,00249505 0,0310029

-0,12401158 0,127828215 0,10462973 0,00164021

7 1,79885544 0,89852348 0,00164021

-0,02893559 -0,0072339 0,029826121 1,16963871 0,00113424

8 1,83269963 0,90698453 0,00113424 0,01873057

-0,07492225 0,077228088 0,1047186 0,00082196

9 1,83073819 0,91483029 0,00082196

-0,01724187

-0,00431047 0,017772515 1,32921272 0,00061583

10 1,8536563 0,92055982 0,00061583 0,01253668

-0,05014669 0,051690026 0,10477056 0,00047587

11 1,85234283 0,92581371 0,00047587

-0,01144646

-0,00286162 0,011798738 1,44883826 0,00037629

12 1,86892689 0,92995973 0,00037629 0,00900744

-0,03602973 0,037138595 0,10480393 0,00030401

Donde x1 y x2 son las

aproximaciones

Foriginal=la función

original evaluada en

x1 y x2

F1=derivada de la

función original en x1

F2=derivada de la

función original en x2

A=alfa

H=función a

minimizar

Page 34: Métodos de optimización 111

-10-5

05

10

-10

0

100

0.5

1

1.5

2

2.5

x 104

valores xvalores y

valo

res z

-10-5

05

10

-10-5

05

10-8000

-6000

-4000

-2000

0

2000

4000

valores xvalores y

valo

res z

Page 35: Métodos de optimización 111

-10

-5

0

5

10

-10

-5

0

5

10-150

-100

-50

0

50

100

150

valores xvalores y

valo

res z

Page 36: Métodos de optimización 111

Encontrar los puntos críticos y determinar si son máximos o mínimos en la función.

Resolviendo de manera independiente df/dx y df/dy para calcular los puntos críticos tenemos que de la 1ª derivada en x

X1=0 X2=1 X3=2

De la 1ª derivada en y

y1=0 y2= 2.1472 y3= -1.3972

Para la primer pareja de valores, es decir (x1, y1)

Hess= -96

Por lo tanto no hay máximo ni mínimo

Concluyendo que X1=0, y1=0 no existe ni máximo ni mínimo. X2=1, y2=2.1472 no existe ni máximo ni mínimo. X1=0, y1=0 tienes un mínimo.

Page 37: Métodos de optimización 111

Grafica de

-10-5

05

10

-10

0

10-5000

0

5000

10000

15000

valores xvalores y

valo

res z

Page 38: Métodos de optimización 111

Método de Newton.

El método de Newton hace uso de la aproximación de segundo orden de la función utilizando las derivadas segundas con respecto a cada una de las variables independientes. De esta forma es posible tener en cuenta la curvatura de la función en el punto e identificar las mejores direcciones de búsqueda. El mínimo de f(x) se obtiene diferenciando la aproximación cuadrática de f(x) con respecto a cada una de las variables e igualando a cero. Así:

f xf xk Hxk xk

Si f(x) es una función cuadrática el mínimo se alcanza en un único paso. Pero para una función general no lineal el óptimo no se alcanza en un único paso, por lo que se puede modificar la ecuación anterior para introducir el parámetro de longitud de paso, con lo que queda:

La longitud de paso se puede calcular vía cualquier método de optimización numérica de los ya comentados o bien analíticamente con lo que se obtendría:

En el método de Newton estrictamente hablando el valor de es la unidad. El problema también se puede resolver sin necesidad de invertir la matriz hessiana

resolviendo directamente el sistema de ecuaciones lineales en x, aplicando la factorización adecuada y evitando los errores de redondeo, en la medida de lo posible, que puedan aparecer como consecuencia del proceso de inversión de matrices. El método de Newton es el método de minimización más rápido, cuando funciona bien. Pero presenta las siguientes desventajas: 1.- El método no encuentra necesariamente un óptimo global (pero esto es una característica de todos los métodos que hemos comentado hasta el momento) 2.- Requiere la inversión de matrices o la resolución de un sistema de n ecuaciones lineales 3.- Necesita de las derivadas primera y segunda, las cuales en la práctica no son fáciles de obtener. 4.- El método puede llevar a un punto de silla si la matriz hessiana no es definida positiva.

La dificultad 3 se puede aliviar utilizando métodos apropiados de diferencias finitas para el cálculo de las derivadas primera y segunda. La convergencia global se

Page 39: Métodos de optimización 111

puede reforzar si, al realizar un paso de Newton propiamente dicho (=1) no se obtiene mejoría de la función objetivo, se vuelve al punto anterior y se realiza una

búsqueda con el valor de variable. Para evitar la dificultad 4 se debe ser muy cuidadoso con la técnica que se utiliza para garantizar que la matriz hessiana o su inversa sea definida positiva. (en algunos casos debido al número de condición de la matriz la inversión de ésta podría llevar a matrices no definidas positivas). Por otra parte sólo está garantizado que el valor de la función objetivo mejora si la matriz hessiana es definida positiva. H(x) es definida positiva sólo para funciones estrictamente convexas, pero las funciones no lineales en general la matriz H(x) puede cambiar de punto a punto y el método de Newton podría llevarnos a direcciones que no reducen el valor de la función objetivo (o al menos no a las direcciones óptimas). En otras palabras si los valores propios de la matriz hessiana son todos positivos sabemos que estamos aproximando nuestra función por una cuadrática de contornos circulares o elipsoidales que tienen un mínimo. Pero si al menos dos valores propios presentan signos opuestos podríamos movernos en dirección a un punto de silla en lugar de hacia el mínimo. El método de Newton tiene la ventaja de la convergencia cuadrática sólo en la vecindad del óptimo, donde la función objetivo puede ser aproximada bastante bien por una función cuadrática. Pero en zonas más alejadas otros métodos pueden presentar velocidades de convergencia mayores.

Ejercicio:

Minimizar la siguiente función:

Las derivadas correspondientes son:

Page 40: Métodos de optimización 111

Haciendo los cálculos en Excel el ejercicio quedaría de la siguiente forma:

-10

-5

0

5

10

-10

-5

0

5

100.95

1

1.05

1.1

1.15

1.2

x 105

valores xvalores y

valo

res z

Page 41: Métodos de optimización 111

Ref. bibliográfica:

Libro: Métodos numéricos con matlab 5ª edicicon,Johns H.Mathews,Kurtis D. Fink.

Cap. 8 Optimizacion numérica pag. 433