Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TEMA 8.
INTRODUCCION A LA OPTIMIZACIÓN
NUMÉRICA
1. Introducción
2. Nomenclatura
3. Optimización multivariable sin restricciones
4. Búsqueda Unidimensional
5. Métodos directos
6. Métodos indirectos de primer orden
7. Métodos indirectos de segundo orden
8. RESUMEN
9. Programacion en Matlab®
Cálculo numérico en Ingeniería
Tema 8: Introducción a la optimización numérica
1. Introducción
Min f ( x, y )
s.a g ( x, y ) ≤ 0
h ( x, y ) = 0
x ∈ X ⊆ ℜn
m
y ∈ {0,1}
Si bien problemas que contenían hasta 100 variables para un NLP eran
considerados problemas grandes hace 10 años. La resolución de problemas con
varios miles de variables es algo bastante común hoy en día. Los métodos de
gradiente reducido y la programación cuadrática sucesiva, los cuales se generan
de aplicar el método de Newton a las condiciones de optimalidad de Kunh-
Tucker, son los principales algoritmos para resolver los NLP. El método de
Cálculo numérico en Ingeniería
En este capítulo, sin embargo, sólo se van a introducir los rudimentos más
básicos de la optimización numérica. En particular se estudiará la optimización
numérica para problemas sin restricciones (o cuyas restricciones pueden ser
resueltas de forma implícita y transferidas a la función objetivo)
Tema 8: Introducción a la optimización numérica
2. Nomenclatura
a, b, c
En el algoritmo simplex flexible: centroide de todos los
B
vértices excepto el que da pero valor de función objetivo.
Función escalar. Generalmente hace referencia a la función
f ( x ) , f ( x, y ) objetivo en un problema de optimización. Puede venir en
función de variables reales (x) o enteras, generalmente
binarias (y).
Primera derivada de la función escalar f respecto de la
f '( x)
variable escalar x
Segunda derivada de la función escalar f respecto de la
f ''( x)
variable escalar x
3− 5
FB Número phi. FB = 1 − ≈ 0.618
2
Fs Uno menos phi.
i , j , k , p, q Índices, significado variable según contexto.
H Matriz hessiana
I Matriz identidad
En búsqueda unidireccional, longitud del intervalo en la etapa
L0 , Lk
inicial y en la etapa k respectivamente.
m Pendiente de una recta
n Número de puntos que forman la figura simplex.
Q Matriz definida positiva
Qmax En el método simplex, peor valor de función objetivo
(desarrollado para minimizar)
Qmin En el método simplex, mejor valor de función objetivo
(desarrollado para minimizar)
*
Q En el método simplex, valor de función objetivo tras reflexión.
En el método simplex, valor de función objetivo tras
Q**
expansión.
En el método simplex, valor de función objetivo tras
Q***
contracción.
k
s Dirección de búsqueda en la etapa k .
Cálculo numérico en Ingeniería
β Parámetro escalar
γr En el método simplex, coeficiente de reflexión.
γe En el método simplex, coeficiente de expansión.
γc En el método simplex, coeficiente de contracción.
λ Longitud de paso en búsqueda unidireccional
ε Tolerancia para la terminación de la búsqueda del óptimo
δ Factor de aceleración en búsqueda unidireccional
µ Longitud de paso en el método de Powell.
· Hace referencia a la norma de un vector o matriz
Tema 8: Introducción a la optimización numérica
3.1. Introducción
T
Encontrar x* = [ x1 , x 2 ,....... x n ] que minimice f ( x1 , x 2 ,.... x n ) ≡ f ( x)
T
(c) Un vector de valores iniciales x 0 = [ x10 , x 20 ,.... x n0 ]
(d) Un criterio de convergencia para la terminación del algoritmo.
Cálculo numérico en Ingeniería
Búsqueda unidireccional
x k +1 = x k + δ 2 k −1
4. Búsqueda Unidimensional:
x k +1 − x *
Lineal ≤c 0≤ c≤1
xk − x *
x k +1 − x *
Orden p p ≤c c > 0; p ≥ 1 (El más rápido en la práctica)
xk − x *
x k +1 − x *
Superlineal lim →0 (Habitualmente rápido)
k →∞ xk − x *
Cálculo numérico en Ingeniería
f '( x k )
x k +1 = x k −
f '' ( x k )
Métodos de secante
f ' ( x k ) + m( x − x k ) = 0
f '( x q ) − f '( x p )
m=
xq − x p
~ f '( x q ) ( x q − x p )
x* = x q −
[ f ' ( x ) − f ' ( x )]
q p
~
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 *) .
k
2
L = L0
k
3
k
1
L = L0
k
2
a b
x y
x+ y y y
=
y x
x+ y =1
1 y
=
y x
3− 5 3− 5
x= = Fs ≈ 0.382 ; y =1− = FB ≈ 0.618
2 2
x1k +1 = a k + FS Lk
x 2k +1 = b k − FS Lk
Nótese en cada nueva iteración uno de los nuevos puntos estará fijo de la
iteración anterior. Así después de k etapas la longitud del intervalo será:
k
Lk = ( 0.618) L0
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 ( x ) = a + bx + cx 2 de tal manera que dicho polinomio pasa exactamente por esos
tres puntos y debe presentar un mínimo en:
~ b
x*= −
2c
f ( x1 ) = a + b x1 + c x12
f ( x2 ) = a + b x 2 + c x 22
f ( x3 ) = a + b x 3 + c x 32
1 ( x 2 − x 3 ) f 1 + ( x 3 − x1 ) f 2 + ( x1 − x 2 ) f 3
2 2 2 2 2 2
~
x* =
2 ( x 2 − x 3 ) f 1 + ( x 3 − x1 ) f 2 + ( x1 − x 2 ) f 3
Tema 8: Introducción a la optimización numérica
con f 1 ≡ f ( x1 ); f 2 ≡ f ( x 2 ); f 3 ≡ f ( x3 )
I .− Si x * cae entre x 2 y x 3
f * < f2
(a ) elegir x 2 , x*, x 3
f * < f3
f * > f2
(b) elegir x1 , x 2 , x *
f * < f3
x1 x2 x* x3 x1 x2 x* x3
Figura 1. Selección de la región a eliminar
5. Métodos directos
2 2 2
(x 1 − x 2 ) = ( x11 − x12 ) + ( x 21 − x 22 ) = a 2
Cálculo numérico en Ingeniería
procediendo de tal manera las distancias entre dos puntos vendrán dadas por
una expresión similar.
2
( ) ( ) = ∑ xij − xik
( )
2 2 2
x1 j − x1k + x2 j + x2 k =a 2 j≠k
i =1
3!
como tenemos tres puntos podemos hacer C23 = = 3 así en dos dimensiones
2 !1!
(3 vértices) podemos definir tres distancias entre vértices (todas ellas iguales).
Por la tanto, especificando un punto base x1 el punto x2 estará localizado en un
punto cualquiera de una circunferencia de radio ‘a’ centrada en x1. Una vez
elegido el punto x2, el punto x3 deberá estar en la intersección entre las
circunferencias de radio ‘a’ centradas en x1 y en x2 respectivamente. Existen dos
posibilidades.
x3
x1
x2
n q q q q p q
Tema 8: Introducción a la optimización numérica
n+1 q q q q q p
Si en lugar del origen se toma cualquier otro punto x1 basta realizar una
traslación.
Se puede encontrar otra serie de puntos, pero este es uno de los más
simples para hallar p y q y la condición de que formen parte de la figura simplex,
se puede aplicar a cada par de puntos; así entre los puntos 1 y 2:
( 0 − p) 2 + ( n − 1)( 0 − q) 2 = a 2
p 2 + ( n − 1) q 2 = a 2
2 2
2 ( p − q ) + ( n − 1) ( q − q ) = a 2
2
2( p − q ) = a 2
Resolviendo el sistema:
a
p=
n 2
( n − 1 + n + 1)
a
q=
n 2
( −1 + n + 1 )
Una vez fijada la figura inicial del simplex, se sigue una búsqueda
secuencial, en la que en cada paso se eliminará un vértice y se incluirá otro
nuevo. (supondremos que queremos minimizar).
Paso 0:
Calcular la función objetivo en cada uno de los puntos (vértices), hallar el
vértice con el valor máximo ‘Qmax’ el vértice con valor mínimo ‘Qmin’ y el
centroide de todos los vértices excepto aquel que ha dado el peor valor:
1 n
x j , B = ∑ xi
n i =1
Cálculo numérico en Ingeniería
Paso 1: Reflexión:
→
Se calcula un nuevo vértice Q * cuyas coordenadas son:
→ →
Q * = ( 1 + γ r ) B − γ r Qmax
donde γ r es el llamado coeficiente de reflexión, una cantidad positiva que
generalmente suele ser la unidad. Realmente lo que hemos hecho ha sido
reflejar el punto con el peor valor respecto del centroide. Las siguientes
figuras lo ilustran para el caso de 2 y 3 variables.
Q*
Reflexión
Q*
Reflexión
B
B
Peor valor
Peor valor
Figura 4.- Reflexión en el algoritmo simplex flexible.
(a) Si Qmin < Q * < Qmax se reemplaza el vértice Qmax por Q*, se recalcula
Qmax y B (centroide) y se vuelve a la etapa 1
→ →
Q ** = γ e Q * + (1 − γ e ) B
donde γe es un coeficiente de expansión, generalmente 2.
Tema 8: Introducción a la optimización numérica
Q**
Q** Q*
Q*
B
Peor valor
Peor Valor
→
Q *** = γ c Q * + (1 − γ c ) B
Q*
Reflexión
Q*
Reflexión Q***
B Q*** Contracción
Contracción
B
Peor Valor
(c1). Cambio todos los vértices excepto Qmin. Se genera una nueva figura
dividiendo a la mitad la distancia de todos los vértices a Qmin.
Mejor valor
Mejor valor
Nuevos vértices
Peor Valor
Figura 7.- Cambio de vértices y reducción de la figura simplex.
Dos direcciones si y sj se dice que son conjugadas una con respecto a la otra si:
Tema 8: Introducción a la optimización numérica
( si ) T Q ( s j ) = 0
( si ) T Q ( s j ) = 0 0 ≤ i ≠ j ≤ n −1
¿Cómo se puede calcular las direcciones conjugadas sin usar derivadas? Este
es un concepto básico que lo referiremos a la siguiente figura. Comenzamos con
el punto x0. Localizamos el punto xa que es el mínimo en una dirección
cualquiera s. Elegimos otro punto cualquiera (distinto del primero) x1. y
localizamos el punto xb que es el mínimo partiendo del punto x1 en la misma
dirección s. Los puntos xa o xb se obtienen minimizando f ( x 0 + λ s) con respecto
a λ. Si f(x) es una función cuadrática:
T
f ( x) = f ( x 0 ) + ∇ T f ( x 0 ) ∆x 0 + 21 ( ∆x 0 ) H( ∆x 0 )
Se puede demostrar que el óptimo cae en la línea que une xa con xb. Sin
embargo esta última afirmación no es válida para otro tipo de funciones.
Cálculo numérico en Ingeniería
x1
xa
x*
xb
x2
Paso 2.- Buscamos el punto particular x 0k para el cual se ha obtenido una mejoría
mayor de la función objetivo respecto al punto anterior x 0k −1. Definimos dos
magnitudes:
[
∆k = f ( x k0−1 ) − f ( x k0 ) ]
0 0
µ =x −x 0 n
Tema 8: Introducción a la optimización numérica
f t 0 = f ( 2 x 0n − x 00 )
Si f t 0 ≥ f ( x 00 ) y/o
(
∆ f ( x 00 ) − f t 0 )
( f ( x ) − 2 f ( x ) + f ) ( f ( x ) − f ( x ) − ∆) ≥
0
0
n
0 0
t 0
0
0
n
2
x20
x00
x10
Los métodos indirectos, en contraste con los métodos descritos en las secciones
previas hacen uso de las derivadas en la determinación de la dirección de
búsqueda. Sin embargo, nuestra clasificación en métodos directos e indirectos,
podría no estar clara del todo debido a la aproximación de las derivadas por
diferencias finitas, lo que estrictamente hablando hace a estos métodos ‘libres de
derivadas’. Una buena dirección de búsqueda debería reducir (para
minimización) la función objetivo, de tal manera que si x0 es el punto inicial y x1
es un nuevo punto:
f ( x1 ) < f ( x 0 )
∇ T f ( x) s < 0
Tema 8: Introducción a la optimización numérica
s k = − ∇f ( x)
x k +1 = x k + ∆x k = x k + λ k s k = x k − λ k ∇f ( x k )
d f d d f ∂ f
=∑ xi ( λ) = ∑ si = s T ∇f
dλ i dλ d xi i ∂ xi
d f
en el paso final de la búsqueda queremos que = 0 y por lo tanto
d xi
s T ∇f ( x k +1 ) = 0 . En la práctica, por lo tanto no es deseable llevar a cabo
suboptimizaciones con demasiada precisión. Mientras que el método del
gradiente puede producir progresos muy satisfactorios en la reducción de f(x) en
la primeras iteraciones tiende a hacerse muy lento en las últimas. Alargando
excesivamente los cálculos.
∂ f ( x)
j = 1, 2, 3...., n
∂ xj
s = −∇f ( x k )
∇ T f ( x1 ) ∇ f ( x1 )
s = − ∇f ( x ) + s
1 1 0
∇T f ( x0 ) ∇ f ( x0 )
( )
s k +1 = −∇f x k +1 +s k
( ) ( )
∇T f x k +1 ∇ f x k +1
∇T f (x k )∇ f (x k )
T
f ( x) ≈ f ( x k ) + ∇ T f ( x k ) ∆x k + 21 ( ∆x k ) H ( x k ) ∆x k
donde H(x) es la matriz Hessiana evaluada en el punto xk. Por lo tanto es posible
tener en cuenta la curvatura de la función en las proximidades del punto de
forma análoga a como se hacía en el método de Newton.
−1
s = − ∇f ( x k ) s = − ∇ 2 f ( x k ) ∇f ( x k )
x* x*
k k
x x
∇f ( x) = ∇f ( x k ) + H ( x k ) ∆x k
o bien
−1
x k +1 − x k = ∆x k = − [ H( x k ) ] ∇f ( x k )
−1
x k +1 − x k = ∆x k = − λ k
[ H( x )]
k
∇f ( x k )
−1
s = −[ H( x k ) ] ∇f ( x k )
opt
∇T f ( x k ) sk
λ =−
( sk ) T H( x k ) sk
H( x k ) ∆x k = − ∇f ( x k )
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
Cálculo numérico en Ingeniería
Marquardt, Levenverg y otros han sugerido que la matriz Hessiana de f(x) puede
ser modificada para obligarla a ser definida positiva y bien condicionada en cada
etapa de búsqueda. El procedimiento consiste en añadir elementos a la diagonal
principal de H(x):
~
H( x) = [ H( x) + β I]
~
donde β es una constante positiva para asegurar que H( x) sea definida positiva
cuando H(x) no lo es. También es posible usar
−1
~ ( )
H x = [ H ( x) + γ I]
-1
∇f ( x) + H( x k ) ∆x k = 0
) −1
x k +1 − x k = − λ k [ H( x k ) ] ∇f ( x k )
) -1
donde [ H( x) ] se conoce en ocasiones como Matriz de dirección y representa
una matriz que es una aproximación de la verdadera inversa de la hessiana.
) -1
Desde este punto de vista si la matriz [ H( x) ] es la identidad el método se
convierte en el de descenso rápido.
)
∇f ( x k +1 ) = ∇f ( x p ) + H( x k +1 − x p )
)
∇f ( x k ) = ∇f ( x p ) + H( x k − x p )
)
∇f ( x k +1 ) − ∇f ( x k ) = H( x k +1 − x k )
Cálculo numérico en Ingeniería
)
Para una función no cuadrática, la matriz H se podría obtener resolviendo las
ecuaciones de la secante en los puntos xk y xk+1
)
H( x k ) ∆x k = ∆g k donde ∆g k ≡ ∇f ( x k +1 ) − ∇f ( x k )
)
una relación equivalente sería . ∆x k = H −1 ( x k ) ∆g k
DFP:
) ) T
) k −1 ( ∆x k ) ( ∆x k )
∆( H ) =
T
−
[
( H k ) −1 ( ∆g k ) ( ∆g k ) T ( H k ) −1 ]
)
( ∆x k ) T ( ∆g k ) ( ∆g k ) T ( H k ) −1 ( ∆g k )
)k k )k k T )
) k ( ∆g − H ∆x ) ( ∆g ) + ∆g ( ∆g − H ∆x )
k T
k k k
( ∆g k − H k ∆x k ) T ∆x k ∆g k ( ∆g k ) T
∆H = −
( ∆g k ) T ( ∆x k ) [
( ∆g k ) T ∆x k ( ∆g k ) T ∆x k ][ ]
BFGS:
) T )
Hk ∆ xk ( ∆ xk ) Hk
T
) k ∆g k ( ∆g k )
∆H = − )
( ∆g k ) T ∆ x k ( ∆ x k ) T H k ∆ x k
) k −1 k ) −1 T ) −1 T
∆( H ) =
[
) k −1 ∆x − ( H ) ∆g
k
]( ∆x )
k T
[
+ ∆x k ∆x k − ( H k ) ∆g k ] − [ ∆x k
− ( H k ) ∆g k ] ∆g ∆x ( ∆x )
k k k T
( ∆g k ) T ∆x k [ ( ∆g )
k T
∆x ] [ ( ∆g ) ∆x ]
k k T k
Tema 8: Introducción a la optimización numérica
8. RESUMEN
RESUMEN
En este capítulo se ha pretendido dar una visión muy general de los métodos de
optimización más utilizados en cálculo numérico. Cualquiera de los métodos
basados en programación matemática: programación lineal no lineal o mixta
tanto lineal como no lineal, requerirían casi un nuevo libro para cada uno de
ellos.
A pesar de todo no hemos querido dejar de presentar al menos los métodos más
utilizados de optimización para problemas sin restricciones, tanto directos –libres
de derivadas- entre los que el método simplex flexible de Nedler y Mead ha sido
el que más se ha popularizado y ha sido y continúa siendo muy utilizado en muy
diversos ámbitos, como indirectos – que usan información de derivadas- entre
los que el método de Newton o los métodos quasi-Newton son sin duda los más
utilizados.
9. Programacion en Matlab®
F1 = (3-sqrt(5))/2;
F2 = 1-F1;
L = x4 - x1;
error = norm(L);
x2 = x1 + F1.*L;
x3 = x1 + F2.*L;
f1 = feval(fun,x1);
f2 = feval(fun,x2);
f3 = feval(fun,x3);
f4 = feval(fun,x4);
if f3 <= f2
L = x4 - x2;
x1 = x2;
f1 = f2;
x2 = x3;
f2 = f3;
x3 = x4 - F1.*L;
f3 = feval(fun, x3);
elseif f2 <= f3
L = x3 - x1;
x4 = x3;
f4 = f3;
x3 = x2;
f3 = f2;
x2 = x1 + F1.*L;
f2 = feval(fun, x2);
end
error = norm(L);
end
x = x1;
obj= f1;
f1 = feval(objfun,x1);
Tema 8: Introducción a la optimización numérica
f2 = feval(objfun,x2);
f3 = feval(objfun,x3);
error =1;
cont = 0;
while error > tol
cont = cont +1;
A= [x1^2, x1, 1; x2^2, x2, 1; x3^2, x3 1];
d= [f1;f2;f3];
coef = inv(A)*d;
a= coef(1);
b= coef(2);
c= coef(3);
xm = -b/(2*a);
fm = feval(objfun, xm);
error = norm(x1-x3,1);
Cálculo numérico en Ingeniería
end
obj = y;
9.3. Ejemplo
Como ejemplo de aplicación veremos como es posible encontrar el óptimo de la
función
x
sin( x) tan En el intervalo [0,3 ].
π
f = inline('-sin(x).*tan(x/pi)');
[x, obj] = golden(f,0,3)
O bien:
x= -0.6828
obj = 2.1472
function [y,x]=simplex(obj,xo)
p = a/(N*2^0.5)*(N-1+(N+1)^0.5);
q = a/(N*2^0.5)*(-1+(N+1)^0.5);
for i=1:N
for j=1:N-1
if i==1
x(i,j)=xo(j);
elseif i==j+1
x(i,j)=xo(j)+p;
else
x(i,j)=xo(j)+q;
end
end
end
for i=1:N
fobj(i)=feval(obj,x(i,:)');
end
MEJOR(2) = min(fobj);
PEOR(2) = max(fobj);
MEJOR(1) = min(find(fobj==MEJOR(2)));
PEOR(1) = min(find(fobj==PEOR(2)));
MEJOR(2) = min(fobj);
PEOR(2) = max(fobj);
MEJOR(1) = min(find(fobj==MEJOR(2)));
PEOR(1) = min(find(fobj==PEOR(2)));
% REFLEXION
%disp('reflexion');
xpeor=x(PEOR(1),:);
xr= xc + (xc-xpeor);
fobjr = feval(obj, xr);
xe= xc + (xc-xpeor)*2;
fobje= feval(obj,xe);
if fobje < fobjr % si la expansión tiene éxito acepto
% movimiento
fobj(PEOR(1))= fobjr;
x(PEOR(1),:)=xr;
end
xco = xc + (xc-xpeor)*0.5;
fobjc = feval(obj,xco);
error=0;
end
y=fobj;