/*
   C code library for neuron network training
   Librairie de code C pour l'apprentissage d'un réseau de neurones
   File : model0trn.h
*/
#ifndef model0_TRAIN_H
#define model0_TRAIN_H

  #define code_toohighcost      1
  #define code_dataaccessdenied 2
  #define code_dvserror         3
  #define code_reverseerror     4

  #include "netraltype.h"

  /* Enumeration of train end causes */
  /* Enumeration des motifs de fin d'apprentissage */
  enum ttrainend {teNone=0, teTarget, teEpoch, teAccuracy, teHighWeight, teError,
      teUserDemand};
      
  extern real* VData; /* Training Data /* Données d'apprentissage*/
  extern real* VDataValid; /* Validation Data *//* Données de validsation */
  extern real* VHII; /* Hii Table /*//* Table des Hii */

  extern long DataCount; /* Number of training record *//* Nombre de données d'apprentissage */
  extern long ValidDataCount; /* Number of Validayion record *//* Nombre de données de validation */
  extern real CurCost; /* Current Training Cost *//* Coût d'apprentissage courant */
  extern real GenCost[model0OUTPUTS]; /* Generalisation Cost Vector *//* Vecteur de coût de généralisation */
  extern real TrainCost[model0OUTPUTS]; /* Coûts d'apprentissage par sorties */
  extern real JacobRank[model0OUTPUTS]; /* Rang du Jacobien par sortie */
  extern long WeightLimited; /* Limitation des poids */

#ifdef __cplusplus
  extern "C" {
#endif  
  
  /*Module   : model0Trn
  Method     : model0getcost
  Visibility : Public
  Arguments  : long *code -> code d'erreur
  Return     : real

  Description: calcul du coût sur l'ensemble d'apprentissage, avec les poids
    par défaut. Les données d'apprentissage doivent avoir été enregistrées*/
  real model0getcost(long*);

  /*Module   : model0Trn
  Method     : model0getcostw
  Visibility : Public
  Arguments  : real *weights -> poids courants
               int *code -> code d'erreur
  Return     : real

  Description: calcul du coût sur l'ensemble d'apprentissage, avec les poids
    fournis. Les données d'apprentissage doivent avoir été enregistrées*/
  real model0getcostw(real*, long*);

  /*Module   : model0Trn
  Method     : model0GetData
  Visibility : Public
  Arguments  : int Index -> indice de la donnée dans le tableau
               real *DataLoc -> pointeur sur tableau de real. Le tableau
                 pointé doit porter les entrées puis les sorties.
  Return     : long -> 0 si OK, sinon code_dataaccessdenied

  Description: Copie les données désignées dans le tableau de données*/
  long model0getdata(long, real*);

  /*Module   : model0Trn
  Method     : model0getdatavalid
  Visibility : Public
  Arguments  : long Index -> indice de la donnée dans le tableau
               real *DataLoc -> pointeur sur tableau de real. Le tableau
                 pointé doit porter les entrées puis les sorties.
  Return     : long -> 0 si OK, sinon code_dataaccessdenied

  Description: Copie les données désignées dans le tableau de données de
      validation*/
  long model0getdatavalid(long, real*);

  /*Module   : model0Trn
  Method     : model0GetGenCost
  Visibility : Public
  Arguments  : real *Homogen -> homogénéité des Hii
               long *code -> code d'erreur
  Return     : real -> le cout de généralisation.

  Description: Calcule le Coût de généralisation et l'homogénéité.
    Utilise les poids et la matrice de dispersion par défaut */
  real model0getgencost(real*, long*);

  /*Module   : model0Trn
  Method     : model0GetGenCostw
  Visibility : Public
  Arguments  : real *weights -> poids courants
               real *ZMat -> matrice ZtZ inverse courante
               real *Homogen -> homogénéité des Hii
               long *code -> code d'erreur
  Return     : real -> le cout de généralisation.

  Description: Calcule le Coût de généralisation et l'homogénéité.
    Utilise les poids et la matrice de dispersion fournis */
  real model0getgencostw(real*, real*, real*, long*);

  /*Module   : model0Trn
  Method     : model0getvalidcost
  Visibility : Public
  Arguments  : long *code -> code d'erreur
  Return     : real

  Description: calcul du coût sur l'ensemble de validation.
    Utilise les poids par défaut. */
  real model0getvalidcost(long*);

  /*Module   : model0Trn
  Method     : model0getvalidcostw
  Visibility : Public
  Arguments  : real *weights -> poids courants
               long *code -> code d'erreur
  Return     : real

  Description: calcul du coût sur l'ensemble de validation. 
    Utilise les poids fournis.*/
  real model0getvalidcostw(real*, long*);

  /*Module   : model0Trn
  Method     : model0Free;
  Visibility : Public
  Arguments  : 
  Return     : None

  Description: procedure de libération de la mémoire allouée par model0Init

  Cette procédure doit être appellée après toute utilisation de ce code  */
  void model0free(void);

  /*Module   : model0Trn
  Method     : model0Init
  Visibility : Public
  Arguments  : long ADataCount -> Nombre d'exemples de l'ensemble d'apprentissage
               long AValidDataCount -> Nombre d'exemples de l'ensemble de validation
               real *AVData -> tableau des données d'apprentissage
               real *AVDataValid -> tableau des données de validation
  Return     : None

  Description: procédure d'initialisation. Le nombre de données d'apprentissage
    est fixé par ADataCount, et le nombre de donné"es de validation par
    AValidDataCount.
    AVData est un pointeur sur le tableau de données d'apprentisage.
    AVDataValid est un pointeur sur le tableau de données de validation.
    Si AVData est non nul, le programme pointe VData sur le tableau fourni
    crée un tableau interne de données

  Cette procédure doit être appellée avant toute autre utilisation de ce code  */
  long model0init(long, long, real*, real*);

  /*Module   : model0Trn
  Method     : model0iniweights
  Visibility : Public
  Arguments  : env: real -> le paramètre d'initialisation
  Return     : None

  Description: Initialise les poids par défaut par un valeur aléatoire de densité 
    de probabilité uniforme entre -env et env.

  note : Cette méthode d'initialisation utilise le générateur de nombre aléatoire
    de l'implémentation utilisée. */
  void model0iniweights(real);

  /*Module   : model0Trn
  Method     : model0iniweightsw
  Visibility : Public
  Arguments  : real *weights -> les pids courants à initialiser
               env: real -> le paramètre d'initialisation
  Return     : None

  Description: Initialise les poids par un valeur aléatoire de densité de
    probabilité uniforme entre -env et env.

  note : Cette méthode d'initialisation utilise le générateur de nombre aléatoire
    de l'implémentation utilisée. */
  void model0iniweightsw(real*, real);

  /*Module   : model0Trn
  Method     : model0setleverages
  Visibility : Public
  Arguments  : long *code -> code d'erreur
  Return     : real -> le coût de généralisation

  Description: Calcule le Jacobien, la matrice (ZtZ)Inv, le rang du Jacobien,
    puis les leviers. Utilise les poids par défaut, et renseigne la matrice 
    de dispersion par défaut.*/
  real model0setleverages(long *code);

  /*Module   : model0Trn
  Method     : model0setleveragesw
  Visibility : Public
  Arguments  : real *weights -> les poids courants
               real *ZMat -> la matrice ZtZ inverse à calculer
               long *code -> code d'erreur
  Return     : real -> le coût de généralisation

  Description: Calcule le Jacobien, la matrice (ZtZ)Inv, le rang du Jacobien,
    puis les leviers. */
  real model0setleveragesw(real*, real*, long*);

  /*Module   : model0Trn
  Method     : model0trainw
  Visibility : Public
  Arguments  : real *weights -> les poids courants
               long *Nb -> nombre d'époques remandées/ réalisées
               long *TrainEnd -> Motif de l'arrêt d'apprentisage.
               real *Cost -> valeur du coût en fin d'apprentisage.
  Return     : 0 si Ok, sinon, code d'erreur.

  Description: Lancement d'un apprentissage avec les pids fournis. Le nombre 
    d'époques demandées est Nb. En retour, Nb porte le nombre d'époques effectivement 
    réalisées. Le motif de l'arret est porté par la variable TrainEnd. */
  long model0trainw(real*, long*, long*, real*);

  /*Module   : model0Trn
  Method     : model0trainw
  Visibility : Public
  Arguments  : long *Nb -> nombre d'époques remandées/ réalisées
               long *TrainEnd -> Motif de l'arrêt d'apprentisage.
               real *Cost -> valeur du coût en fin d'apprentisage.
  Return     : 0 si Ok, sinon, code d'erreur.

  Description: Lancement d'un apprentissage avec les poids par défaut. Le nombre 
    d'époques demandées est Nb. En retour, Nb porte le nombre d'époques effectivement 
    réalisées. Le motif de l'arret est porté par la variable TrainEnd. */
  long model0train(long*, long*, real*);

  /*Module   : model0Trn
  Method     : model0trainingstep
  Visibility : Public
  Arguments  : real* weights -> les poids courants
               long* fini -> vrai: apprentissage terminé
               long* code -> code d'erreur
  Return     : long -> la valeur de *fini */
  long model0trainingstep(real *, long, long*, long*, long*);

  /*Module   : model0Trn
  Method     : model0gethii
  Visibility : Public
  Arguments  : long index -> indice de l'exemple dont on veut le levier
  Return     : Retourne le levier de l'exemple désigné. */
  real model0gethii(long);

#ifdef __cplusplus
  };
#endif  
  
#endif



NETRAL - Neuro Code 6