Está en la página 1de 18

CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

CAPTULO 5 LA FUNCIN fmincon

5.1 EL TOOLBOX DE OPTIMIZACIN DEL PROGRAMA


MatLab

El Toolbox de Optimizacin es una coleccin de funciones que ampla la


capacidad de computacin numrica del programa MatLab. Este conjunto de
funciones logran minimizar o maximizar funciones no lineales generales. Es
decir, al usar la palabra optimizacin en MatLab nos referimos al proceso de
bsqueda del mnimo o mximo de una funcin, denominada comnmente
funcin obtjetivo en las funciones de optimizacin que incluye el Toolbox de
Optimizacin de MatLab. Adems, este Toolbox tambin incluye funciones para
la resolucin de ecuaciones no lineales y problemas de mnimos cuadrados. [3]

Todas las funciones que incluye el Toolbox son ficheros con extensin
.m, construidos con declaraciones de MatLab e implementan algoritmos de
optimizacin especficos. Cada una de las funciones resuelve un tipo
optimizacin, pudiendo encontrar funciones para la resolucin de los siguientes
problemas:

57
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

Minimizacin no lineal sin restricciones.


Minimizacin no lineal con restricciones, incluyendo situaciones de
mnimos-mximos, minimizacin semi-definida, alcanzar determinadas
especificaciones.
Programacin lineal y cuadrtica.
Ajuste de curvas y problemas.
Resolucin de sistemas de ecuaciones no lineales.
Mnimos cuadrados lineales con restricciones.
Problemas de gran escala.

La capacidad y el alcance del Toolbox de Optimizacin de MatLab se


puede ampliar combinando ste con otros toolboxes, o creando nuestros
propios ficheros .m. En las tablas 5.1-1, 5.1-2 y 5.1-3, se muestra una breve
descripcin de cada una de las funciones disponibles en el toolbox, divididas en
tres secciones, segn que problema resuelven, minimizacin de funciones,
resolucin de ecuaciones y mnimos cuadrados (ajuste de curvas).

Tipo y descripcin Notacin Funcin


Minimizacin escalar: encuentra el min a f (a ) fminbond
mnimo de una funcin de una variable.
para a1 < a < a 2
Minimizacin sin restricciones: min x f (x ) fminunc,
encuentra el mnimo de una funcin de donde x es un vector. fminsearch
varias variables sin restricciones.

Programacin lineal: resuelve un T


min x f (x) linprog
problema de programacin lineal.
sujeto a A.x = b, Aeq.x = beq ,
lb = x = ub

A, Aeq son matrices.


f, x, b, beq, lb, ub son
vectores.
Programacin cuadrtica: resuelve un 1 T quadprog
problema de programacin cuadrtica min x x Hx + f T ( x)
como el que se especifica. 2
sujeto a A.x = b, Aeq.x = beq,
lb = x = ub

H, A, Aeq son matrices.


f, x, b, beq, lb, ub son
vectores.
Minimizacin con restricciones: min x f (x ) fmincon
encuentra el mnimo de una funcin no sujeto a c(x)= 0, ceq(x) = 0,
lineal de varias variables con A.x = b, Aeq.x = beq,
restricciones. lb = x = ub

A, Aeq son matrices.


f, x, b, beq, lb, ub son
vectores.
c(x) y ceq(x) son funciones
que devuelven un vector.
c(x), ceq(x) y f(x) pueden ser
funciones no lineales.

Tabla 5.1-1 Funciones de minimizacin

58
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

Tipo y descripcin Notacin Funcin


Alcanzar valores especificados: min x
, fgoalattain
resuelve un problema en el que se tal que F(x)-weight. = goal , y
quieren alcanzar varios objet ivos. sujeto a c(x)= 0, ceq(x) = 0,
A.x = b, Aeq.x = beq, lb = x = ub

Weight, goal, x, b, beq, lb, ub


son vectores.
A, Aeq son matrices.
c(x) y ceq(x) son funciones que
devuelven un vector.
F(x),c(x) y ceq(x) pueden ser
funciones no lineales.
Problema de mnimo-mximo: resuelve min x max{Fi} { Fi(x) } fminimax
un problema de mnimo y mximo.
sujeto a c(x)= 0, ceq(x) = 0,
A.x = b, Aeq.x = beq,
lb = x = ub

A, Aeq son matrices.


x, b, beq, lb, ub son vectores.
c(x) y ceq(x) son funciones que
devuelven un vector.
c(x), ceq(x) y F(x) pueden ser
funciones no lineales.
Minimizacin semi-infinita: encuentra min x f (x ) fseminf
el mnimo de una funcin de varias sujeto a A.x = b, Aeq.x = beq ,
variables con restricciones semi-infinitas. lb = x = ub, y

tal que K1(x, w1) = 0 ;


K2(x, w2) = 0; ; Kn(x, wn) = 0

A, Aeq son matrices.


f, x, b, beq, lb, ub son vectores.
c(x), ceq(x), Ki(x, wi) son
funciones que devuelven un
vector.
f(x), c(x), ceq(x) pueden ser
funciones no lineales.

Los vectores (o matrices)


Ki(x, wi) 0 son funciones
continuas tanto en x como en wi
Las variables wi son vectores
de, como mucho, dimensin
dos.

Tabla 5.1-1 Funciones de minimizacin - continuacin

59
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

Tipo y descripcin Notacin Funcin


Ecuaciones lineales: resuelve un C.x = d, donde C es una matriz \ (slash)
sistema de ecuaciones lineales de n NxN, y d un vector columna con
incgnitas y n ecuaciones. n componentes.
Ecuacin no lineal de una variable: f (a ) = 0 fzero
calcula el cero de una ecuacin continua
de una variable.

Ecuaciones no lineales: resuelve un F(x) = 0 , donde x es un vector, fsolve


sistema de ecuaciones no lineales de n y F(x) una funcin que
incgnitas y n variables. devuelve un vector.

Tabla 5.1-2 Funciones para la resolucin de ecuaciones

Tipo y descripcin Notacin Funcin


Mnimos cuadrados lineales: con el \ (slash)
C .x d
2
min x
comando \slash se resuelve este tipo de 2
problemas cuando se tienen m
ecuaciones y n variables (m > n). donde C es una matriz mxn, y
d un vector columna con m
componentes.
Mnimos cuadrados lineales no 1 lsqnonneg
C.x d
2
negativos: resuelve un problema de min x 2
para x = 0
mnimos cuadrados no negativos. 2
donde C y d son los
componentes de la funcin
objetivo.
Mnimos cuadrados con restricciones: 1 lsqlin
C.x d
2
resuelve un problema de mninos min x 2
cuadrados sujeto a ciertas restricciones. 2
sujeto a A.x = b, Aeq.x = beq ,
lb = x = ub

A, Aeq son matrices.


C, x, b, beq, lb, ub son vectores.
Mnimos cuadrados no lineales: 1 1 quadprog
= Fi ( x) 2
2
resuelve un problema mnimos F ( x) 2
cuadrados no lineales (ajuste de datos 2 2 i
no lineal). l=x=u

Ajuste de curvas no lineal: resuelve el min x lsqcurveftit


problema de ajuste de curvas con 1
F ( x, xdata ) ydata
2
mnimos cuadrados. A partir de unos 2
valores de entrada dados xdata, y unos 2
valores de salida observados ydata, l=x=u
encuentra los coeficientes x que cumplen
mejor la ecuacin.

Tabla 5.1-3 Funciones de mnimos cuadrados ( ajunte de curvas)

En la mayora de las funciones de optimizacin de MatLab que


acabamos de ver, se requiere la definicin de una funcin .m que compute la
funcin objetivo a optimizar. Es decir, la funcin objetivo (o funcin de error)
realiza una serie de clculos, que el usuario define, y devuelve como parmetro

60
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

de salida, un escalar, que ser el valor que se pretende minimizar (o


maximizar). El problema de maximizacin se puede resolver usando las
funciones de minimizacin vistas, sin ms que indicarle a la funcin que
minimice f, si se desea maximizar una determinada funcin f.

En el problema que se resuelve en este proyecto, se trata de minimizar


un conjunto de variables (los parmetros de diseo del circuito electrnico
diseado) tal que se cumplan una serie de especificaciones o caractersticas
del circuito. Se trata pues, de un problema de optimizacin no lineal con varias
variables, por ello la funcin elegida para automatizar el proceso de diseo ha
sido la funcin de minimizacin del Toolbox de MatLab llamada fmincon.
Veremos que la funcin objetivo en este caso es una funcin error, que
devuelve un valor, al que llamaremos error, y que refleja cmo de cerca
estamos de las especificaciones impuestas al circuito con unos determinados
valores de los parmetros de diseo del mismo.

Ms adelante se estudiar la funcin fmincon en detenimiento. Un


aspecto clave a la hora de afinar en el valor que devuelve la funcin objetivo,
es la modificacin de las opciones de optimizacin. Estas opciones estn
incluidas en una estructura que la funcin de optimizacin recibe como
parmetro de entrada, y que se llama options. Por la importancia de esta
estructura de optimizacin, se dedicar un apartado a explicar en detalle cada
uno de los parmetros que incluye la estructura de optimizacin options, que
significan, cmo afectan en el proceso que lleva a cabo la funcin de
optimizacin, y cmo se pueden modificar los valores de los parmetros de
dicha estructura.

5.1.1 Algoritmos de las funciones del Toolbox de Optimizacin


En el Toolbox de optimizacin de MatLab se hace una clasificacin de
los algoritmos de optimizacin internos que usan las rutinas del Toolbox para
operar. Recordemos que, las funciones de optimizacin no son ms que rutinas
con extensin .m que llevan a cabo, mediante un conjunto de sentencias,
algoritmos de optimizacin especficos. As pues, los algoritmos que
desarrollan el conjunto de funciones de optimizacin pueden ser algoritmos de
media escala o bien algoritmos de amplia escala. Esta distincin entre
algoritmos se hace para diferenciar los algoritmos clsicos de los algoritmos de
amplia escala, los cuales han sido diseados para abordar problemas de
amplia escala con ms eficiencia. Veamos algunos ejemplos de los algoritmos
que pertenecen a uno u otro de estos dos conjuntos diferenciados.[3].

- Algoritmos de media escala:

Entre los algoritmos clasificados como de media escala nos


encontramos con los algoritmos conocidos como mtodo de bsqueda simple
Nelder-Mead y mtodo quasi-Newton o de mtrica variable Broyden-Fletcher-
Goldfarb-Shanno (BFGS) usados en la minimizacin sin restricciones. Tambin
se encuentran entre los algoritmos de media escala los mtodos de

61
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

programacin cuadrtica secuencial (SQP) usados en las funciones de


minimizacin con restricciones, problemas de mnimo-mximo, alcance de
objetivos y optimizacin semi-infinita. Y por ltimo, nos encontramos los
algoritmos que usan los problemas de mnimos cuadrados no lineales, tales
como los mtodos de Gauss-Newton y Levenberg-Marquardt.

- Algoritmos de amplia escala:

Los principales algoritmos de amplia escala son iterativos, es decir, que


generan una secuencia de soluciones aproximadas. En cada iteracin se
resuelve un sistema lineal de forma aproximada. Entre este tipo de algoritmos
se encuentran los problemas de lmites con restricciones que son resueltos
usando mtodos de Newton reflejados. Tambin problemas de igualdades con
restricciones para los cuales se usa una iteraccin de gradiente conjugado
precondicionado. Para resolver los problemas de amplia escala de forma
eficiente, se requiere informacin adicional (por ejemplo, si se usa uno de estos
algoritmos para la minimizacin no lineal se requiere calcular
computacionalmente el gradiente en la funcin objetivo que realiza el usuario).

Adems, es importante tener en cuenta que los algoritmos de amplia


escala no son aplicables a todo tipo de problemas que se puedan formular; por
ejemplo, para la funcin elegida en este proyecto,fmincon, el algoritmo de
amplia escala que usa MatLab cubre los casos en los que solamente hay
lmites con restricciones o slo igualdades lineales. Para cada caso en el que
se aplica un algoritmo de amplia escala se necesita una informacin adicional
especfica.

5.1.2 Argumentos de las funciones del Toolbox de


Optimizacin
Antes de pasar a hacer un estudio detallado de la funcin escogida para
el desarrollo de nuestro problema, veamos los argumentos que usan las
funciones del Toolbox de Optimizacin. Las tabla 5.1.1-1 describe los
argumentos de entrada y la tabla 5.1.1-2 los argumentos de salida. En las
tablas adjuntas se da una breve descripcin de cada uno de los argumentos y
qu funciones usan los usan, ya que no todas las funciones usan los mismos
parmetros. Ya que en las tablas siguientes se muestra una descripcin
demasiado breve de los argumentos que usan las funciones, en el apartado
siguiente, donde se explicar la funcin usada fmincon, veremos algunos
detalles relevantes para la funcin fmincon de los argumentos de entrada fun
y options, y los argumentos de salida exitflag y output.

62
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

Argumento Descripcin Usado por las


funciones
A, b La matriz A y el vector b son, respectivamente, los fgoalattain,
coeficientes de las restricciones de desigualdad lineal fmincon, fminimax,
y el vector que incluye los valores de la parte derecha fseminf, linprog,
de las desigualdades, i.e.: A.x = b. lsqlin,quadprog
Aeq, beq La matriz Aeq y el vector beq son, respectivamente, los fgoalattain,
coeficientes de las restricciones de igualdad lineal y el fmincon, fminimax,
vector que incluye los valores de la parte derecha de fseminf, linprog,
las igualdades, i.e.: Aeq.x = beq. lsqlin,quadprog
C, d La matriz C y el vector d son, respectivamente, los lsqlin,lsqnonneg
coeficientes del sistema lineal sobre- y sub-
determinado y el vector de los valores de la parte
derecha del sistema a resolver.

f Vector de coeficientes para el trmino lineal en la lsqlin,quadprog


ecuacin lineal f*x o la ecuacin cuadrtica
x*H*x*+f*x.
fun Es la funcin a ser minimizada o funcin objetivo f(x). fgoalattain, fminbnd
fun puede ser un objeto que se le pase a la funcin fmincon, fminimax,
directamente o bien un fichero .m que realice las fminsearch,
operaciones necesarias para computar f(x). fminunc,fseminf,
fsolve, fzero,
lsqcurvefit,
lsqnonlin

goal Vector de valores cuyos objetivos que intentan fgoalattain


alcanzar. El vector debe tener la misma longitud que
el nmero de objetivos.
H La matriz de coeficientes para los trminos quadprog
cuadrticos en la ecuacin cuadrtica x*H*x+f*x.
H debe ser symmetric.
lb, lu Vectores de los lmites inferior y superior que se fgoalattain,
permiten a los valores de los elementos del vector x. fmincon,
Normalmente son del mismo tamao que x, aunque si fminimax, fseminf,
lb o lu son de menor tamao, supongamos de linprog, lsqcurvefit,
tamao m, el programa aplicar estos lmites a los lsqlin, lsqnonlin,
primeros m elementos del vector x. Cuando no se le quadprog
impongan lmetes inferiores o superiores a los valores
del vector x, pueden obtenerse valores como Inf o
Inf cualquier x(i).
nonlcon Es la funcin que computa las desigualdades no fgoalattain,
lineales y las restricciones de igualdad. nonlcon es fmincon,
el nombre de un fichero .m. fminimax
options Es una estructura de parmetros. Cada uno de estos Todas las
parmetros son opciones de optimizacin que usan funciones
las funciones de optimizacin.

seminfcon Funcin que computa la desigualdades no lineales, fseminf


las restricciones de igualdad y las restricciones semi-
infinitas. seminfcon es el nombre de una funcin .m.

Tabla 5.1.1-1 Argumentos de entrada

63
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

Argumento Descripcin Usado por las


funciones
P1,P2 Son argumentos adicionales que se pueden pasar a fgoalattain, fminbnd
la funcin fun, nonlcon, o seminfcon. Usando fmincon, fminimax,
estos parmetros, se evita la necesidad de definir fminsearch,
variables globales en el programa. fminunc,fseminf,
fsolve, fzero,
lsqcurvefit,
lsqnonlin

xdata, El dato de entrada xdata, y el dato observado ydata lsqcurvefit


ydata en la funcin lsqcurvefit
x0 Punto inicial, es un vector que contiene los valores Todas las
iniciales asignados a los elementos de x. funciones
Excepto fminbnd
x1,x2 El intervalo en el que se minimiza fun. fminbnd

Weight Es un vector de pesos, para controlar los logros fgoalattain


relativos por abajo o por arriba de los objetivos.

Tabla 5.1.1-1 Argumentos de entrada - continuacin -

Argumento Descripcin Usado por las


funciones
exitflag Condicin de finalizacin de la funcin de Todas las
optimizacin. funciones
attainfactor Es el factor de mrito en la solucin x fgoalattatin

fval Es quizs uno de los argumentos ms importantes. fgoalattain, fminbnd


Se trata del valor de la funcin objetivo fun en la fmincon, fminimax,
solucin x. Este es el valor que se desea calcular al fminsearch,
usar la funcin de optimizacin. fminunc,fseminf,
fsolve, fzero,
linprog,quadprog
grad El valor del gradiente de la funcin objetivo fun en la fmincon, fminunc
solucin x.
hessian El valor de Hessian de la funcin objetivo fun en la fmincon, fminunc
solucin x.

jacobian El valor del Jacobiano de la funcin objetivo fun en lsqcurvefit,lsqnonlin


la solucin x. fsolve
lambda Los mltiplos del Lagrangiano en la solucin x. fgoalattain, fminbnd
lambda es una estructura, en la que cada campo es fmincon, fminimax,
para un tipo diferente de restriccin. fminsearch,
fminunc,fseminf,
fsolve, fzero,
linprog,quadprog
x Es la solucin encontrada por la funcin de Todas las
optimizacin. Cuando el argumento de salida funciones
exitflag > 0, entonces el valor de x es una
solucin; en otro caso x es el ltimo valor que
encontr la rutina de optimizacin antes de acabar
prematuramente.
output Es una estructura de salida que contiene informacin Todas las
sobre los resultados de la optimizacin. funciones

Tabla 5.1.1-2 Argumentos de salida

64
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

Algunos de los parmetros vistos contienen informacin imprescindible


para que el usuario pueda saber si su optimizacin ha sido correcta, o si por el
contrario no se ha conseguido alcanzar el valor deseado. A continuacin se va
a estudiar la forma y el funcionamiento de la funcin de optimizacin fmincon, y
se va a profundizar ms en algunos aspectos importantes de algunos de los
argumentos que usa esta funcin de optimizacin.

5.2 FUNCIN DE OPTIMIZACIN ELEGIDA: fmincon


Ya se ha adelantado en el anterior apartado que la funcin de
optimizacin que mejor se adapta a las caractersticas del problema a resolver
con el programa desarrollado en MatLab en el presente proyecto es, la funcin
de minimizacin del Toolbox de Optimizacin fmincon. El propsito de esta
funcin es encontrar el mnimo del valor escalar que devuelve una funcin de
varias variables no lineal y sujeta a una serie de restricciones. Normalmente se
conoce este tipo de problemas como optimizacin no lineal con restricciones o
programacin no lineal. La funcin escalar de varias variables se llamar
funcin objetivo. El usuario debe implementar esta funcin objetivo para que se
realicen los clculos oportunos para obtener el valor escalar que devuelve la
funcin. Se puede describir de forma breve el propsito de la funcin de
minimizacin como sigue:

Calcular el mnimo de f(x) sujeta a las restricciones c(x)= 0


ceq(x)=0
A.x = b
Aeq.x = beq
lb = x = ub

donde A, Aeq, son matrices, x, b, beq, lb y lu son vectores y c(x) y ceq(x)


son funciones que devuelven vectores y la funcin f(x) es una funcin
multivariable que devuelve un escalar. Las funciones f(x), c(x) y ceq(x)
pueden ser funciones no lineales.

Para comprender cmo se ha usado la funcin de minimizacin no lineal


escogida en el programa diseado en MatLab para la automatizacin del
proceso de diseo de un circuito electrnico, veamos detalladamente en los
apartados siguientes la sintaxis y el significado de los parmeros de entrada y
salida ms notables de la funcin de minimizacin fmincon.

5.2.1 Sintaxis de la funcin fmincon


Para un correcto uso de la funcin de minimizacin fmincon en cualquier
programa que se desarrolle en MatLab, es importante conocer que parmetros
recibe y devuelve sta, as como el significado de cada uno de estos
parmetros con los que la funcin trabaja. Existen distintas sintaxis para
invocar a la funcin fmincon, desde la forma ms fcil en la que la rutina slo
devuelve un parmetro de salida, hasta la forma ms compleja en la que la
funcin proporciona al usuario distintos parmetros de salida que pueden

65
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

resultarle de gran utilidad en la resolucin de su problema e incluso le pueden


ser tiles para comprobar que el funcionamiento de la funcin ha sido el
deseado. Veamos a continuacin todas y cada una de las formas de invocar la
funcin en MatLab, y que parmetros de salida nos puede proporcionar.

x = fmincon (fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,lu)
x = fmincon (fun,x0,A,b,Aeq,beq,lb,lu,nonlcon)
x = fmincon (fun,x0,A,b,Aeq,beq,lb,lu,nonlcon,options)
x = fmincon (fun,x0,A,b,Aeq,beq,lb,lu,nonlcon,options,P1,P2,)
[x,fval] = fmincon ()
[x,fval,exitflag] = fmincon ()
[x,fval,exitflag,output] = fmincon ()
[x,fval,exitflag,output,lambda] = fmincon ()
[x,fval,exitflag,output,lambda,grad] = fmincon ()
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon ()

Veamos una descripcin ms amplia de cmo funcionara la funcin


cuando se invoca con cada una de las sintaxis especificadas anteriormente:[3]

X = fmincon (fun,x0,A,b) empieza con los valores especificados por el


vector de inicio x0, y encuentra un valor mnimo del vector x para la funcin
que ha sido descrita en fun, y tal que se cumpla la inecuacin lineal A.x = b.

x = fmincon (fun,x0,A,b,Aeq,beq) encuentra el mnimo de la funcin fun,


sujeta a la condicin de igualdad Aeq.x = beq, adems de la inecuacin A.x =
b. Cuando no existan condiciones de desigualdad, se debe establecer las
variables A=[ ], y b=[ ].

x = fmincon(fun,x0,A,b,Aeq,beq,lb,lu) encuentra el mnimo de la funcin


fun, sujeta a las condiciones A.x = b y Aeq.x < beq. Ahora se definen unos
lmites inferiores y superiores para los valores de las variables de diseo, el
vector x, as que la solucin que haya la rutina estar comprendida en el rango
lb = x = lu. Cuando no se usen las restricciones de igualdad de la funcin fun
habr que establecer Aeq=[ ], y beq=[ ].

x = fmincon(fun,x0,A,b,Aeq,beq,lb,lu,nonlcon) encuentra el mnimo


de la funcin fun, para que se cumplan las anteriores restricciones y adems
sujeta la minimizacin de las inecuaciones no lineales c(x) o ceq(x)
definidas en la funcin nonlcon. fmincon minimiza tal que se cumpla que
c(x)= 0 y ceq(x)= 0. Cuando no se usen lmites inferiores y/o superiores
para los valores del vector de parmetros, habr que establecer lb=[ ] y lu=[ ].

x = fmincon(fun,x0,A,b,Aeq,beq,lb,lu,nonlcon,options) minimiza la
funcin objetivos, teniendo en cuenta los parmetros de optimizacin
especificados en la estructura options. Si no se usan las restricciones del
tipo c(x)= 0 y ceq(x)= 0, establecer nonlcon=[ ]. La estructura de
optimizacin options merece un estudio aparte, ya que los parmetros de

66
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

optimizacin que integran la estructura pueden influir notablemente en la


solucin que se obtenga en el proceso de minimizacin de fmincon. Por ello se
estudiarn en un apartado siguiente cada uno de los elementos de la
estructura, para comprender como pueden afectar a la solucin encontrada.

x = fmincon(fun,x0,A,b,Aeq,beq,lb,lu,nonlcon,options,P1,P2,)
pasa parmetros adicionales a la funcin objetivo, sin necesidad de tener
variables globales. Cuando los argumentos de la funcin
A,b,Aeq,beq,lb,lu,nonlcon y options, no sean necesarios, habr que
establecerlos como matrices vacas.

[x,fval] = fmincon (), devuelve el valor de la funcin objetivo fun,


evaluada en el vector de parmetros x.

[x,fval,exitflag] = fmincon (), devuelve el valor de la funcin objetivo


fun, evaluada en el vector de parmetros x y una bandera exitflag que
indica la condicin de salida o finalizacin de la funcin fmincon.

[x,fval,exitflag,output] = fmincon (), devuelve el valor de la funcin


objetivo fun, evaluada en el vector de parmetros x, la condicin de salida,
exitflag, de la funcin de minimizacin, y una estructura llamada output
que contiene informacin sobre la minimizacin llevada a cabo por la funcin
fmincon.

[x,fval,exitflag,output,lambda] = fmincon (), devuelve los mismos


valores anteriores y adems una estructura llamada lambda que contiene los
multiplos Lagrangianos en el vector obtenido x.

[x,fval,exitflag,output,lambda,grad] = fmincon (), devuelve los


mismos valores anteriores y adems el valor del gradiente de la funcin fun en
la solucin obtenda x.

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon (),


devuelve los mismos valores anteriores y adems el valor del Hessian de la
funcin fun en la solucin obtenda x.

Veamos a continuacin algunos detalles importantes de algunos de los


argumentos que usa la funcin fmincon.

5.2.2 Argumentos importantes de la funcin fmincon


Uno de los argumentos de entrada ms interesantes de sta y otras
funciones de minimizacin es la funcin objetivo, fun, o funcin a ser
minimizada. fun toma el vector x y devuelve un valor escalar, por ejemplo f,
que es el valor que toma la funcin evaluada en x. El argumento que define la
funcin objetivo, se puede especificar de dos formas. fun puede ser el nombre
de una funcin con extensin .m, realizada por el usuario, y que realiza los

67
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

clculos necesarios para evaluar f(x) en x. La segunda forma de pasar el


argumento fun a la funcin fmincon es como un objeto en lnea, es decir, en
el lugar del parmetro fun se escribe directamente la expresin de la funcin
f(x). Veamos como se puede usar este argumento de fmincon con un sencillo
ejemplo:

Ejemplo: Se desean encontrar los valores de x1, x2, x3 que minimizan la


funcin f(x)= -x1.x2.x3. Para especificar el objeto fun en lnea, tan slo
habra que invocar a la funcin fmincon como sigue:

[x,fval] = fmincon (inline(-x(1)*x(2)*x(3)), x0,), donde x es


un vector de tres elementos, y fval es el valor mnimo de la funcin evaluada
en el valor encontrado para el vector x.

Si por el contrario, se desease optar por la otra forma de pasar el parmetro de


la funcin objetivo a la funcin fmincon, se debe realizar una funcin .m que
compute la funcin f(x) de la siguiente forma:

function f= myfun(x)
f = - x(1)*x(2)*x(3);

y la forma de invocar fmincon sera:

[x,fval] = fmincon ( myfun, x0,)

Se puede adems obtener el gradiente de la funcin objetivo, para ello


habr que activar un elemento de la estructura de opciones de optimizacin
options que permite que la funcin objetivo compute el clculo del gradiente.
Para activar dicho elemento en la estructura de optimizacin se usa optimset,
que es una instruccin que permite crear o modificar los parmetros de
optimizacin de la estructura. El uso de esta instruccin es como sigue en este
caso:

options = optimset(GradObj, on)

El gradiente es la derivada parcial de f en el punto x. Es decir, si se


llama g al gradiente, el i-simo componente de g sera la derivada parcial de la
funcin f(x) respecto del i-simo componente del vector x y evaluada en la
solucin x. En el caso de que se active la opcin de clculo del gradiente, la
funcin fun devuelve dos parmetros de salida, es decir, tendramos en este
caso algo tal que as:

function [f,g] = myfun(x)


f = ;
if nargout > 1 % fun se usa con dos argumentos de salida
g = ;
end
Notar que chequeando el valor de la variable nargout se evita el
cmputo de g si la funcin fun se llama con slo un argumento de salida ( es

68
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

decir, el caso en el que el algoritmo de optimizacin slo necesita el valor f y


no g). Tambin se puede calcular la matriz Hessiana, activando esta opcin en
la estructura options. Es decir, se debera escribir antes de usar fmincon:
options = optimset(Hessian, on). En este caso, tambin se puede
chequear el valor de la variable nargout para evitar el computo de H si la
funcin fun se llama con slo con uno o dos argumentos de salida ( es decir,
en el caso en el que la optimizacin slo necesita los valores de f y g, pero no
H ). La matriz Hessiana es una matriz simtrica, donde cada elemento es una
derivada parcial segunda. Esto es, el elemento (i,j) de la matriz H sera la
derivada parcial segunda de f con respecto al elemento i-simo y j-simo de x,
2 f .
xi x j

La estructura de la funcin objetivo en el caso de que se compute la


matriz Hessiana sera algo tal que as:

function [f,g,H] = myfun(x)


f = ;
if nargout > 1 % fun se usa con dos argumentos de salida
g = ;
if nargout > 2
H = ; % matriz Hessiana evaluada en x
end
end

Otro argumento de entrada de gran importancia a la hora de usar tanto


la funcin de minimizacin no lineal fmincon, como cualquiera de las dems
funciones del Toolbox de Optimizacin de MatLab, es la estructura de opciones
de optimizacin, llamada options. Esta estructura contiene varios campos
que permiten influir de manera notable en el proceso que lleva a cabo la rutina
de optimizacin. Debido a la importancia de la estructura options y a la gran
cantidad de parmetros que sta contiene, se ver en el siguiente apartado.

Hay dos argumentos de salida que merecen ser tenidos en cuenta.


Estos dos parmetros son exitflag y output. El argumento de salida
exitflag es una bandera que indica al usuario la razn por la que ha
finalizado la funcin de optimizacin y puede tomar los siguientes valores:

Exitflag > 0, indica que la funcin f(x) converge en la solucin x.

Exitflag = 0, indica que se ha alcanzado el nmero mximo de


evaluaciones permitidas a la funcin f(x) o de iteracciones de
la funcin fmincon.

Exitflag < 0, indica que la funcin f(x) no converge a una solucin.

69
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

El argumento de salida output es una estructura, cuyos campos


contienen informacin sobre la optimizacin que se ha llevado a cabo en la
rutina. Los parmetros de esta estructura y el significado de ellos son:

output.Iterations: iteraciones llevadas a cabo por fmincon.


output.funcCount: nmero de evaluaciones de la funcion objetivo.
output.algorithm: El algoritmo usado por la funcin fmincon.
output.cgiterations: nmero de iteraciones de PCG
( solo para el caso de algoritmos de escala amplia).
output.stepsize: El tamao del paso final tomado
(slo para algoritmos de media escala).
output.firstorderopt: Es una media de optimicidad de primer
orden (slo para algoritmos de escala amplia).

5.2.3 La estructura de parmetros de optimizacin options

El argumento de entrada options es una estructura cuyos campos


proporcionan a las funciones opciones adicionales para el proceso de
optimizacin. Cada uno de los campos que componen la estructura tiene
asignado un valor por defecto, que puede cambiarse usando la funcin de
MatLab optimset. Algunos de los parmetros son aplicables a todos los
algoritmos, otros slo con relevantes si la rutina de optimizacin usa un
algoritmo de amplia escala y de forma similar, hay parmetros que slo tienen
sentido para la funcin de optimizacin si sta usa un algoritmo de escala
media. Para la funcin fmincon, slo tiene sentido usar algunos de los
parmetros de la estructura options, pero antes de hablar de cmo afectan
stos a la funcin, veamos todos los parmetros que componen la estructura
options y una breve descripcin de cada uno en la tabla adjunta 5.2.3-1.

Parmetro Descripcin
DerivativaCheck Compara derivadas analticas proporcionadas por el usuario
(gradientes y jacobienos) y derivadas diferenciales finitas.
Diagnotics Imprime informacin de diagnostico sobre la funcin objetivo.
DiffMinChange Mnimo incremento diferencial en los elementos del vector x.
DiffMinChange Mximo incremento diferencial en los elementos del vector x.
Display Nivel de display. Si se establece este parmetro como off no
muestra nada a la salida de la funcin. Si se establece como iter
muestra la salida en cada iteracin de la funcin; si se establece
como final slo muestra la salida al finalizar la funcin.
GoalsExatAchieve Nmero de logros que se desean conseguir.
GradConstr Gradientes de las restricciones no lineales definidas por el usuario.
GradObj Gradiente de la funcin objetivo definida por el usuario. El gradiente
de la funcin debe ser proporcionado cuando se usa un algoritmo de
amplia escala. En caso contrario, es decir se usa uno de media
escala, es opcional.
Hessian Matriz Hessiana para la funcin objetivo.
HessPattern Grado de libertad de la matriz Hessiana en diferenciales finitos.
HessUpdate Esquema de actualizacin Quasi-Newton.

70
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

Jacobian Jacobiano de la funcin objetivo.


JacobPattern Grado de libertad del Jacobiano en diferenciales finitos.
LargeScale Usar un algoritmo de amplia escala si es posible. Cuando el
parmetro largeScale se establece a on; Cuando est
establecido como off la funcin usar un algoritmo de media
escala.
LevenbergMarquar Elegir un algoritmo de Leverberg-Marquardt en lugar de un
dt algoritmo de Gauss-Newton.
LineSearchType Lnea de bsqueda del algoritmo elegido.
MaxFunEvals Mximo nmero de evaluaciones de fun permitidos.
MaxIter Mximo nmero de iteraciones de la funcin de optimizacin
permitido.
MaxPCGIter Mximo nmero de iteraciones PCG (preconditioned conjugate
gradient) permitido. Slo ser necesario cuando se use un algoritmo
de amplia escala en la rutina de optimizacin.
MeritFunction Usar una funcin de mrito.
MinAbsMax Nmero de F(x) a minimizar en el peor de los casos.
PrecondBandwidth Ancho de banda superior del precondicional para el PCG.
TolCon Tolerancia de finalizacin en la violacin de las restricciones.
TolFun Tolerancia de finalizacin en el valor de fun.
TolPCG Tolerancia de finalizacin en la iteracin PCG.
TolX Tolerancia de finalizacin en el valor de x.
TypicalX Valores tpicos de los elementos del vector x. Slo se usar en los
algoritmos de escala amplia.

Tabla 5.2.3-1 Parametros de la estructura options

Una vez vistos todos los parmetros que integran los campos de la
estructura de opciones de optimizacin, pasemos a hacer un estudio de los
parmetros que han tenido mayor relevancia en nuestro caso. Hay varios
parmetros que permiten influir en el proceso de optimizacin que lleva a cabo
la rutina, pero para nuestro problema en particular, y en orden de importancia
estos parmetros han sido: TolFun, TolX, MaxFunEvals, MaxIter. Hay que
decir que el parmetro TolCon tiene tanta o ms importancia que los
parmetros TolFun y TolX. Ahora bien, dado que no ha sido necesario definir
restricciones del tipo c(x)= 0, ceq(x)=0, A.x = b o Aeq.x = beq en la
forma en la que se ha planteado el problema que se ha resuelto con el uso de
la funcin fmincon en nuestro programa en MatLab, el parmetro TolCon
carece de significado en nuestro caso.

- Los parmetros TolFun y TolX:

Los campos TolFun y TolX son parmetros de tolerancias relativas que


pueden influenciar en cmo y cuando se converge a una solucin, y por tanto
afectan a la solucin que encuentra la funcin de optimizacin, x y fval
(vase la tabla de argumentos de salida 5.1.2-2). TolFun es la tolerancia de
finalizacin que se permite a la funcin objetivo fun. Cuando la funcin de
optimizacin use como criterio de optimizacin el valor del parmetro TolFun,
entonces buscar que la derivada direccional en la direccin de bsqueda del

71
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

valor que devuelve fun sea al menos 2*options.TolFun. Es decir, se


converge a una solucin cuando la pendiente entre dos valores consecutivos
del valor que devuelve la funcin objetivo sea al menos del orden de
2*TolFun. La funcin de optimizacin se parar si la pendiente entre dos
valores consecutivos del valor devuelto es menor de lo especificado. Si se
sigue este criterio de optimizacin, al finalizar satisfactoriamente la rutina de
optimizacin, se mostrar en la pantalla del computador un mensaje como el
siguiente:

Optimization terminated successfully: Magnitude of direccional


derivative in search direction less than 2*options.TolFun and
maximum constraint violation is less than options.TolCon.

Del mismo modo, el parmetro TolX es una tolerancia de terminacin


para los valores estimados del vector solucin x. Si se usa como criterio de
optimizacin el valor del parmetro TolX, se buscar que el cambio del valor
de los parmetros del vector x sea menor que TolX. El mensaje que se
mostrar por pantalla cuando se haya encontrando una solucin y finalice la
rutina sera como el siguiente:

Optimization terminated successfully: Search direction less


than 2*options.TolX and maximum constraint violation is less
than options.TolCon.

Es muy importante tener en cuenta que las rutinas de optimizacin


hacen un OR entre los parmetros de optimizacin TolFun y TolX, as que el
hecho de seguir uno u otro criterio de terminacin depender del valor que
tengan tales parmetros. Por defecto, TolFun y TolX tienen el mismo valor,
1e-006. En caso de que no se cambien estos dos valores, y al ser los dos
parmetros iguales, la funcin sigue cualquiera de los dos criterios de
optimizacin vistos. Para cambiar el valor de cualquier parmetro de la
estructura options, como ya se ha visto anteriormente, se usa la funcin
optimset. Alterar el valor de los parmetros TolFun y TolX supone alterar la
solucin a la que converge la rutina de optimizacin. Por ejemplo, supongamos
que se cambia el valor por defecto de los dos parmetros de 1e-006 a 1e-
005; este aumento relaja los dos criterios de optimizacin vistos, resultando en
una solucin notablemente menos exacta. De forma similar, si se disminuye el
valor de TolFun y/o TolX, por ejemplo de 1e-006 a 1e-008 se limita uno o
los dos criterios de optimizacin, resultando en una solucin ms exacta,
aunque muy posiblemente se requieran un mayor nmero de iteraciones de la
funcin de optimizacin. Normalmente el usuario disminuye los valores de
estos parmetros cuando observa que la solucin encontrada es subptima.

Dado que la funcin que se pretende resolver en este proyecto es


fuertemente no lineal, se ha ido apurando en la solucin que encuentra la
funcin fmincon cambiando los valores de los parmetros vistos TolFun y
TolX. Se vern las soluciones obtenidas para distintos valores de estos
parmetros en el captulo 7.

72
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

- Los parmetros MaxFunEvals y MaxIter:

El parmetro MaxIter es el nmero de iteraciones permitidas en el


proceso de estimacin que lleva a cabo la funcin fmincon. Cada iteracin,
involucra una optimizacin, y por lo tanto distintas evaluaciones de la funcin
objetivo fun. El valor por defecto que tiene MaxIter es 400. Aunque el
proceso de estimacin raramente excede este nmero de iteraciones de la
funcin de optimizacin, se puede incrementar este valor usando optimset si se
sospechase que el proceso ha terminado prematuramente.

MaxFunEvals, un campo estrechamente relacionado con el anterior,


MaxIter, especifica el mximo nmero de evaluaciones que se realizarn, a lo
largo de todo el proceso de estimacin de una solucin optima, de la funcin
objetivo. El valor por defecto de MaxFunEvals es 100 veces el nmero de
parmetros que se estn estimando. Es decir, si la funcin objetivo recibe un
vector con 3 elementos, el valor de MaxFunEvals es 300. Cuando la rutina de
optimizacin acaba prematuramente, sin encontrar una solucin, ser
normalmente porque se ha excedido este parmetro. Al igual que en el caso
anterior, se puede incrementar este valor usando optimset si el proceso ha
finalizado y se sospecha que se puede conseguir una mejor solucin.

Los campos MaxFunEvals y MaxIter son por naturaleza puramente


mecnicos. Aunque el usuario puede encontrar situaciones en las que se
alcance el valor de MaxFunEvals y/o MaxIter, no suelen ser situaciones
comunes. Si se aumenta el valor de estos campos, se puede converger a una
solucin mas satisfactoria; ahora bien, si la rutina de optimizacin finaliza por
haber alcanzado alguno de estos valores, se est indicando que el modelo
descrito es demasiado complicado. Finalmente, aunque los parmetros
MaxFunEvals y MaxIter pueden ser causa de finalizacin de la funcin de
optimizacin, hay que decir que su valor no afecta a la solucin una vez sta ha
sido encontrada.

5.2.4 Ejemplo de la funcin fmincon

Veamos un ejemplo sencillo para comprender cmo se usa la funcin


fmincon antes de pasar al siguiente apartado. Usaremos el ejemplo anterior en
el que se mostr las dos formas de pasar a la funcin fmincon la funcin
objetivo fun. Esto es, se desean encontrar los valores de x1, x2, x3 que
minimizan la funcin f(x)= -x1.x2.x3, tal que adems se cumpla que: 0 =
x1 + 2x2+ 2x3 = 0.

El primer paso sera escribir el una funcin .m, que realiza los calculos
de f(x) y devuelve el valor escalar f de la funcin objetivo evaluada en x. En
este ejemplo, x es un vector de tres elementos, y el cdigo de la rutina de la
funcin objetivo simplemente:

function f= myfun(x)
f = - x(1)*x(2)*x(3);

73
CAPTULO 5 Optimizacin en MatLab: la funcin fmincon

Ahora se escribiran las restricciones, y dado que tenemos dos


desigualdades lineales, se escribirn procurando obtener algo tal que A.x = b.
Si se reescribe la ecuacin 0 = x1 + 2x2+ 2x3 = 0 como dos inecuaciones en
las que ambas se tiene el signo menor o igual, tendramos que: - x1 - 2x2 -
2x3 = 0 y x1 + 2x2 + 2x3 = 72. Por tanto, la matriz A y el vector b seran:

1 2 2 0
A= y b=
1 2 2 72

Es decir para poder invocar finalmente la funcin fmincon, deberamos


escribir el siguiente conjunto de variables en MATLAB y la sentencia que
invoca a la funcin tal como se indica a continuacin:

% Example fmincon------------------------------------------
A=[-1 -2 -2; 1 2 2];
b=[0 72];
x0 = [10; 10; 10]; % Starting guess at the solution

[x,fval,exitflag,output]=fmincon(@myfun,x0,A,b)
% ---------------------------------------------------------

Despus de 64 iteraciones de fmincon, se obtiene la solucin, siendo


sta x = (24 12 12) y el valor de la funcin fun evaluada en x, fval =
3.4560e+003. Al finalizar la funcin, la bandera exitflag es igual a 1, lo
cual indica que se la funcin converge a una solucin, y el mensaje final
obtenido es el primer criterio de optimizacin visto anteriormente.

74