$$$$ MMA      NOTICE  FD218221  26/10/07    21:15:08     12662          
                                             DATE     26/10/07
Section : Mathematiques Fonctions
==============================================================

     Operateur MMA               Voir aussi : EXCE LEVM MOCA TOPOPTIM
     _____________                            MOCA_MMA AJUSTE




FRAN==========================================================

  L'operateur MMA met en oeuvre la methode des asymptotes mobiles,
  "Method of Moving Asymptotes", pour resoudre un probleme d'optimisation
  non lineaire par approximation convexe [1] [2].

  Les variables sont :
  x = [x_1 ... x_n]  (dimension n) variables reeles
  y = [y_1 ... y_m]  (dimension m) variables artificielles d'ecart
  z                                variable  artificielle  d'ajustement

  Le probleme "generique" est :

      Minimiser : f_0(x) + a_0*z + Somme [ c_i*y_i + 0.5*d_i*(y_i)^2 ] (fonction objectif)
      sur x,y,z                   i=1,...,m

       soumis a : f_i(x) - a_i*z - y_i <= 0  pour i = 1,...,m (fonctions contraintes)
                  xmin_j <= x_j <= xmax_j    pour j = 1,...,n (bornes des variables)
                  z >= 0    y_i >= 0         pour i = 1,...,m


  Cette formulation generique permet de traiter, dans le meme cadre,
  plusieurs problemes "classiques" d'optimisation, comme par exemple :
   
  - un probleme "standard" de minimisation sous contraintes :
        Minimiser : f_0(x)
         soumis a : f_i(x) <= 0  pour i = 1,...,m

  - un probleme "min-max" sur un groupe de fonctions :
        Minimiser : Max{h_i(x)}  pour i = 1,...,p
         soumis a : g_i(x) <= 0  pour i = 1,...,q

  - un probleme des "moindres carres" sous la forme :
        Minimiser : 0.5 * Somme  [ (h_i(x))^2 ]
                        i=1,...,p
         soumis a : g_i(x) <= 0  pour i = 1,...,q

  Plus d'informations sont disponibles dans la section "Remarques".



     Syntaxe :
     ---------

     MMA TAB1 ;



     Objet :
     -------

  L'operateur permet d'effectuer une iteration d'optimisation par la MMA
  a partir de la donnee de :
  -- un point de depart x
  -- l'evaluation de la fonction f_0(x) et des fonctions f_i(x)
  -- l'evaluation de leurs gradients :
     -- gadients de f_0, par rapport a toutes les variables x_j, en x
     -- gradients des f_i, par rapport a toutes les variables x_j, en x

  La nouvelle variable optimisiee x' est rendue et peut alors servir a :
  -- evaluer a nouveau les fonctions et leurs gradients en x'
  -- effectuer une nouvelle iteration de MMA
  -- evaluer un critere de convergence global
  -- etc...

  Exemples d'utilisation :
  -- petite taille (peu de variables)         :   mma_**.dgibi
                                                gcmma_**.dgibi
  -- grande taille (optimisation topologique) : top_mma.dgibi



     Arguments d'entree (obligatoires) :
     -----------------------------------

  TAB1              : TABLE contenant les donnees du probleme
                      d'optimisation

  TAB1 . 'X'        : LISTREEL (dimension n)
                      valeurs de depart des variables x_j
  TAB1 . 'XMIN'     : LISTREEL (dimension n) ou FLOTTANT
                      bornes inferieures des x_j
                      si un FLOTTANT est donne, la meme borne
                      est imposee pour tous les x_j
  TAB1 . 'XMAX'     : LISTREEL (dimension n) ou FLOTTANT
                      bornes superieures des x_j
                      si un FLOTTANT est donne, la meme borne
                      est imposee pour tous les x_j
  TAB1 . 'F0VAL'    : FLOTTANT
                      valeur de la fonction objectif f_0 (au point x)
  TAB1 . 'DF0DX'    : LISTREEL (dimension n)
                      gradient de f_0 par rapport au variables x_j
                      (au point x)
  TAB1 . 'FVAL'     : LISTREEL (dimension m)
                      valeurs des fonctions contraintes f_i
                      (au point x)
  TAB1 . 'DFDX'     : gradients des fonctions contraintes f_i,
                      2 types possibles, TABLE ou LISTOBJE :
                      - TABLE contenant m indices ENTIER :
                        . 1 : LISTREEL (dimension n), gradient de f_1
                               par rapport au variables x_j (au point x)
                         ...
                         ...
                        . m : LISTREEL (dimension n), gradient de f_m
                               par rapport au variables x_j (au point x)
                      - LISTOBJE contenant m objets LISTREEL de dimension n.
                        La ieme liste contenant le gradient de f_i par
                        rapport aux variables x_j (au point x)



     Arguments d'entree (facultatifs) :
     ----------------------------------

  TAB1 . 'ITER'     : ENTIER (facultatif), numero de l'iteration
                      courante ( = 1 au premier appel a MMA)
                      par defaut, pris egal a 1
  TAB1 . 'XOLD1'    : LISTREEL (facultatif, dimension n)
                      contenant les valeurs 'X', 1 iteration precedente
                      (a condition que 'ITER' > 1)
                      par defaut, pris egal à 'X'
  TAB1 . 'XOLD2'    : LISTREEL (facultatif, dimension n)
                      contenant les valeurs 'X', 2 iterations precedentes
                      (a condition que 'ITER' > 2)
                      par defaut, pris egal à 'XOLD1'
  TAB1 . 'LOW'      : LISTREEL (facultatif, dimension n)
                      valeurs des asymptotes inferieures a l'iteration
                      precedente (a condition que 'ITER' > 1)
                      par defaut, pris egale a 'XMIN'
  TAB1 . 'UPP'      : LISTREEL (facultatif, dimension n)
                      valeurs des asymptotes superieures a l'iteration
                      precedente (a condition que 'ITER' > 1)
                      par defaut, pris egale a 'XMAX'
  TAB1 . 'A0'       : FLOTTANT (facultatif)
                      coefficient dans l'equation a_0*z du probleme
                      par defaut, pris egal a 1.
  TAB1 . 'A'        : LISTREEL (facultatif, dimension m) ou FLOTTANT
                      coefficients dans l'equation a_i*z du probleme
                      par defaut, pris egal a [0.  0. ..., 0.]
                      si un FLOTTANT est donne, le meme coefficient
                      est impose pour tous les a_i
  TAB1 . 'C'        : LISTREEL (facultatif, dimension m) ou FLOTTANT
                      coefficients dans l'equation c_i*y_i du probleme
                      par defaut, pris egal a [10000. 10000. ... 10000.]
                      si un FLOTTANT est donne, le meme coefficient
                      est impose pour tous les c_i
  TAB1 . 'D'        : LISTREEL (facultatif, dimension m) ou FLOTTANT
                      coefficients dans l'equation 0.5*d_i*(y_i)^2 du probleme
                      par defaut, pris egal a [1. 1. ... 1.]
                      si un FLOTTANT est donne, le meme coefficient
                      est impose pour tous les d_i
  TAB1 . 'MOVE'     : FLOTTANT (facultatif)
                      taille maximale de l'increment des variables
                      par defaut, pris egal a 0.1
  TAB1 . 'ALBEFA'   : FLOTTANT (facultatif)
                      pourcentage d'ecart par rapport aux bornes
                      ALFA/BETA du sous-probleme convexe
                      par defaut, pris egal a 0.1
  TAB1 . 'RAA0'     : FLOTTANT (facultatif)
                      parametre de conservatisme/courbure de l'objectif
                      du sous probleme convexe
                      par defaut, pris egal a 0.00001
  TAB1 . 'ASYINIT'  : FLOTTANT (facultatif)
                      facteur d'initialisation des asymptotes LOW/UPP
                      du sous probleme convexe
                      par defaut, pris egal a 0.5
  TAB1 . 'ASYINCR'  : FLOTTANT (facultatif)
                      facteur d'eloignement des asymptotes LOW et UPP
                      du sous probleme convexe
                      par defaut, pris egal a 1.2
  TAB1 . 'ASYDECR'  : FLOTTANT (facultatif)
                      facteur de rapprochement des asymptotes LOW et UPP
                      du sous probleme convexe
                      par defaut, pris egal a 0.7
  TAB1 . 'ASYMIN'   : FLOTTANT (facultatif)
                      limite inferieure de la distance entre les
                      asymptotes LOW et UPP du sous probleme convexe
                      par defaut, pris egal a 0.01
  TAB1 . 'ASYMAX'   : FLOTTANT (facultatif)
                      limite superieure de la distance entre les
                      asymptotes LOW et UPP du sous probleme convexe
                      par defaut, pris egal a 10.
  TAB1 . 'EPSIMIN'  : FLOTTANT (facultatif)
                      tolerance de convergence pour la resolution du
                      sous probleme
                      par defaut, pris egal a 0.0000001



     Arguments d'entree pour la GC-MMA (facultatifs) :
     -------------------------------------------------

  TAB1 . 'GC'       : LOGIQUE (facultatif), egal a VRAI pour utiliser la
                      GC-MMA, version "Globalement Convergente" [2].
                      par defaut, pris egal a FAUX
  TAB1 . 'RAA'      : LISTREEL (facultatif, dimension m), parametres de
                      conservatisme/courbure des contraintes du sous
                      probleme convexe
                      par defaut, pris egal a [0.00001 0.00001 ... 0.00001]



     Arguments de sortie (les indices suivants sont ecrases) :
     ---------------------------------------------------------

  TAB1 . 'X'        : LISTREEL (dimension n)
                      valeurs optimisees des variables reeles x_j
                      les valeurs precedentes sont deplacees dans
                      l'indice 'XOLD1'
  TAB1 . 'XOLD1'    : LISTREEL (dimension n)
                      valeurs de 'X' 1 iteration precedente
                      les valeurs precedentes sont deplacees dans
                      l'indice 'XOLD2'
  TAB1 . 'XOLD2'    : LISTREEL (dimension n)
                      valeurs de 'XOLD1' 1 iteration precedente,
                      correspond a 'X' 2 iterations precedentes
  TAB1 . 'ITER'     : ENTIER, egal a sa valeur precedente + 1
  TAB1 . 'LOW'      : LISTREEL (dimension n)
                      valeurs des asymptotes inferieures mises a jour
  TAB1 . 'UPP'      : LISTREEL (dimension n)
                      valeurs des asymptotes superieures mises a jour
  TAB1 . 'Y'        : LISTREEL (dimension m)
                      valeurs optimisees des variables d'ecart y_i
                      associees a chaque fonction contrainte f_i
  TAB1 . 'Z'        : FLOTTANT
                      valeur optimisee de la variable d'ajustement z
  TAB1 . 'LAMBDA'   : LISTREEL (dimension m)
                      multiplicateurs de Lagrange associes aux
                      contraintes f_i
  TAB1 . 'XSI'      : LISTREEL (dimension n)
                      multiplicateurs de Lagrange associes aux
                      bornes inferieures xmin_j <= x_j
  TAB1 . 'ETA'      : LISTREEL (dimension n)
                      multiplicateurs de Lagrange associes aux
                      bornes superieures x_j <= xmax_j
  TAB1 . 'MU'       : LISTREEL (dimension m)
                      multiplicateurs de Lagrange associes aux
                      contraintes y_i >= 0
  TAB1 . 'ZET'      : FLOTTANT
                      multiplicateur de Lagrange associes a la
                      contrainte z>= 0
  TAB1 . 'S'        : LISTREEL (dimension m)
                      variables d'ecart associees aux contraintes f_i



     Arguments de sortie pour la GC-MMA :
     ------------------------------------

  TAB1 . 'CONSERV'  : LOGIQUE indiquant si le sous probleme resolu a la derniere
                      sous iteration est conservatif
  TAB1 . 'RAA0'     : FLOTTANT, valeur mise a jour du parametre de
                      conservatisme/courbure de l'objectif du sous probleme convexe
  TAB1 . 'RAA'      : LISTREEL (dimension m), valeurs mises a jour des parametres de
                      conservatisme/courbure des contraintes du sous probleme convexe
  TAB1 . 'WTABLE'   : TABLE des resultats de la derniere sous iteration,
                      tant que le sous probleme n'est pas conservatif
  TAB1 . 'WTABLE' . 'ITER'   : ENTIER numero de la derniere sous iteration
  TAB1 . 'WTABLE' . 'RAA0'   : FLOTTANT valeur de RAA0 utilise a la derniere sous iteration
  TAB1 . 'WTABLE' . 'RAA'    : LISTREEL valeurs de RAA utilisees a la derniere sous iteration
  TAB1 . 'WTABLE' . 'F0APP'  : FLOTTANT valeur  approximee  de la fonction objectif
  TAB1 . 'WTABLE' . 'FAPP'   : LISTREEL valeurs approximees des fonctions contraintes
  TAB1 . 'WTABLE' . 'X'      : LISTREEL valeurs de X a la derniere sous iteration
  TAB1 . 'WTABLE' . 'Y'      : LISTREEL valeurs de Y a la derniere sous iteration
  TAB1 . 'WTABLE' . 'Z'      : FLOTTANT valeur  de Z a la derniere sous iteration
  TAB1 . 'WTABLE' . 'LAMBDA' : LISTREEL valeurs de LAMBDA a la derniere sous iteration
  TAB1 . 'WTABLE' . 'XSI'    : LISTREEL valeurs de XSI a la derniere sous iteration
  TAB1 . 'WTABLE' . 'ETA'    : LISTREEL valeurs de ETA a la derniere sous iteration
  TAB1 . 'WTABLE' . 'MU'     : LISTREEL valeurs de MU a la derniere sous iteration
  TAB1 . 'WTABLE' . 'ZET'    : FLOTTANT valeur  de ZET a la derniere sous iteration
  TAB1 . 'WTABLE' . 'S'      : LISTREEL valeurs de S a la derniere sous iteration



     Remarques :
     -----------

  Ces remarques sont issues de la section "Some practical consideration"
  de l'artice de K. Svanberg.
  Il s'agit de recommandations pour le choix des fonctions contraintes,
  leur mise a l'echelle et des parametres de l'optimisation.

  - Les contraintes f_i(x) <= 0 sont generalement ecritent sous la forme
    g_i(x) <= gmax_i   ce qui correspond a f_i(x) = g_i(x) - gmax_i
    il est recommande de mettre a l'echelle les fonctions de sorte que
    1 ≤ gmax_i ≤ 100
  - Il est recommande de mettre a l'echelle la fonction objectif
    de sorte que 1 ≤ f_0(x) ≤ 100
  - Il est recommande de mettre a l'echelle les variables x_j de sorte
    que 0.1 ≤ xmax_j - xmin_j ≤ 100

  Pour rendre le probleme "generique" (quasiment) equivalent au probleme
  "standard", il faut choisir :
     a_0 = 1
     a_i = 0                 pour i = 1,...,m
     c_i = "un grand nombre" pour i = 1,...,m
     d_i = 1                 pour i = 1,...,m
   ce qui correspond aux valeurs par defaut de ces coefficients.


     Pour plus d'informations :
     --------------------------

  Code original de K. Svanberg (en Matlab) : https://www.smoptit.se/

  Details de fonctionnement et d'implementation de la methode :
  https://people.kth.se/~krille/mmagcmma.pdf


ANGL==========================================================

  The MMA operator implements the Method of Moving Asymptotes [1] [2]
  to solve an nonlinear optimization problem by convex approximation.

  The variables are:
  x = [x_1 ... x_n]  (dimension n) real variables
  y = [y_1 ... y_m]  (dimension m) slack variables
  z                                scaled variable

  The "generic" problem is:

      Minimize: f_0(x) + a_0*z  +  Sum [ c_i*y_i + 0.5*d_i*(y_i)^2 ] (objective function)
     over x,y,z                  i=1,...,m

    subject to: f_i(x) - a_i*z - y_i <= 0  for i = 1,...,m (constraints functions)
                xmin_j <= x_j <= xmax_j    for j = 1,...,n (bounds on the variables)
                z >= 0    y_i >= 0         for i = 1,...,m


  This generic formulation makes it possible to handle, within the same framework,
  several "classical" optimization problems, such as:

  - a constrained "standard" minimization problem:
         Minimize: f_0(x)
       subject to: f_i(x) <= 0  for i = 1,...,m

  - a constrained "min-max" problem:
         Minimize: Max{h_i(x)}  for i = 1,...,p
       subject to: g_i(x) <= 0  for i = 1,...,q

  - a constrained "least squares" problem on the form:
         Minimize: 0.5 * Sum  [ (h_i(x))^2 ]
                        i=1,...,p
       subject to: g_i(x) <= 0  for i = 1,...,q

  More information is available in the "Remarks" section.



     Syntax:
     -------

     MMA TAB1 ;



     Description :
     -------------

  The operator performs an optimization iteration using MMA
  based on the given data:
  -- a starting point x
  -- the evaluation of the function f_0(x) and the functions f_i(x)
  -- the evaluation of their gradients:
     -- gradients of f_0, with respect to all variables x_j, at x
     -- gradients of f_i, with respect to all variables x_j, at x

  The new optimized variable x' is returned and can then be used to:
  -- re-evaluate the functions and their gradients at x'
  -- perform a new MMA iteration
  -- evaluate a global convergence criterion
  -- etc...

  Examples of use:
  -- small problems (with few variables)   :   mma_**.dgibi
                                             gcmma_**.dgibi
  -- large problems (topology optimization): top_mma.dgibi



     Input Arguments (required):
     ---------------------------

  TAB1              : TABLE containing the optimization problem data

  TAB1 . 'X'        : LISTREEL objet (list of n values)
                      initial values of the variables x_j
  TAB1 . 'XMIN'     : LISTREEL object (list of n values) or
                      FLOTTANT (single value)
                      lower bounds of x_j
                      if a FLOTTANT is given, the same bound is
                      imposed for all x_j
  TAB1 . 'XMAX'     : LISTREEL object (list of n values) or
                      FLOTTANT (single value)
                      upper bounds of x_j
                      if a FLOTTANT is given, the same bound is
                      imposed for all x_j
  TAB1 . 'F0VAL'    : FLOTTANT
                      value of the objective function f_0 (at point x)
  TAB1 . 'DF0DX'    : LISTREEL (list of n values)
                      gradient of f_0 with respect to variables x_j
                      (at point xval)
  TAB1 . 'FVAL'     : LISTREEL (list of m values)
                      values of constraint functions f_i
                      (at point xval)
  TAB1 . 'DFDX'     : gradients of the constraint functions f_i,
                      2 types possible, TABLE or LISTOBJE:
                      - TABLE containing m integer indices:
                        . 1 : LISTREEL (list of n values), gradient of f_1
                              with respect to variables x_j (at point x)
                        ...
                        ...
                        . m : LISTREEL (list of n values), gradient of f_m
                              with respect to variables x_j (at point x)
                      - LISTOBJE containing m LISTREEL objects of dimension n.
                        The i-th list contains the gradient of f_i with
                        respect to the variables x_j (at point x)



     Input Arguments (optional):
     ---------------------------

  TAB1 . 'ITER'     : ENTIER (integer, optional), number of the current
                      iteration ( = 1 on the first call to MMA)
                      default value is 1
  TAB1 . 'XOLD1'    : LISTREEL (list of n values, optional)
                      containing the 'X' values from 1 previous iteration
                      (provided that 'ITER' > 1)
                      by default, taken as equal to 'X'
  TAB1 . 'XOLD2'    : LISTREEL (list of n values, optional)
                      containing the 'X' values from 2 previous iterations
                      (provided that 'ITER' > 2)
                      by default, taken as equal to 'XOLD1'
  TAB1 . 'LOW'      : LISTREEL (list of n values, optional)
                      values of the lower asymptotes at the previous iteration
                      (provided that 'ITER' > 1)
                      by default, taken as equal to 'XMIN'
  TAB1 . 'UPP'      : LISTREEL (list of n values, optional)
                      values of the upper asymptotes at the previous iteration
                      (provided that 'ITER' > 1)
                      default value: 'XMAX'
  TAB1 . 'A0'       : FLOTTANT (single value, optional)
                      coefficient in equation a_0*z of the problem
                      default value: 1.
  TAB1 . 'A'        : LISTREEL (list of m values, optional) or FLOTTANT (single value)
                      coefficients in the equation a_i*z of the problem
                      default value is [0. 0. ... 0.]
                      if a FLOTTANT (single value) is given, the same coefficient
                      is applied to all a_i
  TAB1 . 'C'        : LISTREEL (list of m values, optional) or FLOTTANT (single value)
                      coefficients in equation c_i*y_i of the problem
                      default value is [1000. 1000. ... 1000.]
                      if a FLOTTANT (single value) is given, the same coefficient
                      is applied to all c_i
  TAB1 . 'D'        : LISTREEL (list of m values, optional) or FLOTTANT (single value)
                      coefficients in the equation 0.5*d_i*(y_i)^2 of the problem
                      default value is [1. 1. ... 1.]
                      if a FLOTTANT (single value) is given, the same coefficient
                      is applied to all d_i
  TAB1 . 'MOVE'     : FLOTTANT (single value, optional)
                      maximam variable step size
                      default value is 0.1
  TAB1 . 'ALBEFA'   : FLOTTANT (optional)
                      percentage deviation from the bounds ALFA/BETA
                      of the convex subproblem
                      default value is 0.1
  TAB1 . 'RAA0'     : FLOTTANT (optional)
                      conservativeness/curvature parameter for the objective
                      of the convex subproblem
                      default value: 0.00001
  TAB1 . 'ASYINIT'  : FLOTTANT (optional)
                      initialization factor for the LOW/UPP asymptotes
                      of the convex subproblem
                      default value: 0.5
  TAB1 . 'ASYINCR'  : FLOTTANT (optional)
                      separation factor for the LOW/UPP asymptotes
                      of the convex subproblem
                      default value: 1.2
  TAB1 . 'ASYDECR'  : FLOTTANT (optional)
                      convergence factor for the LOW/UPP asymptotes
                      of the convex subproblem
                      default value: 0.7
  TAB1 . 'ASYMIN'   : FLOTTANT (optional)
                      lower bound on the distance between the LOW/UPP
                      asymptotes of the convex subproblem
                      default value: 0.01
  TAB1 . 'ASYMAX'   : FLOTTANT (optional)
                      upper bound on the distance between the LOW/UPP
                      asymptotes of the convex subproblem
                      by default, set to 10.
  TAB1 . 'EPSIMIN'  : FLOTTANT (optional)
                      convergence tolerance for solving the subproblem
                      default value is 0.0000001



     Input arguments for GC-MMA (optional):
     --------------------------------------

  TAB1 . 'GC'       : LOGIQUE (logical, optional), equal to VRAI (true)
                      to use the GC-MMA, "Globaly Convergent" [2] version.
                      default value is FAUX (false)
  TAB1 . 'RAA'      : LISTREEL (optional, dimension m),
                      conservativeness/curvature parameters for the
                      convex subproblem
                      by default, set to [0.00001 0.00001 ... 0.00001]



     Output Arguments (the following indices are overwritten):
     ---------------------------------------------------------

  TAB1 . 'X'        : LISTREEL (list of n values)
                      optimized values of real variables x_j
  TAB1 . 'XOLD1'    : LISTREEL (list of n values)
                      values of 'X' 1 previous iteration
  TAB1 . 'XOLD2'    : LISTREEL (list of n values)
                      values of 'XOLD1' 1 previous iteration,
                      corresponds to the values of 'X' 2 previous iterations
  TAB1 . 'ITER'     : ENTIER (integer), equal to its previous value + 1
  TAB1 . 'LOW'      : LISTREEL (list of n values)
                      updated lower asymptotes values
  TAB1 . 'UPP'      : LISTREEL (list of n values)
                      updated upper asymptote values
  TAB1 . 'Y'        : LISTREEL (list of m values)
                      optimzed values of slack variables y_i
  TAB1 . 'Z'        : FLOTTANT (single value)
                      optimzed value of scaled variable z
  TAB1 . 'LAMBDA'   : LISTREEL (list of m values)
                      Lagrange multipliers associated with the
                      constraints on f_i
  TAB1 . 'XSI'      : LISTREEL (list of n values)
                      Lagrange multipliers associated with the
                      lower bounds xmin_j <= x_j
  TAB1 . 'ETA'      : LISTREEL (list of n values)
                      Lagrange multipliers associated with the
                      upper bounds x_j <= xmax_j
  TAB1 . 'MU'       : LISTREEL (list of m values)
                      Lagrange multipliers associated with the
                      constraints on y_i >= 0
  TAB1 . 'ZET'      : FLOTTANT (single value)
                      Lagrange multiplier associated with the
                      constraint z >= 0
  TAB1 . 'S'        : LISTREEL (list of m values)
                      slack variables for the constraints f_i



     Output arguments for GC-MMA:
     ------------------------------------

  TAB1 . 'CONSERV'  : LOGIQUE (logical) indicating whether the subproblem solved
                      in the last sub-iteration is conservative
  TAB1 . 'RAA0'     : FLOTTANT (single value), updated value of the conservativeness/
                      curvature parameter of the convex subproblem's objective
  TAB1 . 'RAA'      : LISTREEL (list of m values), updated values of the conservativeness/
                      curvature parameters of the convex subproblem's constraints
  TAB1 . 'WTABLE'   : TABLE of results from the last sub-iteration,
                      as long as the subproblem is not conservative
  TAB1 . 'WTABLE' . 'ITER'   : ENTIER (integer) number of the last sub-iteration
  TAB1 . 'WTABLE' . 'RAA0'   : FLOTTANT single value of RAA0 used in the last sub-iteration
  TAB1 . 'WTABLE' . 'RAA'    : LISTREEL list of m values of RAA used in the last sub-iteration
  TAB1 . 'WTABLE' . 'F0APP'  : FLOTTANT approximate value of the objective function
  TAB1 . 'WTABLE' . 'FAPP'   : LISTREEL approximate values of the constraint functions
  TAB1 . 'WTABLE' . 'X'      : LISTREEL list of n values of X at the last sub-iteration
  TAB1 . 'WTABLE' . 'Y'      : LISTREEL list of m values of Y at the last sub-iteration
  TAB1 . 'WTABLE' . 'Z'      : FLOTTANT single value of Z at the last sub-iteration
  TAB1 . 'WTABLE' . 'LAMBDA' : LISTREEL list of m values of LAMBDA at the last sub-iteration
  TAB1 . 'WTABLE' . 'XSI'    : LISTREEL list of n values of XSI at the last sub-iteration
  TAB1 . 'WTABLE' . 'ETA'    : LISTREEL list of n values of ETA at the last sub-iteration
  TAB1 . 'WTABLE' . 'MU'     : LISTREEL list of m values of MU at the last sub-iteration
  TAB1 . 'WTABLE' . 'ZET'    : FLOTTANT single value of ZET at the last sub-iteration
  TAB1 . 'WTABLE' . 'S'      : LISTREEL list of m values of S at the last sub-iteration



     Remarks:
     --------

  These remarks are taken from the section "Some practical considerations"
  in K. Svanberg's article.
  They are recommendations for choosing constraint functions (scaling) and
  optimization parameters.

  - The constaints f_i(x) <= 0 are generally written in the form
    g_i(x) <= gmax_i   which corresponds to f_i(x) = g_i(x) - gmax_i
    The user should then preferably scale the constraints in such a way that
    1 ≤ gmax_i ≤ 100
  - The objective function should preferably be scale in such a way that
    1 ≤ f_0(x) ≤ 100
  - The variables x_j should preferably be scaled such that
    0.1 ≤ xmax_j - xmin_j ≤ 100

  To make the "generic" problem (almost) equivalent to the "standard" problem,
  the user should choose:
     a_0 = 1
     a_i = 0                for i = 1,...,m
     c_i = "a large number" for i = 1,...,m
     d_i = 1                for i = 1,...,m
  which corresponds to the default values for these coefficients.


     For more information:
     ---------------------

  Original code by K. Svanberg (in Matlab): https://www.smoptit.se/

  Details on the method and its implementation:
  https://people.kth.se/~krille/mmagcmma.pdf


==============================================================
  References:
  [1] K. Svanberg, The method of moving asymptotes – a new method for
      structural optimization
      International Journal for Numerical Methods in Engineering,
      1987, 24, 359-373.
  [2] K. Svanberg, A class of globally convergent optimization methods
      based on conservative convex separable approximations
      SIAM Journal of Optimization, 2002, 12, 555-573.

$$$$
 
 
