Siguiente: contrib_ode, Anterior: bode [Índice general][Índice]
Siguiente: Funciones y variables para cobyla, Anterior: cobyla, Subir: cobyla [Índice general][Índice]
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
Siguiente: Ejemplos para cobyla, Anterior: Introducción a cobyla, Subir: cobyla [Índice general][Índice]
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.
maxfun
Número máximo de evaluaciones de la función. Su valor por defecto es 1000.
El resultado devuelto es un vector:
var = value
para cada
una de las variables listadas en X.
El código load("fmin_cobyla")
carga en memoria esta función..
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..
Anterior: Funciones y variables para cobyla, Subir: cobyla [Índice general][Índice]
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: contrib_ode, Anterior: bode [Índice general][Índice]