Professional Documents
Culture Documents
Actividad 06 Optimizacin
Nombres: Escriba los nombres y usuarios de los miembros del grupo aqu
Condiciones
Las condiciones para esta actividad son:
La presentacin es en parejas.
Debe incluir este documento de Word (obligatorio) con el contenido del cdigo desarrollado, las
entradas dadas al programa, los resultados obtenidos y sus comentarios personales.
Los archivos de Python .py debe contar con la plantilla suministrada.
Los archivos de Matlab .m debe contar con la plantilla suministrada.
1 Funciones de inters
Funciones generales de inters:
Matlab Python
fminunc scipy.optimize.minimize
fmincon
scipy.optimize.brute
linprog linprog
scipy.optimize.bracket
fminbnd scipy.optimize.minimize_scalar
Referencias
Optimization and root finding (scipy.optimize) http://docs.scipy.org/doc/scipy/reference/optimize.html
http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize_scalar.html
http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.OptimizeResult.html
Si el cigeal de un motor a combustin est en un ngulo desde el TDC (punto muerto) con
=t donde es la velocidad angular y t es el tiempo, la distancia desde el pistn al
extremo de la biela (x) es:
1/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
(2 )
1cos
2
r
x=r ( 1cos ( ) ) +
4l
Wikipedia 2016
a) Encuentre el ngulo donde se maximiza la velocidad si r = 1.0 y l = 5.0 utilizando los siguientes
tres mtodos: 1) implementacin propia del mtodo de bsqueda aurea, 2) funcin de scipy
minimize_scalar con el mtodo golden y 3) funcin de scipy minimize_scalar con el
mtodo brent usado por defecto. Y compare la calidad y cantidad de iteraciones, o
evaluaciones de la funcin que cada uno requiere para encontrar el ptimo.
Algoritmo Resultado
get_ipython().magic('matplotlib notebook') Factor = 0.61803398875
import numpy as np Iteracin 1 x1 = 1.483, x2 = 2.400, f1
= 1.014, f2 = 0.576, error =
import matplotlib.pyplot as plt 3.88322207745
import scipy.optimize as sciop Iteracin 2 x1 = 0.917, x2 = 1.483, f1
= 0.890, f2 = 1.014, error =
def distancia(teta): 2.39996322973
r=1. Iteracin 3 x1 = 1.483, x2 = 1.833, f1
l=5. = 1.014, f2 = 0.916, error =
1.48325884772
return r*(1.-np.cos(teta))+(r**2/4.*l)*(1.-
Iteracin 4 x1 = 1.267, x2 = 1.483, f1
np.cos(2.*teta)) = 1.011, f2 = 1.014, error =
def velocidad(teta): 0.916704382006
r=1. Iteracin 5 x1 = 1.483, x2 = 1.617, f1
l=5. = 1.014, f2 = 0.990, error =
return r*np.sin(teta) + ((r**2/ 0.566554465716
(4.*l))*(2*np.sin(2*teta))) Iteracin 6 x1 = 1.401, x2 = 1.483, f1
= 1.019, f2 = 1.014, error =
0.35014991629
def funcion_para_max(teta): Iteracin 7 x1 = 1.350, x2 = 1.401, f1
return -velocidad(teta) = 1.018, f2 = 1.019, error =
0.216404549425
tetamin = 0 Iteracin 8 x1 = 1.401, x2 = 1.432, f1
tetamax = 2*np.pi = 1.019, f2 = 1.018, error =
0.133745366865
xspace = np.linspace(tetamin, tetamax) Iteracin 9 x1 = 1.381, x2 = 1.401, f1
2/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
errorx = intervalo
4/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
solucionbrent=sciop.minimize_scalar(funcion,
method='brent')
print solucionbrent
print'la solucion en grados es : Resultado maximizando
{:.2f}'.format(solucionbrent.x*180/np.pi) fun: -2.0
nfev: 9
nit: 8
success: True
import numpy as np x: 3.1415926538517991
import matplotlib.pyplot as plt la solucion en grados es :180.00
import scipy.optimize as sciop
def derivadafuncion(x):
r=1.
l=5.
return -r*np.sin(teta) + ((r**2/
(4.*l))*(2*np.sin(2*teta)))
solucionbrent=sciop.minimize_scalar(distancia
, method='brent')
print solucionbrent
x=solucionbrent.x
sol1=1.*(1.-np.cos(x))+(1./20.)*(1.-
np.cos(2.*x))
print sol1
def funcion(x):
return -1.*(1.-np.cos(x))+(1./20.)*(1.-
np.cos(2.*x))
solucionbrent=sciop.minimize_scalar(funcion,
method='brent')
print solucionbrent
print'la solucion en grados es :
{:.2f}'.format(solucionbrent.x*180/np.pi)
solucionbrent=sciop.minimize_scalar(distancia
, method='brent')
print solucionbrent
x=solucionbrent.x
sol1=1.*(1.-np.cos(x))+(1./20.)*(1.-
np.cos(2.*x))
print'la solucion utilizando el x anterior es:
{:.2f}'.format(sol1)
f ( x 1 , x 2 , x 3 ) =x 21x 22 +2 x 1 x2 x23 +6 x 1 x 3 + 4 x1 5 x 3 +2
X
f
b) Encuentre la relacin que existe entre la matriz A, el vector B de la forma matricial y la matriz
Hessiana y el vector gradiente de la funcin f ( x 1 , x 2 , x 3 )
6/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
c) Con base en la informacin obtenida antes escriba una funcin en Python que reciba cuatro
parmetros correspondientes a:
Vector X
Matriz A
Vector B
Escalar C
Y retorne el valor de f
e) Utilizando la funcin construida antes encuentre utilizando las funciones de Python los puntos
crticos que minimizan o maximizan la funcin.
Una estructura compuesta por dos barras metlicas est dispuesta como se muestra en la siguiente
figura
7/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
(Rao 2009)
En estas condiciones la energa potencial de la estructura puede ser calculada con la expresin
2 2
EA l EA h 2
8 f ( x 1 , x 2 )=
s 2s ( )
x 21 + ()
x P x1 cos ( ) P x 2 sin ( )
s s 2
Donde E es el mdulo de Young, A es el rea transversal de cada elemento, l (ele) la longitud de la
estructura, s la longitud de cada elemento, h la altura de la estructura, P la carga aplicada, el
ngulo de aplicacin de la carga y x 1 y x 2 los desplazamientos del punto de aplicacin desde la
posicin libre.
E = 207x109 Pa
A = 10-5 m2
l (ele) = 1.5 m
h = 4.0 m
P = 104 N
= 30
Utilice los siguientes tres mtodos: 1) implementacin propia del mtodo de mximo descenso,
2) funcin de scipy minimize con el mtodo BFGS con los parmetros por defectos y 3)
funcin de scipy minimize con el mtodo BFGS asignado el argumento jac. Compare sus
resultados prestando atencin a la cantidad de evaluaciones y de iteraciones realizadas.
Algoritmo Resultado
import numpy as np semilla:
8/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
def hessianaep(v):
x1 = v[0]
x2 = v[1]
E = 207*10**9
A = 10**(-5)
l = 1.5
h = 4.
P = 10**4
t = np.pi/6
s = 4.07
df2dx2 = (E*A/s)*((l/2*s)**2)*2
9/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
df2dxdy = 0
df2dydx = df2dxdy
df2dy2 = (E*A/s)*((h/s)**2)*2
return np.array([[df2dx2,df2dxdy],
[df2dydx,df2dy2]])
x0 = 0.
y0 = 0.
semilla = np.array([x0,y0])
hess = hessianaep(sol)
#print u'hessiana:\n{}'.format(hess)
semilla = np.array([2,3])
solucionminimize =
minimize(funcion_para_minimize, semilla)
print solucionminimize
semilla = np.array([2,3])
solucionbfgs =
minimize(funcion_para_minimize, semilla,jac
= gradienteep)
print solucionbfgs
10/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
b) Confirme los resultados obtenidos antes haciendo una grfica de curvas de igual energa
potencial en funcin de los valores de los desplazamientos
Algoritmo curva de nivel Resultado
import numpy as np
import matplotlib.pyplot as plt
def funcionep(x1,x2):
E = 207*10**9
A = 10**(-5)
l = 1.5
h = 4.
P = 10**4
t = np.pi/6
s = 4.07
return (E*A/s)*((l/2*s)**2)*x1**2 +
(E*A/s)*((h/s)**2)*x2**2 - P*x1 * np.cos(t) -
P*x2*np.sin(t)
x1=np.linspace(-4.,4.)
x2=np.linspace(-4.,4.)
X1,X2 = np.meshgrid(x1, x2)
plt.figure()
plt.contourf(X1,X2,funcionep(X1,X2))
plt.show()
import numpy as np
from scipy.optimize import minimize
11/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
def s(x,y):
return -x*y
def funcion_para_minimize(v): #vector con valor de x y y
x= v[0]
y= v[1]
return s(x,y)
semilla=np.array([0,0])
print funcion_para_minimize(semilla)
solucion=minimize(funcion_para_minimize,semilla) #paquete, fun(cuanto vale la funcion minimizada), jac(gradiente
debe ser 0)
print solucion
semilla=np.array([1,1])
print funcion_para_max(semilla)
solucion=minimize(funcion_para_max,semilla) #paquete, fun(cuanto vale la funcion minimizada), jac(gradiente
debe ser 0)
print solucion
def restriccion1(v):
x = v[0]
y = v[1]
return (x-40)*(y-50)-5*10**4.
diccionario_restricciones=({'type':'eq',
'fun':restriccion1}, {'type':'eq',
'fun': lambda v: v[1]-v[0]})
solucion= minimize(funcion_para_minimize,semilla
,constraints=diccionario_restricciones)
12/13
Universidad del Norte Soluciones Computacionales a
Divisin de Ingenieras Problemas en Ingeniera
Departamento de Ingeniera de Augusto Sisa
Sistemas Segundo Semestre 2016
13/13