/*
Modèle de fichier pour les modèles compilés Netral
Le modèle utilisé est model0
*/
#include <stdio.h>
#include <stdlib.h>
#include "model0DLM.h"
#include "model0tfr.h"
#include "model0Grd.h"
EXPORT int __stdcall init (char *arg)
{
return model0loadw(NULL);
}
EXPORT int __stdcall close(void)
{
return 0;
}
EXPORT int __stdcall getauthorcode(void)
{
return 1;
}
EXPORT int __stdcall getinfo(int InfoParam)
{
switch(InfoParam){
case 1:
return model0INPUTS; // Nombre d'entrées
case 2:
return model0OUTPUTS; // Nombre de sorties
case 3:
return model0SYNAPSES; // Nombre de paramètres
case 4:
return 3; // Normabilité
default: return 0;
}
}
EXPORT int __stdcall transfer(double *VEntree, double *VSortie)
{ // Fonction de transfert
model0transfer(VEntree, VSortie);
return 0;
}
EXPORT int __stdcall setparam(double *Source)
{ // Ecriture des paramètres
memmove(model0weights, Source, model0SYNAPSES*sizeof(double));
return 0;
}
EXPORT int __stdcall getparam(double *Cible)
{ // Lecture des paramètres
memmove(Cible, model0weights, model0SYNAPSES*sizeof(double));
return 0;
}
EXPORT int __stdcall getgradient(double *VEntree, double *VGradient, int OutputIndex)
{ // Calcul du gradient
double iniback[model0OUTPUTS];
double outputs[model0OUTPUTS];
iniback[OutputIndex] = 1;
model0transfergradient(model0weights, VEntree, outputs, VGradient, iniback);
return 0;
}
EXPORT int __stdcall gethessian(double *VEntree, double *Hessien, int OutputIndex)
{ // Calcul du Hessien
return -2;
}
EXPORT int __stdcall getexperimentalspace(double *Cible)
{ // Lecture du domaine expérimental
double* temp;
int i;
for (i=0; i < model0INPUTS; i++){
temp = model0inputrange(i);
Cible[2*i] = temp[0];
Cible[2*i+1] = temp[1];
}
return 0;
}
EXPORT int __stdcall getinputgradient(double *VEntree, double *VGradient, int OutputIndex)
{ // Calcul du gradient relatif aux entrées
double iniback[model0OUTPUTS];
double outputs[model0OUTPUTS];
iniback[OutputIndex] = 1;
model0transfergradientinput(model0weights, VEntree, outputs, VGradient, iniback);
return 0;
}
EXPORT int __stdcall getiniparams(int Index, double *IniMean, double *IniDev)
{ // Lecture des conditions d'initialisation des paramètres
double* temp=NULL;
temp = model0getweightini(Index);
if (temp){
*IniMean = temp[0];
*IniDev = temp[1];
return 0;
} else
return -3;
}
EXPORT int __stdcall getparamspace(double *Cible)
{ // Lecture du domaine paramétrique
return -2;
}
EXPORT int __stdcall getfindiff(double *FiniteDiff)
{ // Lecture de la différence finie
return -2;
}
EXPORT int __stdcall getmsg(char *Dest, int Index)
{ // Lecture des messages
return -2;
}
EXPORT int __stdcall getname(char *Dest, int Style, int Index)
{ // Lecture des noms
int res = 0;
char* PC;
switch(Style){
// case 0: Nom du modèle
case 0: PC = "model0"; break;
case 1: PC = (char*)model0inputname(Index); break;
case 2: PC = (char*)model0outputname(Index); break;
case 3: PC = (char*)model0weightname(Index); break; // Noms des paramètres
default: res = -2;
}
if (res == 0)
if (Dest)
strcpy(Dest, PC);
else
res = strlen(PC);
return res;
}
NETRAL - Neuro Code 6