Optimización
Optimización
Búsqueda del mínimo o del máximo de una función
Una estrategia para buscar el mínimo o el máximo de una función es buscar la raíz de su derivada
Problemas de optimización en ingeniería
Ejemplo: optimización del costo de un paracaídas
Altura de caída: 500m
Velocidad crítica de impacto: 20 m/s
Area de tela:
16 cuerdas de longitud:
Fuerza de arrastre:
Masa de cada paquete:
Costo por paracaídas:
A=2 r2
L=2 r
c=k c A
m=M t /n
c0c1 Lc2 A2
Ejemplo: optimización del costo de un paracaídas
Función objetivo: minimizar
Sujeta a:
Variables de diseño: r y n
Problema de optimización multidimensional no lineal restringido
C=n (c0+c1 L+c2 A2 )v≤vc
n≥1 ∧ n∈ℤ
Problemas de optimización: definición
Determinar x que minimiza o maximiza f(x) sujeto a:
d i x ≤ai , i=1,2 , ... , mei(x)=bi , i=1,2,. .. , p
Problemas de optimización: clasificación
● f(x) y las restricciones son lineales: problema de programación lineal
● f(x) es cuadrática y las restricciones son lineales: problema de programación cuadrática
● f(x) no es lineal ni cuadrática y/o las restricciones no son lineales: problema de programación no lineal
Orientación
Optimización 1D no restringida
Métodos:● De la sección dorada (sección áurea)● Interpolación cuadrática● de Newton
Sección áureaSe cumple que:
l0=l1+l2
l1
l0
=l2
l1
Reemplazando, tomando el recíproco y definiendo:
R=l2
l1
se llega a R2+R−1=0
cuya raíz positiva es R=5−12
=0.61803...Razón áurea
Algoritmo de la sección aúrea
d=R(xu−xl)
x1=x l+d
x2=xu−d
Paso 1: elegir intervalo [xl , x
u] donde haya un extremo local de f(x)
Paso 2: calcular los puntos interiores x1 y x
2
Paso 3: ciclo iterativo hasta cumplir εa<εs
Algoritmo de la sección aúreaPaso 3: Si f(x
1) > f(x
2) Si f(x
2) > f(x
1)
xl x2
x2 x1
xu x1
x1 x2
Sección áurea
Cota del error
Al finalizar una iteración, el óptimo se ecuentra en alguno de los intervalos:
xl , x2, x1 x2, x1, xu
En el intervalo superior, los errores máximos son: xa=x1−x2=...=2 R−1 xu−x l≈0.236 xu−x l
xb=xu−x1=...=1−R xu−x l≈0.382 xu−x l
con lo cualεa=(1−R)|xu−x l
xopt|100 %
Ejemplo 13.1 pag. 368
Encontrar el máximo de
f x =2 sin x−x2
10, x∈[0 ; 4 ]
En la primera iteración,
x l=0 ; xu=4 d=5−12
4−0=2.472
x1=x ld=2.472 ; x2=xu−d=1.528
f x1= f 2.472=0.63 ; f x2= f 1.528=1.765
Ejemplo 13.1 pag. 368
● Planilla de cálculo: aurea.ods● Código en Octave: aurea.m● Código en Python: aurea.py
Sección áurea: Pseudocódigo
iniciar xl; xu // Paso 1iniciar iter=0; imax; esdefinir Rdefinir funcion f d = R*(xuxl) // Paso 2x1 = xl + d; x2 = xu df1 = f(x1); f2 = f(x2)repetir:
si f1 > f2: // Paso 3xopt = x1; ea = (1R)*abs((xuxl)/xopt)*100xl = x2; x2 = x1; x1 = xl + d*Rf2 = f1; f1 = f(x1)
en caso contrario:xopt = x2; ea = (1R)*abs((xuxl)/xopt)*100xu = x1; x1 = x2; x2 = xu d*Rf1 = f2; f2 = f(x2)
iter = iter + 1 d = d*R // valor d para iteracion siguiente
hasta que (ea<es or iter>=imax) mostrar xopt
Interpolación cuadrática● Evalúa la expresión
f x =a x2b xc
en los puntos
[ x0 ; f x0]
[ x1 ; f x1]
[ x2 ; f x2]
obteniendo a x02b x0c= f x0
a x12b x1c= f x1
a x22b x2c= f x2
Interpolación cuadrática
● Resolviendo para a, b, c
Interpolación cuadrática
Recordando que el vértice de una parábola se encuentra en
x3=−b
2 ay reemplazando,
x3=f x0 x1
2−x22 f x1 x2
2−x02 f x2x0
2−x12
2 f x0 x1−x22 f x1 x2−x02 f x2 x0−x1
Interpolación cuadrática
En la próxima iteración se elimina:
six0 x1≤ x3 six2 x3< x1
x0 x1 x2 x0 x1 x2próximaiteración
Interpolación cuadrática: Pseudocódigo
iniciar x0; x1; x2 iniciar iter=0; imax; esdefinir funcion f x3Ant = x2f0 = f(x0); f1 = f(x1); f2 = f(x2)repetir: x3 = (f0*(x1^2x2^2) + f1*(x2^2x0^2) + f2*(x0^2x1^2)) / ... (2*(f0*(x1x2) + f1*(x2x0) + f2*(x0x1)) )
si x3 < x1: x2 = x1
f2 = f1 en caso contrario: x0 = x1
f0 = f1 x1 = x3
f1 = f3 si x3 != 0: ea = abs((x3x3Ant)/x3)*100 iter = iter + 1 x3Ant = x3 hasta que (ea<es or iter>=imax) mostrar x3
Ejemplo 13.2, pag. 372
Obtener el máximo de f x =2 sin x−x2
10, x∈[0 ; 4 ]
Con los valores iniciales x0=0 , x1=1 , x2=4
Se evalúa la función
f x0=0 , f x1=1.5829 , f x2=−3.1136
x3=012−421.582942−02−3.113602−12
2 01−421.58294−02−3.11360−1=1.5055
f 1.5055=1.7691
Ejemplo 13.2, pag. 372
● Planilla de cálculo: cuadratica.ods● Código en Python:
-módulo cuadratica.py
-programa principal ejemploCuadratica.py
Método de Newton
Se basa en el método de Newton-Raphson de búsqueda de raíces:
x i1=x i−f xi
f ' xi
Para encontrar el máximo o el mínimo busca la raíz de la primera derivada:
xi+1=xi−f ' (xi)
f ' ' (x i)
Método de Newton: Pseudocódigo
iniciar xant, iter=0, imax, es definir funcion fdefinir funcion dfdefinir funcion d2frepetir: xopt = xant df(xant)/d2f(xant) si xopt != 0: ea = abs((xopt xant)/xopt)*100 iter = iter + 1 xant = xopt hasta que (ea<es or iter>=imax)mostrar xopt
Ejemplo 13.3, pag.373
Obtener el máximo de f x =2 sin x−x2
10, x∈[0 ; 4 ]
Sus derivadas:
f ' x =2 cos x−x5
, f ' ' x =−2 sin x−15
Tomando como valor inicial x0 = 2.5,
x1=2.5−2 cos 2.5−2.5 /5−2sin 2.5−1/5
=0.99508
● Planilla de cálculo: newton.ods● Código en Python: newton.py
Problemas 13.1 a 13.21
Optimización multidimensional no restringida
● Métodos● Directos● De gradiente
Métodos directos
● Búsqueda por malla* (algoritmo de fuerza bruta) – problema 14.10
Búsqueda por malla: Pseudocódigo
iniciar xl; xu; yl; yu; dx; dyiniciar opt = Infdefinir funcion f
repetir para x desde xl hasta xu cada dx:repetir para y desde yl hasta yu cada dy:
f = f(x,y)si f > opt:
opt = f; xopt = x; yopt = ymostrar xopt, yopt, opt
Problema 14.10Hallar el máximo de
f (x , y)=y−x−2 x2−2 x y−y2 , x∈[−2 ; 2 ] , y∈[1 ;3]
Gráfica en Octave (GNUPlot)x=[2:0.1:2]; y = [1:0.1:3];[X Y] = meshgrid(x,y);f = YX2*X.^22*X.*YY.^2;surfc(X,Y,f)
Gráfica en Python
(Matplotlib)
grafico14_10.py
Problema 14.10 ● Código en Octave: fuerzabruta.m● Código en Python: fuerzabruta.py
Métodos directos
● Búsqueda aleatoria (método de Monte Carlo)
x=x l xu−x lry=ylyu−y lr
donde r es un número aleatorio uniformemente distribuido entre 0 y 1
Se evalúan puntos de coordenadas aleatorias:
Búsqueda aleatoria: Pseudocódigo
iniciar xl; xu; yl; yu; nPuntosiniciar opt = Infdefinir funcion fdefinir funcion r # funcion para obtener numero aleatorio [0;1)
rangoX = xu – xl; rangoY = yu ylrepetir para i dede 1 hasta nPuntos:
x = xl + rangoX * ry = yl + rangoY * rf = f(x,y)si f > opt:
opt = f; xopt = x; yopt = y mostrar xopt, yopt, opt
Ejemplo 14.1
Hallar el máximo de
f x , y=y−x−2 x2−2 x y−y2 , x∈[−2 ;2 ] , y∈[1 ;3]Las coordenadas de cada punto se determinan por:
x=...=−24 ry=...=12 r
● Código en Octave: montecarlo.m● Código en Python: montecarlo.py
Búsqueda univariada
Búsqueda univariada
Hallar el máximo de
f x , y=y−x−2 x2−2 x y−y2 , x∈[−2 ;2 ] , y∈[1 ;3]
comenzando en x = 1, y = 3
Si y = 3,
Devuelve (por sección áurea) xóptimo: 1.75 en 25 iteraciones. Ahora x = 1.75
Devuelve yóptimo = 2.25 en 23 iteraciones
f (x)=3−x−2 x2−2 x 3−32=−2 x2−7 x−6
f (y)=y−(−1.75)−2 (−1.75)2−2 (−1.75) y−y2=−y2+4.5 y−4.375
Búsqueda univariadaAsí se sigue y se obtiene (con es = 0.0001)
xóptimo : 1.0001
yóptimo : 1.5001
fmáximo : 1.2500
en 836 iteraciones. (100 veces menos que la fuerza bruta!)
Código en Octave: univariada.m
Código en Python: univariada.py
Búsquedas patrón
Direcciones conjugadas:● 1-2 (o 3-4 ; 5-6) y 2-4● 2-3 (o 4-5 ; 6-7) y 1-3
Direcciones patrón:● 1-3● 2-4
Direcciones conjugadas:● 0-1 (o 0'-2) y 1-2
Direcciones patrón:● 1-2
Método de Powell
Métodos con gradiente
Conceptos de Análisis Matemático:● Derivada direccional
● Gradiente
g ' 0=∂ f∂ x
cos∂ f∂ y
sin
g ' 0=∇ f⋅n
∇ f=∂ f∂ x
i∂ f∂ y
j
Métodos con gradiente
Método de máxima inclinación
● Ascenso de máxima inclinación: h arbitrario
● Ascenso optimal de máxima inclinación: h óptimo
Gradiente
Incremento (decremento) de la función
x=x0∂ f∂ x
h
y=y0∂ f∂ y
h
Ejemplos 14.3 y 14.4 pag. 390
Hallar el máximo de
partiendo de
f ( x , y)=2 x y+2 x−x2−2 y2
x0=−1 , y0=1
∂ f∂ x=2 y2−2 x ⇒ ∂ f
∂ x x=−1y=1
=...=6
∂ f∂ y=2 x−4 y ⇒ ∂ f
∂ y x=−1y=1
=...=−6
∇ f=6 i−6 j
f x0∂ f∂ x
h , y0∂ f∂ y
h = f −16 h ,1−6 h=...=−180 h272 h−7
Ejemplos 14.3 y 14.4 pag. 390
El óptimo se calcula como
g ' h *=−360 h *72=0 ⇒ h*=0.2Las nuevas coordenadas,
x=−16 0.2 =0.2 ; y 0 1−6 0.2=−0.2
∂ f∂ x=2 −0.22−20.2=1.2
∂ f∂ y=2 0.2−4 −0.2=1.2
∇ f=1.2 i1.2 jx=0.21.2 hy=−0.21.2 h
Ejemplos 14.3 y 14.4 pag. 390
sustituyendo,
f 0.21.2 h ,−0.21.2 h=gh=...=−1.44 h22.88 h0.2
Cuyo óptimo es,g ' h*=−2.88 h2.88=0 ⇒ h*=1
x=0.21.2 1=1.4y=−0.21.2 1=1
Converge a la solución analítica:
x = 2
y = 1
Problemas 14.1 a 14.12 pag. 396
Estudio de casos
1) Diseño de un tanque con el menor costo
Parámetros
V 0=0.8 m3
t=3cm
=8000kgm3
Lmáx=2 m
Dmáx=1mcm=4.5$ /kg
cw=20 $ /m Variables de diseño: V y D
Diseño de un tanque con el menor costo
Problema: minimizar FO (costo):
C=cm mcw lw
donde
V cil=L [ D2 t 2
−D22
] V tapa= D2 t 2
t
m= V cil2V tapa lw=2 [2 D2 t 2D2 ]=4Dt
D2 L4
=V 0 ⇒ L=4V 0
D2 ⇒ Lmáx=40.8 1 m2
=1.0186
Diseño de un tanque con el menor costo
Problema de optimización 1D (D) restringida (..?)
● Código en Octave: p16_1.m
Máxima transferencia de potencia en un circuito
Ra : potenciómetro
Parámetros
Según las leyes de Kirchhoff:
V=80 V R1=8
R2=12 R3=10
P Ra=[ V R3 Ra
R1RaR2R3R3 RaR3 R2 ]2
Ra
Máxima transferencia de potencia en un circuito
Realizar un análisis de sensibilidad que muestre cómo varía la máxima potencia conforme V varía entre 45 a 105 V.● Código en Octave: p16_3.m
Problemas 16.1 a 16.29, pag. 440
Top Related