close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Changes between Version 8 and Version 9 of OfficialTolArchiveNetworkNonLinGloOpt


Ignore:
Timestamp:
Dec 1, 2010, 2:44:29 PM (14 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OfficialTolArchiveNetworkNonLinGloOpt

    v8 v9  
    4040== Guia del usuario ==
    4141
     42Los problemas se definirán como una instancia de {{{Class @Problem}}} definida en [source:/tolp/OfficialTolArchiveNetwork/NonLinGloOpt/problem.tol problem.tol] 
     43
    4244=== Formulación de funciones objetivo y de restricción ===
    4345
     
    4951}}}
    5052
    51 En el caso de que se quiera usar un método que precise el gradiente, no se
     53siendo tanto {{{x}}} como {{{gradient}}} matrices de {{{n}}} filas y 1 columna.
     54
     55Aún en el caso de que se quiera usar un método que precise el gradiente, no 
    5256necesariamente se exigirá calcular el mismo cada vez que se quiera evaluar
    5357la función. En tales casos se le pasará la matriz vacía para indicar que
     
    9094}}}
    9195
     96=== Características obligatorias en la definición del problema  ===
     97
     98{{{
     99#!cpp
     100//If you sign ==- 1 minimized, and if sign == 1 maximizes
     101  Real sign;         
     102 
     103//If true, a global optimal point will be searched. Else just a
     104//local one.
     105  Real neededGlobal; 
     106 
     107//Minimum analytical class of target and constraining functions must be one
     108//of elements of
     109//Set NonLinGloOpt::AnalyticalClass =
     110//{[[
     111//  Real ARBITRARY            = -1,  // Arbitrary functions
     112//  Real CONTINUOUS           =  0,  // Class C_0: Continuous
     113//  Real DIFFERENTIABLE       =  1,  // Class C_1: Differentiable
     114//  Real TWICE_DIFFERENTIABLE =  2   // Class C_2: Twice differentiable
     115//]]};
     116  Real id_analyticalClass;
     117
     118//Indicates if the gradient known or unknown in an analytical or
     119//numerical way. Must be one element of
     120//Set NonLinGloOpt::GradientKnowneledge =
     121//[[
     122//Real NONE        = 0,  //Doesn't exists or it's too hard to calculate
     123//Real ANALITICAL  = 1,  //Use analitical gradient
     124//Real NUMERICAL   = 2   //Use numerical gradient
     125//]];
     126  Real id_useGradient; 
     127 
     128//Target function could be a simple Code or a class method of an
     129//instance owner.
     130// - Real target(Matrix x, Matrix gradient)
     131// - Set target = [[NameBlock owner, Code method]]
     132//When argument gradient is not empty, then the function, or the
     133//method must update it.
     134  Anything target;
     135
     136//Initial values of variables
     137  Matrix x0;       
     138
     139}}}
     140
     141=== Características opcionales en la definición del problema  ===
     142
     143Hay otra serie de carcterísticas del problema que son opcionales pues o bien tienen
     144un valor por defecto predefinido o bien existe un método interno que les da un valor
     145adecuado.
     146{{{
     147#!cpp
     148//Optimization method. If not specified the system will choose one
     149//by calling method select_automatic_algorithm
     150  Real id_algorithm = ?;  //Numerical identifier NonLinGloOpt::Algorithm
     151  Text co_algorithm = ""; //Codified name
     152
     153//Lower bounds of the variables (-1/0 if none)
     154  Matrix lower_bounds = Rand(0,0,0,0);
     155
     156//Variable upper bounds (+1/0 if none)
     157  Matrix upper_bounds = Rand(0,0,0,0);
     158
     159//Set of inequality constraints g(x)<=0
     160//Conjunto de elementos Code o [[NameBlock owner, Code target]] para métodos
     161//Constraining function could be a simple Code or a class method of an
     162//instance owner.
     163// - Real g (Matrix x, Matrix gradient)
     164// - Set g = [[NameBlock owner, Code method]]
     165//When argument gradient is not empty, then the function, or the
     166//method must update it.
     167  Set inequations = Copy(Empty);
     168
     169//Set of equality constraints h(x)<=0
     170//Conjunto de elementos Code o [[NameBlock owner, Code target]] para métodos
     171//Constraining function could be a simple Code or a class method of an
     172//instance owner.
     173// - Real h (Matrix x, Matrix gradient)
     174// - Set h = [[NameBlock owner, Code method]]
     175//When argument gradient is not empty, then the function, or the
     176//method must update it.
     177  Set equations = Copy(Empty);   
     178
     179//Tolerance for the evaluation of inequality constraints
     180  Real inequationTolerance = 1E-8;
     181
     182//Tolerance for the evaluation of the equality constraints
     183  Real equationTolerance = 1E-8;
     184
     185//Relative tolerance of the stop criteria
     186  Real relativeTolerance = 1E-6;
     187
     188//Maximum run time
     189  Real maxTime = ?;
     190
     191//If verboseEach>0, evaluation of target funciton will be traced
     192//each the specified number of evaluations.
     193  Real verboseEach = 100;
     194
     195}}}
     196
     197
     198=== Creación y lanzamiento de la optimización ===
     199
     200Una vez definido un problema hay que crear el motor de optimización como una instancia de {{{Class @Opt}}} definida en [source:/tolp/OfficialTolArchiveNetwork/NonLinGloOpt/opt.tol opt.tol]
     201{{{
     202#!cpp
     203//Creating the optimizer instance
     204NonLinGloOpt::@Opt opt = problem::create_optimizer(?);
     205}}}
     206
     207y finalmente se llamará al método de optimización para que ejecute el algoritmo
     208
     209{{{
     210#!cpp
     211//Running the optimization
     212Real opt::optimize_problem(problem);
     213}}}
     214
     215Entre medio de ambas acciones, el usuario avanzado puede retocar la instancia
     216{{{opt}}} mediante los métodos de {{{@Opt}}}, cada uno de los cuales implementa
     217los métodos de la clase C++ interna {{{nlopt::opt}}} cuya API puede verse
     218[http://ab-initio.mit.edu/wiki/index.php/NLopt_C-plus-plus_Reference aquí]
     219Estos métodos pueden leerse directamente en el [source:/tolp/OfficialTolArchiveNetwork/NonLinGloOpt/opt.tol código TOL] o exporarse en la interfaz de TOLBase.
     220
     221[[Image(source:/tolp/OfficialTolArchiveNetwork/NonLinGloOpt/doc/opt_methods.png)]]
     222
    92223== Tutorial ==
    93224
    94225La mejor forma de aprender a usar cualquier cosa es empezar a usarla de forma
    95226controlada, para lo cual se dispone de una batería de ejemplos a disposición de
    96 los usuairos.
     227los usuarios.
    97228
    98229=== Función objetivo bivariante no lineal con restricciones de desigualdad no lineal ===
     
    200331{{{
    201332#!cpp
    202 #Require NonLinGloOpt;
    203333
    204334//Creating the optimizer instance
     
    248378
    249379 
     380
     381
     382