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 5 and Version 6 of OfficialTolArchiveNetworkNonLinGloOpt


Ignore:
Timestamp:
Dec 1, 2010, 11:57:03 AM (14 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OfficialTolArchiveNetworkNonLinGloOpt

    v5 v6  
    3232Obsérvese que si lo que se quiere es minimizar la función objetivo basta con tomar la función opuesta [[LatexEquation( -f(x) )]].
    3333
    34 
     34Nótese que a ninguna de las funciones se le ha exigido ser diferenciable y ni tan siquiera continua, aunque como se verá más tarde el usuario deberá informar de qué clase analitica es el problema para poder saber qué métodos son aplicables.
    3535
    3636== Guia del usuario ==
    3737
     38=== Formulación de funciones objetivo y de restricción ===
     39
     40Tanto si se calcula el gradiente como si no, las funciones objetivo y las de restricción deben tener la API TOL general común a todas ellas:
     41
     42{{{
     43#!cpp
     44Real eval (Matrix x, Matrix gradient)
     45}}}
     46
     47En el caso de que se quiera usar un método que precise el gradiente, no se
     48necesariamente se exigirá calcular el mismo cada vez que se quiera evaluar
     49la función. En tales casos se le pasará la matriz vacía para indicar que
     50no se haga el cálculo. Podría pensarse si no sería mejor hacer una función
     51para la evaluación de la función y otra para el gradiente, pero resulta que
     52muy a menudo el cálculo del gradiente utiliza en parte las mismas componentes
     53que la propia función, por lo que resulta más eficiente que se calculen de
     54forma conjunta. La función de evaluación debería por tanto tener este aspecto:
     55
     56{{{
     57#!cpp
     58Real eval (Matrix x, Matrix gradient)
     59{
     60  ...
     61  Real y = ...;
     62  Real If(Rows(grad), {
     63    ...
     64    Matrix grad := ...;
     65    True
     66  });
     67  y
     68};
     69}}}
     70
     71Si el problema no es diferenciable o el cálculo del gradiente es muy costoso
     72y se van a usar sólo algoritmos que no requieren el cálculo del gradiente,
     73entonces se puede hacer caso omiso del argumento {{{ Matrix gradient }}} y
     74calcular sólo el valor de la función.
    3875
    3976== Tutorial ==
     
    4582=== Función objetivo bivariante no lineal con restricciones de desigualdad no lineal ===
    4683
    47 En el test se describe la solución TOL del sencillo [http://ab-initio.mit.edu/wiki/index.php/NLopt_Tutorial ejemplo] proporcionado por el propio NLopt.
     84En primer lugar se expondrá el [http://ab-initio.mit.edu/wiki/index.php/NLopt_Tutorial ejemplo] proporcionado en el tutorial de NLopt
     85
     86==== Función objetivo ====
     87{{{
     88#!cpp
     89////////////////////////////////////////////////////////////////////////////////
     90//Target function defined as simple code
     91Real my_function(Matrix x, Matrix grad)
     92////////////////////////////////////////////////////////////////////////////////
     93{
     94  Real y = Sqrt(MatDat(x,2,1));
     95  Real If(Rows(grad), {
     96    Matrix grad := Col(0.0,0.5/y);
     97    True
     98  });
     99  y
     100};
     101}}}
     102
     103==== Restricciones de desigualdad ====
     104{{{
     105#!cpp
     106////////////////////////////////////////////////////////////////////////////////
     107//When a set of constraining functions are part of a parametric family
     108//of funcitons we can define a class to make an easier definition
     109Class @my_inequation
     110////////////////////////////////////////////////////////////////////////////////
     111{
     112  Real a;
     113  Real b;
     114  Real constraint(Matrix x, Matrix grad)
     115  {
     116    Real x1 = MatDat(x,1,1);
     117    Real x2 = MatDat(x,2,1);
     118    Real ax1b = a*x1 + b;
     119    Real If(Rows(grad), {
     120      Matrix grad := Col(3 * a * ax1b^2,-1.0);
     121      True
     122    });
     123    Real g = (ax1b^3 - x2);
     124    g
     125  }
     126};
     127
     128////////////////////////////////////////////////////////////////////////////////
     129//Inequality constraining functions defined as class instances
     130////////////////////////////////////////////////////////////////////////////////
     131@my_inequation ineq1 = [[Real a= 2,Real b=0]];
     132@my_inequation ineq2 = [[Real a=-1,Real b=1]];
     133
     134}}}
    48135 
    49136
     
    85172
    86173 
    87 
    88