www.pudn.com > BPËã·¨Ô´Âë.zip > ibp.h


/* ****************************************************** */ 
/* file ibp.h: contains definitions for programs that use */ 
/*             16-bit integer weights                     */ 
/*                                                        */ 
/* Copyright (c) 1993 by Donald R. Tveter                 */ 
/*                                                        */ 
/* ****************************************************** */ 
 
#include  
#include  
#include  
#include  
#include  
 
#ifdef DOS16 
#include  
#include  
#include  
#define INT32 long 
#define MAXINT 32767 
#define WRITEBIN "wb" 
#define READBIN "rb" 
#define HOTKEYS 
#endif 
 
#ifdef DOS32 
#include  
#include  
#include  
#define INT32 int 
#define MAXINT 2147483647 
#define HOTKEYS 
#endif 
 
#ifdef UNIX 
#ifdef BSD 
#include  
#elif defined NEXT 
#include  
#include  
#else /* SysV */ 
#include  
#include  
#endif 
#define INT32 int 
#define SIGINT 2 
#define MAXINT 2147483647 
#define CLOCKS_PER_SEC 1000000.0 
#define HOTKEYS 
extern long clock(); 
#endif 
 
#define RXSTRSIZE 257     /* max length of string to store rx files */ 
#define FILENAMESIZE 15   /* maximum length of a file name */ 
#define MAXFILES 10       /* maximum number of files on file stack */ 
#define MAXFORMAT 21      /* maximum number of format breaks */ 
#define BUFFSIZE 257      /* maximum size of an input line */ 
#define OUTSTRSIZE 400    /* max size of output string */ 
#define WTTYPE short      /* a 16-bit integer */ 
#define WTSIZE 2          /* shorts are two bytes */ 
#define MAXSHORT 32767    /* largest short */ 
#define MINSHORT -32768   /* smallest short */ 
#define HCODE -32768      /* code number for a layer h (2) unit */ 
#define ICODE -32767      /* code number for a layer i (3) unit */ 
#define OCODE -32766      /* code number for a layer j (4) unit */ 
#define CAPHCODE -32764   /* code for a string of h layer units */ 
#define CAPXCODE -32763   /* code for a string of unknown values */ 
#define SKIPCODE -32762   /* temporal difference code to skip pattern */ 
#define DIFFCODE -32761   /* temporal difference code to use diff */ 
#define GT 0              /* a symbol meaning > */ 
#define GE 1              /* a symbol meaning >= */ 
#define TRAIN 0           /* selects training patterns */ 
#define TEST 1            /* selects testing patterns */ 
#define TOL 0             /* selects stats based on tolerance */ 
#define MAX 1             /* selects stats based on max value */ 
#define LOOKUP 1          /* produces lookup table for s function */ 
 
#ifdef FLOAT 
#define REAL float 
#else 
#define REAL double 
#endif 
 
typedef struct seednode 
   { 
     unsigned val;            /* a seed value */ 
     struct seednode *next;   /* pointer to next node */ 
   } SEEDNODE; 
 
typedef struct patnode 
   { 
    WTTYPE *addr;             /* address to get the value from */ 
    WTTYPE val;               /* a normal value */ 
    short layer;              /* layer of the net to take value from */ 
    short unitno;             /* unit of the layer to take value from */ 
   } PATNODE; 
 
typedef struct patlist 
   { 
     PATNODE *pats;           /* the list of patterns */ 
     struct patlist *next;    /* pointer to the next pattern */ 
   } PATLIST; 
 
typedef struct unit 
   { 
     int inuse;               /* flags unit in use */ 
     short layernumber;       /* layer number of the unit */ 
     short unitnumber;        /* position within layer */ 
     INT32 error;             /* to sum error factors */ 
     WTTYPE oj;               /* state of activation of node */ 
     WTTYPE tj;               /* a temporary variable */ 
     WTTYPE translate;        /* the amount to translate an input by */ 
     WTTYPE userscale;        /* the amount to scale an input by */ 
     struct wtnode *wtlist;   /* the list of weights */ 
     struct unit *next;       /* link to next unit in this layer */ 
   } UNIT; 
 
typedef struct wtnode 
   { 
#ifdef SYMMETRIC 
     WTTYPE *weight;          /* ptr to weight */ 
     WTTYPE *olddw;           /* ptr to delta wji */ 
     WTTYPE *eta;             /* ptr to eta for the DBD method */ 
     INT32 *total;            /* ptr to total of weight changes */ 
     WTTYPE *slope;           /* previous slope */ 
#else 
     WTTYPE weight;           /* weight from here to backunit */ 
     WTTYPE olddw;            /* delta wji from previous iteration */ 
     WTTYPE eta;              /* the eta for the DBD method */ 
     INT32 total;             /* total weight changes for batch mode */ 
     WTTYPE slope;            /* previous slope */ 
#endif 
     short inuse;             /* 0 if unused, > 0 otherwise */ 
     struct wtnode *next;     /* link to next node */ 
     UNIT *backunit;          /* ptr to unit the weight comes from */ 
   } WTNODE; 
 
typedef struct layer 
   { 
     char activation;         /* activation function for this layer */ 
     WTTYPE D;                /* gain for this layer */ 
     WTTYPE biasact;          /* bias act. value for this layer */ 
     int unitcount;           /* number of units in this layer now */ 
     int initialcount;        /* number of units to start with */ 
     struct layer *backlayer; /* pointer to previous layer */ 
     struct layer *next;      /* pointer to next layer */ 
     UNIT *units;             /* start of list of units in this layer */ 
     PATLIST *patstart[2];    /* to the list of patterns */ 
     PATLIST *currentpat[2];  /* the current pattern */ 
   } LAYER; 
 
typedef struct data 
   { 
    int uncertain;            /* flags values created by continuous */ 
                              /* updates in the forward pass */ 
    int off;                  /* -1 for off by 1, 0 otherwise */ 
    int npats;                /* number of patterns */ 
    INT32 iterno;             /* iteration number when data was found */ 
    int right;                /* number of patterns right */ 
    int wrong;                /* number of patterns wrong */ 
    float avgerr;             /* average abs error per unit */ 
    float pctright;           /* percentage right */ 
   } DATA;