Siguiente: , Anterior:   [Índice general][Índice]

42 cobyla


42.1 Introducción a cobyla

fmin_cobyla es una traducción a Common Lisp hecha con el programa f2cl de la rutina Fortran COBYLA, (Powell, [1][2][3]), para optimización con restricciones.

COBYLA minimiza una función objetivo F(X) sujeta a M restricciones con desigualdades de la forma g(X) >= 0 sobre X, siendo X un vector de variables de N componentes.

Las restricciones en forma de igualdades se pueden implementar por pares de desigualdades de la forma g(X)>=0 y -g(X)>= 0. El interfaz Maxima para COBYLA admite restricciones de igualdad, transformándolas luego internamente a pares de desigualdades.

El algoritmo hace uso de aproximaciones lineales, tanto de la función objetivo como de las funciones de restricción; tales aproximaciones se hacen mediante interpolación lineal de N+1 puntos en el espacio de variables. Los puntos de interpolación se consideran vértices de un simplejo o símplex. El parámetro RHO controla el tamaño del simplejo y se reduce automáticamente de RHOBEG a RHOEND. Para cada RHO la subrutina intenta alcanzar un buen vector de variables para el tamaño actual, reduciéndose entonces RHO hasta alcanzar el valor de RHOEND. Por eso, tanto a RHOBEG como a RHOEND se les deben asignar valores razonables, lo que requiere cierto trabajo empírico previo. La rutina trata cada restricción individualmente cuando se calcula un en las variables. El nombre de la rutina se deriva de la frase Constrained Optimization BY Linear Approximations.

Referecias:

[1] Código Fortran procede de http://plato.asu.edu/sub/nlores.html#general

[2] M. J. D. Powell, "A direct search optimization method that models the objective and constraint functions by linear interpolation," en Advances in Optimization and Numerical Analysis, eds. S. Gomez and J.-P. Hennart (Kluwer Academic: Dordrecht, 1994), p. 51-67.

[3] M. J. D. Powell, "Direct search algorithms for optimization calculations," Acta Numerica 7, 287-336 (1998). Also available as University of Cambridge, Department of Applied Mathematics and Theoretical Physics, Numerical Analysis Group, Report NA1998/04 from https://web.archive.org/web/20160607190705/http://www.damtp.cam.ac.uk:80/user/na/reports.html


42.2 Funciones y variables para cobyla

Función: fmin_cobyla (F, X, Y)
Función: fmin_cobyla (F, X, Y, optional_args)

Devuelve una aproximación del valor mínimo de la expresión F respecto de las variables X, sujeta a un conjunto opcional de restricciones. Y es una lista que contiene una solución semilla inicial en X.

F debe ser una expresión ordinaria, no valen nombres de funciones ni expresiones lambda.

optional_args hace referencia a argumentos adicionales, que se especifican de la forma symbol = value. Los argumentos opcionales que se reconocen son:

constraints

Lista de restricciones en forma de desigualdades e igualdades que debe satisfacer X. Las desigualdades deben ser de la forma g(X) >= h(X) o g(X) <= h(X). Las restricciones de igualdad deben ser de la forma g(X) = h(X).

rhobeg

Valor inicial de la variable interna RHO, que controla el tamaño del simplejo. Su valor por defecto es 1.0.

rhoend

El valor final deseado para el parámetro RHO. Es aproximadamente la precisión de las variables. Su valor por defecto es 1d-6.

iprint

Nivel de información de salida. Su valor por defecto es 0.

  • 0 - Sin información de salida
  • 1 - Sumario al final de los cálculos
  • 2 - Se van mostrando los nuevos valores de RHO y SIGMA, incluyendo el vector de variables.
  • 3 - Como en 2, pero la información se muestra cuando se calcula F(X).
maxfun

Número máximo de evaluaciones de la función. Su valor por defecto es 1000.

El resultado devuelto es un vector:

  1. Los valores de las variables con las que se alcanza el valor mínimo. Es una lista de elementos de la forma var = value para cada una de las variables listadas en X.
  2. El valor mínimo de la función objetivo.
  3. El número de evaluaciones de la función.
  4. Código de retorno con los siguientes significados:
    1. 0 - No ha habido errores.
    2. 1 - Alcanzado el máximo número permitido de evaluaciones de la función.
    3. 2 - Errores de redondeo han impedido el avance del proceso.

El código load("fmin_cobyla") carga en memoria esta función..

Función: bf_fmin_cobyla (F, X, Y)
Función: bf_fmin_cobyla (F, X, Y, optional_args)

Esta función es idéntica a fmin_cobyla, excepto por el hecho de que utiliza aritmética de precisión arbitraria (bigfloat) y que el valor por defecto de rhoend es 10^(fpprec/2).

Véase fmin_cobyla.

El código load("fmin_cobyla") carga en memoria esta función..


42.3 Ejemplos para cobyla

Minimizar x1*x2 bajo la condición 1-x1^2-x2^2 >= 0. La solución teórica es x1 = 1/sqrt(2), x2 = -1/sqrt(2).

(%i1) load("fmin_cobyla")$

(%i2) fmin_cobyla(x1*x2, [x1, x2], [1,1], constraints = [x1^2+x2^2<=1], iprint=1);

   Normal return from subroutine COBYLA

   NFVALS =   66   F =-5.000000E-01    MAXCV = 1.999845E-12
   X = 7.071058E-01  -7.071077E-01
(%o2) [[x1 = 0.70710584934848, x2 = - 0.7071077130248], - 0.49999999999926, 
       [[-1.999955756559757e-12],[]], 66]

Hay más ejemplos en el directorio share/cobyla/ex.


Siguiente: , Anterior:   [Índice general][Índice]