Sie sind auf Seite 1von 5

PRACTICAS DE OPTIMIZACIN

1.- Optimizacin escalar.


El objetivo es optimizar funciones de una sola variable, con la toolbox de Optimization
de MATLAB con el siguiente formato:
[X,fval,flag,output] = fminbnd (funcion,x1,x2).
Donde funcion = es la funcin a optimizar entre comillas y x1 y x2 definen el
intervalo de bsqueda del mnimo.
La funcin tambin puede ser una funcin inline: f = inline('funcin a optimizar');
o se puede crear una funcin de Matlab en un fichero *.m de la forma:
function f = afun(x)
f = funcin a optimizar;
y la llamada a la funcin a optimizar en este caso ser:
[X,fval,flag,output] = fminbnd (afun,x1,x2).
La funcin fminbnd devuelve el punto ptimo de la funcin (x), el valor de la funcin en
ese punto (feval), un flag para decirnos si la optimizacin ha ido bien (flag=1) o si ha
ido mal (flag=0), y en output me devuelve el algoritmo de optimizacin utilizado, y el
nmero de iteraciones realizadas para alcanzar el ptimo.
y(x) = 4x3 + 2x2 - 6x 1 en el intervalo [0,20]
y(x) =(sen(x) + sen(x/5)) * e x /10 en los intervalos: [0, 40] y
[20,40]. Comenta los resultados.
Minimizar las funciones:

2.- Optimizacin vectorial.


a) En MATLAB existen 2 funciones distintas para optimizar una funcin de varias
variables: fminunc, fminsearch.
1.- El prototipo de las funciones es:
[X, options] = fminunc (funcion, x0, options).
Se pueden elegir tres mtodos de optimizacin: DFP: Davidon-Fletcher-Powell, BFGS:
Boyden, Fletcher, Goldfarb y Shannon y el descenso ms pronunciado. Para elegir cada
uno de estos mtodos tenemos que hacer lo siguiente:
Options= optimset(LargeScale, off, Hessupdate, valor)
Donde valor= dfp, bfgs, o steepdesc, respectivamente.

2.- El prototipo de la siguiente funcin es:


[X,fval,flag,output] = fminsearch (funcion, x0)
Esta funcin implementa el mtodo del Simplex deformado.
Calcular el mnimo de las funciones:

x 2 y2
F(x,y) = x * e
f (x,y ) = 4x2 + 2y2 + 2xy + 2y +1

con los distintos mtodos y comparar los resultados (respecto al numero de iteraciones
necesarias para obtener el mnimo, a dicho valor, y al valor de la funcin en el mnimo).

b) Calcular el mnimo de ambas funciones aplicando algoritmos genticos monoobjetivo.


c) Comparar resultados entre los algoritmos genticos y los mtodos matemticos.

3.- Optimizacin con restricciones.

En MATLAB se utiliza la funcin fmincon, y para poder utilizar esta herramienta es


necesario que las restricciones estn dadas con el formato: restriccin 0.
Minimizar:
Sujeto a:

f(x)
Ax b
C*x c

(restricciones no lineales)

[x,fval,flag,output] = fmincon(fun, x0, A, b, Aeq, beq, vlb, vub, nonlcon)


donde x0 es el valor inicial, A y b se refieren a las restricciones de desigualdad lineales,
Aeq y beq: se refieren a las restricciones de igualdad, es decir: Aeq*x = beq, vlb es un
vector con los valores mnimos de las variables y vub con los valores mximos, y
nonlcon se refiere a las restricciones no lineales, tanto de desigualdad como de igualdad.
Cuando un parmetro de la funcin no existe se debe colocar en su lugar [].
Para definir las restricciones no lineales, se hace de la misma forma que la funcin
objetivo, es decir, nonlcon puede ser las restricciones no lineales entre comillas, pueden
ser funciones inline o pueden ser una funcion de Matlab escrita en fichero *.m
Esta funcin puede utilizar el mtodo SQP (programacin cuadrtica secuencial) para
resolver el problema, o puede utilizar mtodos de punto interior (en concreto, funciones
de penalizacin de tipo logartmico). El mtodo que se utiliza por defecto es el mtodo
SQP, si queremos resolver el problema mediante los mtodos de punto interior hay que
ponerlo en el sistema de la siguiente forma:
Options=optimset(Algorithm,interior-point);
[x,fval,flag,output] = fmincon(fun, x0, A, b, Aeq, beq, vlb, vub, nonlcon, options)

f(x,y) = 4x2 + 2y2 + 2xy + 2y +1


g1(x,y) = 1.5 + xy x- y 0
g2(x,y) = xy + 10 0

a).- Calcular el mnimo de la funcin :


sujeto a las restricciones:

b).- Calcular el mnimo de la funcin del apartado anterior, sometido a las mismas
restricciones pero adems, las variables deben encontrarse entre ciertos lmites:
0 x 10

0 y 10

c).- Con la funcin fmincon, tambin se puede introducir el gradiente analtico de la


funcin y de las restricciones no lineales y as no habra que calcularle numricamente.
En este caso debemos definir en el fichero *.m donde hemos definido la funcin,
tambin la derivada de la funcin, por ejemplo:
function [f,g]= myfun(x)
f = sin(x) + 3;
g = cos(x);
lo mismo para las restricciones no-lineales:
function [c,dc]=nonlcon(x)
aqu definimos las restricciones;
aqu definimos sus derivadas;
y despus poner en las opciones que tiene la funcin por defecto, que a la funcin
fmincon se le pasan dos argumentos, la funcin y su derivada y que a las restricciones
no lineales se pasan dos argumentos, las restriciones y sus derivadas de la siguiente
forma:
options = optimset('GradObj','on');
options = optimset(options,GradConstr,on);
[x,fval,flag,output] = fmincon(myfun, x0, A, b, Aeq, beq, vlb, vub, nonlcon, options)
Probar este caso con la funcin y las restricciones del apartado a), y sin lmites en las
variables. Comparar los resultados.
d).- Tambin se pueden introducir restricciones de igualdad.
Minimizar la funcin:
sujeto a las restricciones:

f(x,y) = 4x2 + 2y2 + 2xy + 2y +1


g1(x,y) = 1.5 + xy x- y 0
g2(x,y) = xy + 10 0
h(x,y) = x + y = 0.

Resolver los problemas a,b,c y d con los dos mtodos posibles, SQP y punto interior.
e).- Resolver el problema a) mediante algoritmos genticos multi-objetivo.
d) .- Comparar resultados.

4.- Problema de diseo

Un estudio indica que al consumidor le gusta beber sobre 0.5 litros de refresco de una
vez en verano. El coste de fabricacin de una lata de refresco es proporcional al rea y
puede estimarse en 1 por m2 de material. Debido a restricciones tcnicas lo ms
aconsejable es fabricarlas de seccin circular. Por razones estticas, la altura debe ser al
menos el doble del dimetro. Diversos estudios indican que el mayor confort de
sujecin se da para un dimetro entre 6 y 9cm y una altura entre 5 y 20 cm. Minimizar
el coste de fabricacin de la lata.
Plantearlo y resolverlo.

5.- Programacin lineal.

El prototipo de la funcin de MATLAB que resuelve un problema de programacin no


lineal expresado de la forma:
Minimizar:
Sujeto a:
es:

f(x)
Ax b
[x,feval,flag,output] = linprog (f, A, b, Aeq, beq, vlb, vub, x0)

donde x0 es el valor inicial, Aeq y beq: se refieren a las restricciones de igualdad, es


decir: Aeq*x = beq, vlb es un vector con los valores mnimos de las variables y vub con
los valores mximos.
Como siempre se pueden utilizar varios algoritmos para resolver el problema, pero
nosotros queremos resolverlo con el mtodo del simples visto en clase para eso lo que
tenemos que poner es:
options=optimset('LargeScale','off','Simplex','on'
[x,feval,flag,output] = linprog (f, A, b, Aeq, beq, vlb, vub, x0, options)
a).- Una cooperativa agrcola tiene vacas y ovejas. En los establos hay 50 plazas para
vacas y sin lmite para ovejas. Posee 72 acres de pasto, y se necesita 1 acre por cada
vaca y 0.2 acres por cada oveja a fin de mantenerlas. El personal de la cooperativa
puede dedicar al cuidado de los animales hasta 10.000 horas de trabajo al ao y se sabe
que una vaca requiere 150 horas anuales de cuidados mientras que una oveja slo
necesita 25. Cada vaca deja un beneficio de 250 y cada oveja de 45 Cuntas vacas y
cuantas ovejas debe poseer la cooperativa para alcanzar el mximo beneficio al ao?
b).- Resolver el problema del apartado a, aadiendo los valores superiores de las
variables: 0 x1 40, 0 x2 120.
c) Plantear el problema dual y ver cul es la solucin
d) Si en vez de 10000 horas de trabajo, dedicaran 12000 Cunto variara el beneficio
ptimo? => resolverlo por anlisis de la sensibilidad.

Nota: cuando no hay restricciones de igualdad, Aeq y beq se ponen: [],[], en su sitio
correspondiente.

6.- Programacin cuadrtica.

El prototipo de la funcin de MATLAB que resuelve un problema de programacin


cuadrtica expresada de la forma:
Minimizar: 0.5 * xTCx + dTx
Sujeto a:
Ax b
es:
[x,feval,flag,output] = quadprog (C, d, A, b, Aeq, beq, vlb, vub, x0)
donde x0 es el valor inicial, Aeq y beq: se refieren a las restricciones de igualdad, es
decir: Aeq*x = beq, vlb es un vector con los valores mnimos de las variables y vub con
los valores mximos.
a).- Minimizar la funcin:
Sujeto a las restricciones:

f(x) = x12 + 4x1x2 + 4x22 + 2x2


x1 x2 20
3x1 + 2x2 42
x1 0, x2 0.

b).- Resolver el problema del apartado a, aadiendo los valores superiores de las
variables: 0 x1 30, 0 x2 12.
c).- Resolver el problema del apartado a), con una restriccin de igualdad adicional:
x1 2x2 = 30.
Nota: cuando no hay restricciones de igualdad, Aeq y beq se ponen: [],[], en su sitio
correspondiente.

7.- Programacin.

Programar alguno de los algoritmos de optimizacin vectorial sin restricciones vistos en


teora, (por ejemplo el algoritmo del Simplex deformado) en MATLAB.

Das könnte Ihnen auch gefallen