Optimización Multidimensional 2023
Optimización Multidimensional 2023
Optimización Multidimensional
no restringida
2023
Prof.: Dr. Juan Ignacio Manassaldi
JTP: Ing. Amalia Rueda
Repaso
Repaso
Repaso
Repaso
Aproximación de primer orden:
f ( x , x 0 ) = f ( x 0 ) + ( x − x 0 ) f ( x 0 )
T
2
Introducción
Los métodos que se han ideado se pueden clasificar en tres amplias
categorías según el tipo de información que debe proporcionar el
usuario:
• Métodos de búsqueda directa, que utilizan solo valores de
función.
Método de una variable a la vez
• Métodos de gradiente (primer orden), que requieren
estimaciones de la primera derivada de ƒ(x).
Descenso mas pronunciado
• Métodos de segundo orden, que requieren estimaciones de la
primera y segunda derivada de ƒ(x).
Método de Newton
Introducción - Búsqueda de línea
• La búsqueda de línea nos permite encontrar el valor mínimo (o
máximo) que toma una función sobre una dirección determinada
de búsqueda.
• Para realizar la búsqueda de línea sobre ƒ(x), necesitamos un valor
perteneciente al dominio de la función x0 y una dirección de
búsqueda d.
• Partiendo del punto x0 y utilizando la dirección en el espacio d
podemos encontrar el valor mínimo que toma la función mediante
una optimización unidimensional.
x=x
0
+d
Ecuación de todos los puntos sobre la dirección d desde x0
Búsqueda de línea
x=x
0
+d
Para encontrar el valor mínimo sobre esta dirección se debe resolver
el siguiente problema:
Min. f x ( 0
+d )
¡Es un problema de optimización unidimensional!
Solo debo encontrar el que minimiza f
Búsqueda de línea - Ejemplo
f ( x ) = 8 x1 + 4 x1 x2 + 5 x2
2 2
Búsqueda de línea - Ejemplo
−4 1
f ( x ) = 8 x1 + 4 x1 x2 + 5 x2
2 2 x = d =
0
−4 0
Búsqueda de línea - Ejemplo
→x=x
−4 1 0
x =
0
−4 d= 0 +d
−4 1 −4+
x= + →x=
−4 0 −4
Min. f x ( 0
+d ) f ( x ) = 8 x12 + 4 x1 x2 + 5 x2 2
Min 8 ( −4 + ) + 4 ( −4 + )( −4 ) + 5 ( −4 )
2 2
Búsqueda de línea - Ejemplo
Min 8 ( −4 + ) + 4 ( −4 + )( −4 ) + 5 ( −4 )
2 2
(
f x
0
+d )
óptimo = 5
Búsqueda de línea - Propuesta
−4 cos ( 4 )
x = d =
0
Min. f ( x ) = 8 x1 + 4 x1 x2 + 5 x2
2 2
−4 sen ( )
4
Método directo: “Una variable a la vez”
( 0)
x D n
; d 1, d 2 , d n; k = 1
x( ) = x(
k k −1)
i =1 a n (
* = Min. f x ( ) + d i
k
)
x( ) = x( ) + * d i
k k
x( ) − x(
k −1)
tol
k
si
no
x* = x (
k)
k = k +1
Una variable a la vez - Ejemplo
−4
Min. f ( x ) = 8 x1 + 4 x1 x2 + 5 x2
2 2
x ( 0)
=
−4
Una variable a la vez - Ejemplo
Min. f ( x ) = 8 x1 + 4 x1 x2 + 5 x2 2 2
k =1 i =1
x
( 0)
=
−4
−4
(
= Min. f x ( ) + d 1 → = 5
1
)
( ) ( )
d1 =
1
x 1 = x 1 + d 1 → x(1) = −4 + 5 1 = 1
−4 0 −4
0
d2 =
0
i=2
( )
1
= Min. f x ( ) + d 2 → = 3.6
1
( ) ( ) −4
x1 = x0 = ( ) ( )
x 1 = x 1 + d 2 → x(1) = 1 + 3.6 0 = 1
−4 −4 −0.4
1
( 0) −4 (1) 1 ( )
f x ( 0) = 272
x = ;
−4
x =
− 0.4
→
( )
(1)
f x = 7.2
¿? ¡Seguimos!
Una variable a la vez - Ejemplo
k =2 i =1
( )
x1 =
1
−0.4
= Min. f x ( ( 2)
+ d1 ) → = −0.9
x 2 = x 2 + d 1 → x( 2) = 1 1 0.1
( ) ( )
1 − 0.9 =
d1 = − 0.4
0 −0.4
0
d2 =
0
i=2
( ) → = 0.36
1
= Min. f x (
2)
+d2
( 2) (1) 1
x =x = −0.4 x
( 2)
=x
( 2) ( )
+ d 2→ x =
2 0.1
+ 0.36
0 0.1
=
− 0.4 1 −0.04
1 0.1 ( )
f x (1) = 7.2
x (1)
= ;
−0.4
x ( 2)
=
−0.04
→
f x
( 2)
( )
= 0.072
¿? ¡Seguimos!
Una variable a la vez - Ejemplo
k =3 i =1
x2 =
( ) 0.1
−0.04
= Min. f x ( ( 3)
+ d1 ) → = −0.09
( ) ( )
d1 =
1
x 3 = x 3 + d 1 → x(3) = 0.1
− 0.09
1 0.01
=
− 0.04 0 −0.04
0
d2 =
0
i=2
( ) → = 0.036
1
= Min. f x (
3)
+d2
( 3) ( 2) 0.1
x =x = −0.04 ( ) ( )
x 3 = x 3 + d 2 → x(3) = 0.01 + 0.036 0 = 0.01
−0.04 1 −0.004
( 2)
=
0.1 ( 3)
=
0.01
f x ( 2)
( )
= 0.072 ¿?
x ; x →
−0.04 −0.004 ( 3)
( )
f x = 0.0072
¡Sigan!
Una variable a la vez - Ejemplo
( )
x2 ( )
x1
( )
x0
Métodos basados en el gradiente
• Los métodos directo requieren solo valores de la función objetivo
para avanzar hacia la solución.
• Los métodos directos son importantes, porque muy a menudo, en
un problema práctico de ingeniería, esta es la única información
confiable disponible.
• Por otro lado, incluso los mejores métodos directos pueden
requerir un número excesivo de evaluaciones de la función para
localizar la solución.
• El ítem anterior, combinado con el deseo natural de buscar
puntos críticos, motiva a considerar métodos que emplean
información del gradiente.
• Se supone en todo momento que f ( x ) , f ( x ) y 2 f ( x ) existen y son
continuas.
Métodos basados en el gradiente
• Todos los métodos que se presentaremos emplean un
procedimiento de iteración similar, el nuevo punto se obtiene a
partir de una dirección de búsqueda:
+ k s ( x( k ) )
( k +1) (k )
x =x
(k )
x : Estimación actual de x *
k : Tamaño del salto
s ( x ( k ) ) : Dirección de busqueda en el espacio n
(
f x, x
(k )
) = f x ( )
(k )
+(x − x )
(k ) T
f x k( )( )
(
f x
( k +1)
,x
(k )
) = f (x )+(x
(k ) ( k +1)
−x )
(k ) T
f x ( )
(k )
f x ( ( k +1)
) ( )
−f x
(k )
= (x ( k +1)
−x )
(k ) T
( )
f x k
( )
+ s(x ) (x ) = s(x )
( k +1) (k ) (k ) T (k ) T
x =x k (k ) ( k +1)
−x
k
( )− f (x ) = s(x ) ( ) ( ) cos
s ( x ( k ) ) f x k
( )
( k +1) (k ) (k ) T (k )
f x k
f x
• Analizando, proponemos la siguiente dirección:
s ( x ( k ) ) = −f x k ( ) ( )
Método del descenso mas pronunciado
• Luego, reemplazando la dirección propuesta:
( ) − f ( x ) = − f ( x ) f ( x )
f x
( k +1) (k ) k (k ) T (k )
f (x ) − f ( x ) = − f ( x )
2
( k +1) (k ) k (k )
− f ( x ( k ) )
( k +1) (k )
x =x
• Esto tiene dos desventajas: la necesidad de hacer una elección
adecuada para y la lentitud inherente cerca del mínimo debido a
que en esta zona el gradiente tiende a cero.
Método del descenso mas pronunciado
− f ( x ( k ) )
( k +1) (k ) (k )
x =x
• Por lo tanto, en cada iteración se debe resolver el siguiente
problema de optimización unidimensional:
Ejemplo: Min. f ( x ) = x1 + x2 − 11 ( ) + ( x1 + x2 − 7)
2 2 2 2
2 ( x12 + x2 − 11) ( 2 x1 ) + 2 ( x1 + x2 2 − 7 )
− f ( x ( k ) )
( k +1) (k )
x =x f ( x ) =
( 1 + − ) ( 1 2 ) 2
+ + − ( )
2 2
2 x x2 11 2 x x 7 2 x
=1
x
(1)
=
44
x2 =
( ) −343150
( ) 2
−
x0 = 20 38830
2
= 10−1
(1) 6.2 ( 2) −74.003
( 0) 2 x = x =
x = 3.8 − 23.181
2
= 10−2
(1) 2.42 ( 2) 2.703
( 0) 2 x = x =
x = 2.18 2.224
2
Min. f ( x ) = ( x1 + x2 − 11) + ( x1 + x2 − 7 )
2 2 2 2
= 10−2
( 0) 2
x =
2
( ) 2.999989
x 33 =
2.000025
tol = 10−5
Método del descenso mas pronunciado
Min. f ( x ) = ( x1 + x2 − 11) + ( x1 + x2 − 7 )
2 2 2 2
2 ( x12 + x2 − 11) ( 2 x1 ) + 2 ( x1 + x2 2 − 7 )
f ( x ) =
2 ( x1 + x2 − 11) + 2 ( x1 + x2 − 7 ) ( 2 x2 )
2 2
( 0) 2
x =
2
= min f ( x
* ( 0)
− f ( x ( 0 ) ) )
x 1 = x 0 − *f ( x ( 0 ) )
( ) ( )
Método del descenso mas pronunciado
( 0) 2
x =
2
( ) 2.999999
x 13 =
2.000002
tol = 10−5
Método del descenso mas pronunciado - Algoritmo
x( ) D ; f ( x ) ; k = 0
0 n
d = −f x ( ( ) k)
* = Min. f ( x ( ) + d )
k
x(
k +1)
= x( ) + * d
k
* d tol
si
no
x* = x (
k +1)
k = k +1
Método de Newton
f ( x ) = f ( x ) + f ( x ) ( x − x )
(k ) 2 (k ) (k )
( ( )
)
f x k +1 = f x k + 2 f x k ( ) ( )
( )( x
( ) ( k +1)
−xk )=0
( )
x k +1 = x k + k s ( x ( k ) ) ( x ( k +1) − x ( k ) ) = k s ( x ( k ) )
( ) ( )
Método de Newton - I
• Reemplazando y asumimos =1:
) = − ( f ( x )) ( )
−1
( )
f x
(k )
+ 2 f x( ) (k )
k s ( x( k ) ) = 0 s ( x
(k ) 2 (k ) ( )
f x k
( ( )) ( )
−1
( k +1) (k ) (k ) ( )
x =x − f x
2
f x k
Método de Newton - I - Ejemplo
(
Ejemplo: Min. f ( x ) = x1 + x2 − 11 ) + ( x1 + x2 − 7)
2 2 2 2
2 ( x12 + x2 − 11) 2 x1 + 2 ( x1 + x2 2 − 7 )
f ( x ) =
2 ( x1 + x2 − 11) + 2 ( x1 + x2 − 7 ) 2 x2
2 2
f ( x) =
2
8 x1
2
+ 4 ( x1 + x2 − 11)
2
+2 4 x1 + 4 x2
4 x1 + 4 x2 2 + 8 x2 + 4 ( x1 + x2 − 7 )
2 2
Método de Newton - I - Ejemplo
2
= 3.584428 −1.848126
(9)
x
( 0) T
x =
2 tol = 10−5
Método de Newton - II
= min f x
*
( (k )
− k
(( )) ( ))
f x
2 (k )
−1
f x k
( )
( f ( x ) ) f ( x )
−1
( k +1) (k ) (k ) (k )
x =x − * 2
Método de Newton - II
x( ) D
0 n
( )
; f ( x ) ; 2 f x k ; k = 0
( )
( ( )) ( )
−1 También puede
(k ) (k )
d =− f x 2
f x resolverse como un SEL
* = Min. f x ( ) + d ( k
)
( k +1) (k )
x =x +*d
* d tol
si
no
x* = x (
k +1)
k = k +1
= 2 2 x = 3 2
( 0) T ( 5) T
x
tol = 10−5
Claves para implementar en Scilab
x1 , x2 , x3 x1 x2 x3
x4
extremo de la parabola que pasa por ( x1 , f ( x1 ) ) , ( x2 , f ( x2 ) ) y ( x3 , f ( x3 ) )
si
x4 − x3 tol x4 extremo
no
x1 = x2 ; x2 = x3 ; x3 = x4
Búsqueda de línea con MIPS
Min. f x ( (i )
+d )
Función a minimizar Solución actual Tamaño del salto Dirección de búsqueda
f: n
→ x( )
i n
d n
x ,d
0 n
1 , 2 , 3
4
extremo de la parabola que pasa por:
( , f ( x
1
0
)) ( (
+ 1 d , 2 , f x + 2 d
0
) ) y ( , f ( x
3
0
+ 3 d ))
si
4 − 3 tol 4 extremo
no
1 = 2 ; 2 = 3 ; 3 = 4
Búsqueda de línea en Scilab con MIPS
function alfa=linesearchMIPS(fun, xk,d,a_0)
x1 = a_0*0.98;
x2 = a_0;
x3 = a_0*1.02;
for i= 1:100
A=[x1^2 x1 1
x2^2 x2 1
x3^2 x3 1 ];
b=[fun(xk + x1*d)
fun(xk + x2*d)
fun(xk + x3*d)];
xx=A\b;
x4=-xx(2)/(2*xx(1));
if norm(x4-x3) < 1e-6
alfa=x4;
break
end
x1=x2; x2=x3; x3=x4;
end
if i==100
alfa=[];
end
endfunction
Método de Newton
x( ) = 0 ; k = 0
0
x(
k +1)
= x( ) −
k ( )
f ' x(
k)
f '' ( x ( ) )
k
x(
k +1)
− x(
k) si
x(
r k +1)
(k ) es un extremo
x
no
k = k +1
Búsqueda de línea con Newton
Min. f x ( (k )
+d )
Función a minimizar Solución actual Tamaño del salto Dirección de búsqueda
→ x( ) d
n i n n
f:
Objetivo de la búsqueda de línea
Método de Newton
x ,d
0 n
( 0)
; k =0
( k +1)
= ( ) −
k (
f ' x +( )d
0 k
)
f '' ( x +( )d )
0 k
( k +1)
−(
k) si
( k +1)
(k )
r es un extremo
no
k = k +1
Búsqueda Lineal en Scilab con Newton
( x( k ) + d )
( )
df
f ' x( ) + d =
k
d
df ( x( k ) + d ) =
f x1 f x2
+ + +
f xn
d x1 x2 xn
df ( x( k ) + d ) f f f
= d1 + d2 + + dn
d x1 x2 xn
(
df x
(k )
+d ) = f
(x )
(k ) T
+d d
d
Búsqueda Lineal en Scilab con Newton
df ( x( k ) + d ) =
f
d1 +
f
d2 + +
f
dn
d x1 x2 xn
d2 f ( x( k ) + d ) 2 f x1
= 2 +
2 f x2
+ +
2 f xn
d1
d 2 x1 x1x2 x1xn
2 f x1 2 f x2 2 f xn
+ + + + d2
x2 x1 x2 x2 xn
2
+
2 f x1 2 f x2 2 f xn
+ + + + dn
xn x1 xn x2 xn
2
Búsqueda Lineal en Scilab con Newton
d2 f ( x( k ) + d ) 2 f 2 f 2 f
= 2 d1 + d2 + + d n d1
d 2 x1 x1x2 x1xn
2 f 2 f 2 f
+ d1 + d2 + + dn d2
x2 x1 x2 x2 xn
2
+
2 f 2 f 2 f
+ d1 + d2 + + dn dn
xn x1 xn x2 xn 2
Búsqueda Lineal en Scilab con Newton
d2 f ( x( k ) + d ) 2 f 2 f 2 f 2 f 2 f 2 f
d 2
= 2 d1 + d2 + + d n d1 + d1 + d2 + + dn d2
1
x x1x 2 x1xn
2 1
x x x2
2
x2 xn
2 f 2 f 2 f
+ + d1 + d2 + + d n dn
n 1
x x x n x2 xn 2
2 f ( x0 ) 2 f ( x0 ) 2 f ( x0 )
d1
x1x1 x1x2 x1xn
2 f ( x0 ) 2 f ( x0 ) 2 f ( x0 )
d2
x2 x1 x2 x2 x2 xn
2 f ( x0 ) 2 f ( x0 ) 2 f ( x0 )
dn
xn x1 xn x2 xn xn
d1 d2 dn
d 2 f
T
( x( k ) + d ) d
Búsqueda Lineal en Scilab con Newton
Min. f ( x ) = ( x1 + x2 − 11) + ( x1 + x2 − 7 )
2 2 2 2
2 ( x12 + x2 − 11) 2 x1 + 2 ( x1 + x2 2 − 7 )
f ( x ) =
2 ( x1 + x2 − 11) + 2 ( x1 + x2 − 7 ) 2 x2
2 2
f ( x) =
2
8 x1
2
+ 4 ( x1 + x2 − 11)
2
+2 4 x1 + 4 x2
4 x1 + 4 x2 2 + 8 x2 + 4 ( x1 + x2 − 7 )
2 2
Ejemplo
function f=fun(x)
f=(x(1)^2 + x(2) - 11)^2 + (x(1)+x(2)^2-7)^2
endfunction
function Gf=gradf(x)
Gf(1,1) = 2*(x(1)^2 + x(2) - 11)*(2*x(1)) + 2*(x(1)+x(2)^2-7)
Gf(2,1) = 2*(x(1)^2 + x(2) - 11) + 2*(x(1)+x(2)^2-7)*(2*x(2))
endfunction
function Hf=hessf(x)
Hf(1,1) = 2*(2*x(1))*(2*x(1)) + 2*(x(1)^2 + x(2) - 11)*(2) + 2
Hf(1,2) = 2*(2*x(1)) + 2*(2*x(2))
Hf(2,1) = 2*(2*x(1)) + 2*(2*x(2))
Hf(2,2) = 2 + 2*(2*x(2))*(2*x(2)) + 2*(x(1)+x(2)^2-7)*(2)
endfunction
Ejemplo
x1=linspace(-5,6,1000);
x2=linspace(-3,4,1000);
for i=1:length(x1)
contour(x1,x2,z,[2 5 10 [Link] 170 180 200 350 500])
for j=1:length(x2)
z(i,j)=fun([x1(i);x2(j)]);
end
end
Ejemplo – 1 variable a la vez
Ejemplo – Descenso mas pronunciado
Ejemplo – Newton
Ejercicio
Min. f ( x ) = (1 − x1 ) + 100 ( x2 − x2 2
)
2
1