Vous êtes sur la page 1sur 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
Minimizacin escalar: encuentra el mnimo de una funcin de una variable. Minimizacin sin restricciones: encuentra el mnimo de una funcin de varias variables sin restricciones. Programacin lineal: resuelve problema de programacin lineal. un

Notacin min a f ( a ) para a1 < a < a 2


min x f ( x ) donde x es un vector.
T

Funcin
fminbond

fminunc, fminsearch

min x f ( x) sujeto a A.x = b, Aeq.x = beq , lb = x = ub A, Aeq son matrices. f, x, b, beq, lb, ub son vectores.

linprog

Programacin cuadrtica: resuelve un problema de programacin cuadrtica como el que se especifica.

min x

1 T x Hx + f T ( x) 2

quadprog

sujeto a A.x = b, Aeq.x = beq, lb = x = ub H, A, Aeq son matrices. f, x, b, beq, lb, ub son vectores. min x f ( x ) sujeto a c(x)= 0, ceq(x) = 0, A.x = b, Aeq.x = beq, 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.

Minimizacin con restricciones: encuentra el mnimo de una funcin no lineal de varias variables con restricciones.

fmincon

Tabla 5.1-1 Funciones de minimizacin 58

CAPTULO 5 Optimizacin en MatLab: la funcin fmincon Tipo y descripcin


Alcanzar valores especificados: resuelve un problema en el que se quieren alcanzar varios objet ivos.

Notacin
min x tal que F(x)-weight. = goal , y sujeto a c(x)= 0, ceq(x) = 0, A.x = b, Aeq.x = beq, lb = x = ub
,

Funcin
fgoalattain

Problema de mnimo-mximo: resuelve un problema de mnimo y mximo.

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. min x max{Fi} { Fi(x) } 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. min x f ( x ) sujeto a A.x = b, Aeq.x = beq , 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.

fminimax

Minimizacin semi-infinita: encuentra el mnimo de una funcin de varias variables con restricciones semi-infinitas.

fseminf

Tabla 5.1-1

Funciones de minimizacin - continuacin

59

CAPTULO 5 Optimizacin en MatLab: la funcin fmincon Tipo y descripcin


Ecuaciones lineales: resuelve un sistema de ecuaciones lineales de n incgnitas y n ecuaciones. Ecuacin no lineal de una variable: calcula el cero de una ecuacin continua de una variable. Ecuaciones no lineales: resuelve un sistema de ecuaciones no lineales de n incgnitas y n variables.

Notacin
C.x = d, donde C es una matriz NxN, y d un vector columna con n componentes.

Funcin
\ (slash)

f (a ) = 0

fzero

F(x) = 0 , donde x es un vector, y F(x) una funcin que devuelve un vector.

fsolve

Tabla 5.1-2

Funciones para la resolucin de ecuaciones

Tipo y descripcin
Mnimos cuadrados lineales: con el comando \slash se resuelve este tipo de problemas cuando se tienen m ecuaciones y n variables (m > n).

Notacin
min x

Funcin
2 2

C .x d

\ (slash)

donde C es una matriz mxn, y d un vector columna con m componentes. min x

Mnimos cuadrados lineales no negativos: resuelve un problema de mnimos cuadrados no negativos.

1 C.x d 2

2 2

lsqnonneg para x = 0

donde C y d son los componentes de la funcin objetivo. min x

Mnimos cuadrados con restricciones: resuelve un problema de mninos cuadrados sujeto a ciertas restricciones.

1 C.x d 2

2 2

lsqlin

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: resuelve un problema mnimos cuadrados no lineales (ajuste de datos no lineal). Ajuste de curvas no lineal: resuelve el problema de ajuste de curvas con mnimos cuadrados. A partir de unos valores de entrada dados xdata, y unos valores de salida observados ydata, encuentra los coeficientes x que cumplen mejor la ecuacin.

1 F ( x) 2
l=x=u min

2 2

1 Fi ( x) 2 2 i

quadprog

lsqcurveftit

1 F ( x, xdata ) ydata 2
l=x=u

2 2

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-FletcherGoldfarb-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


A, b

Descripcin
La matriz A y el vector b son, respectivamente, los coeficientes de las restricciones de desigualdad lineal y el vector que incluye los valores de la parte derecha de las desigualdades, i.e.: A.x = b. La matriz Aeq y el vector beq son, respectivamente, los coeficientes de las restricciones de igualdad lineal y el vector que incluye los valores de la parte derecha de las igualdades, i.e.: Aeq.x = beq. La matriz C y el vector d son, respectivamente, los coeficientes del sistema lineal sobre- y subdeterminado y el vector de los valores de la parte derecha del sistema a resolver. Vector de coeficientes para el trmino lineal en la ecuacin lineal f*x o la ecuacin cuadrtica x*H*x*+f*x. Es la funcin a ser minimizada o funcin objetivo f(x). fun puede ser un objeto que se le pase a la funcin directamente o bien un fichero .m que realice las operaciones necesarias para computar f(x).

Usado por las funciones


fgoalattain, fmincon, fminimax, fseminf, linprog, lsqlin,quadprog fgoalattain, fmincon, fminimax, fseminf, linprog, lsqlin,quadprog lsqlin,lsqnonneg

Aeq, beq

C, d

lsqlin,quadprog

fun

fgoalattain, fminbnd fmincon, fminimax, fminsearch, fminunc,fseminf, fsolve, fzero, lsqcurvefit, lsqnonlin fgoalattain

goal

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

quadprog

lb, lu

fgoalattain, fmincon, fminimax, fseminf, linprog, lsqcurvefit, lsqlin, lsqnonlin, quadprog

nonlcon

fgoalattain, fmincon, fminimax Todas funciones fseminf las

options

seminfcon

Tabla 5.1.1-1

Argumentos de entrada

63

CAPTULO 5 Optimizacin en MatLab: la funcin fmincon Argumento


P1,P2

Descripcin
Son argumentos adicionales que se pueden pasar a la funcin fun, nonlcon, o seminfcon. Usando estos parmetros, se evita la necesidad de definir variables globales en el programa.

Usado por las funciones


fgoalattain, fminbnd fmincon, fminimax, fminsearch, fminunc,fseminf, fsolve, fzero, lsqcurvefit, lsqnonlin lsqcurvefit Todas las funciones Excepto fminbnd fminbnd fgoalattain

xdata, ydata x0

El dato de entrada xdata, y el dato observado ydata en la funcin lsqcurvefit Punto inicial, es un vector que contiene los valores iniciales asignados a los elementos de x. El intervalo en el que se minimiza fun. Es un vector de pesos, para controlar los logros relativos por abajo o por arriba de los objetivos.

x1,x2 Weight

Tabla 5.1.1-1
Argumento exitflag
attainfactor

Argumentos de entrada - continuacin Usado por funciones Todas funciones fgoalattatin las las

Descripcin Condicin de finalizacin de la optimizacin. Es el factor de mrito en la solucin x funcin de

fval

Es quizs uno de los argumentos ms importantes. Se trata del valor de la funcin objetivo fun en la solucin x. Este es el valor que se desea calcular al usar la funcin de optimizacin.

grad hessian

El valor del gradiente de la funcin objetivo fun en la solucin x. El valor de Hessian de la funcin objetivo fun en la solucin x. El valor del Jacobiano de la funcin objetivo fun en la solucin x. Los mltiplos del Lagrangiano en la solucin x. lambda es una estructura, en la que cada campo es para un tipo diferente de restriccin.

fgoalattain, fminbnd fmincon, fminimax, fminsearch, fminunc,fseminf, fsolve, fzero, linprog,quadprog fmincon, fminunc fmincon, fminunc lsqcurvefit,lsqnonlin fsolve fgoalattain, fminbnd fmincon, fminimax, fminsearch, fminunc,fseminf, fsolve, fzero, linprog,quadprog Todas las funciones

jacobian lambda

output

Es la solucin encontrada por la funcin de optimizacin. Cuando el argumento de salida 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. Es una estructura de salida que contiene informacin sobre los resultados de la optimizacin.

Todas funciones

las

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
DerivativaCheck Diagnotics DiffMinChange DiffMinChange Display

Descripcin
Compara derivadas analticas proporcionadas por el usuario (gradientes y jacobienos) y derivadas diferenciales finitas. Imprime informacin de diagnostico sobre la funcin objetivo. Mnimo incremento diferencial en los elementos del vector x. Mximo incremento diferencial en los elementos del vector x. 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. Nmero de logros que se desean conseguir. Gradientes de las restricciones no lineales definidas por el usuario. 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. Matriz Hessiana para la funcin objetivo. Grado de libertad de la matriz Hessiana en diferenciales finitos. Esquema de actualizacin Quasi-Newton.

GoalsExatAchieve GradConstr GradObj

Hessian HessPattern HessUpdate

70

CAPTULO 5 Optimizacin en MatLab: la funcin fmincon


Jacobian JacobPattern LargeScale Jacobiano de la funcin objetivo. Grado de libertad del Jacobiano en diferenciales finitos. 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. Elegir un algoritmo de Leverberg-Marquardt en lugar de un algoritmo de Gauss-Newton. Lnea de bsqueda del algoritmo elegido. Mximo nmero de evaluaciones de fun permitidos. Mximo nmero de iteraciones de la funcin de optimizacin permitido. 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. Usar una funcin de mrito. Nmero de F(x) a minimizar en el peor de los casos. Ancho de banda superior del precondicional para el PCG. Tolerancia de finalizacin en la violacin de las restricciones. Tolerancia de finalizacin en el valor de fun. Tolerancia de finalizacin en la iteracin PCG. Tolerancia de finalizacin en el valor de x. Valores tpicos de los elementos del vector x. Slo se usar en los algoritmos de escala amplia.

LevenbergMarquar dt LineSearchType MaxFunEvals MaxIter MaxPCGIter

MeritFunction MinAbsMax PrecondBandwidth TolCon TolFun TolPCG TolX TypicalX

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 1e005; 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 fuertemente no lineal, se ha ido apurando en la solucin funcin fmincon cambiando los valores de los parmetros TolX. Se vern las soluciones obtenidas para distintos parmetros en el captulo 7. este proyecto es que encuentra la vistos TolFun y valores de estos

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:
A= 1 2 2 1 2 2

b=

0 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

Vous aimerez peut-être aussi