home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 February / PCWK0297.iso / technika / nnmodel / params.c < prev    next >
C/C++ Source or Header  |  1996-04-18  |  6KB  |  205 lines

  1. //-- implementation code
  2. // core code filename params.cpp
  3. //----------------
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include "nndefs.h"
  8. #include "params.h"
  9.  
  10.     void Logit(const char* fmt, ...);
  11.  
  12. PARAMS *CreateParams( )
  13. {
  14.     PARAMS *pM;
  15.     pM = (PARAMS *) malloc (sizeof(PARAMS));
  16.  
  17.     pM->m_TrainFlags=0;
  18.     pM->m_AImaxhid=4;
  19.     pM->m_goodness=3;
  20.     pM->m_autosave = 1000;
  21.     pM->m_seed = 15;
  22.     pM->m_eon = 100;
  23.  
  24.     pM->m_cnt_max = 1000;
  25.  
  26.     pM->m_hiddegrad=0.75f;
  27.     pM->m_errtol = 0.001f;
  28.     pM->m_goodrsq = .9f;
  29.     pM->m_signinc = .05f;
  30.     pM->m_nosigninc = .005f;
  31.     pM->m_alpha = .8f;
  32.     pM->m_theta = .5f;
  33.     pM->m_randz = .5f;
  34.     pM->m_inrandzdiv = 0.f;
  35.     pM->m_tol = .05f;
  36.     pM->m_learning_rate = .75f;
  37.     pM->m_Hlearning_rate = 1.5f;
  38.     pM->m_tlearning_rate = .75f;
  39.     pM->m_inoutlearn = .1f;
  40.                           
  41.     return pM;                              
  42. }
  43. /*
  44. // CParams::CParams Copy Constructor 
  45.  
  46. CParams::CParams( const CParams& b )
  47. {
  48.     ASSERT_VALID( this );
  49.     ASSERT_VALID( &b );
  50.     m_TrainFlags= b.m_TrainFlags;
  51.     m_AImaxhid = b.m_AImaxhid;
  52.     m_goodness = b.m_goodness;
  53.     m_autosave = b.m_autosave;
  54.     m_seed = b.m_seed;
  55.     m_eon = b.m_eon;
  56.  
  57.     m_cnt_max = b.m_cnt_max;
  58.  
  59.     m_hiddegrad = b.m_hiddegrad;
  60.     m_errtol = b.m_errtol;
  61.     m_goodrsq = b.m_goodrsq;
  62.     m_signinc = b.m_signinc;
  63.     m_nosigninc = b.m_nosigninc;
  64.     m_alpha = b.m_alpha;
  65.     m_theta = b.m_theta;
  66.     m_randz = b.m_randz;
  67.     m_inrandzdiv = b.m_inrandzdiv;
  68.     m_tol = b.m_tol;
  69.     m_learning_rate = b.m_learning_rate;
  70.     m_Hlearning_rate = b.m_Hlearning_rate;
  71.     m_tlearning_rate = b.m_tlearning_rate;
  72.     m_inoutlearn = b.m_inoutlearn;
  73.  
  74. }
  75.  
  76. // Overloaded operator=
  77.  
  78. CParams& CParams::operator=( const CParams& b)
  79. {
  80.     ASSERT_VALID( this );
  81.     ASSERT_VALID( &b );
  82.     m_TrainFlags= b.m_TrainFlags;
  83.     m_AImaxhid = b.m_AImaxhid;
  84.     m_goodness = b.m_goodness;
  85.     m_autosave = b.m_autosave;
  86.     m_seed = b.m_seed;
  87.     m_eon = b.m_eon;
  88.  
  89.     m_cnt_max = b.m_cnt_max;
  90.  
  91.     m_hiddegrad = b.m_hiddegrad;
  92.     m_errtol = b.m_errtol;
  93.     m_goodrsq = b.m_goodrsq;
  94.     m_signinc = b.m_signinc;
  95.     m_nosigninc = b.m_nosigninc;
  96.     m_alpha = b.m_alpha;
  97.     m_theta = b.m_theta;
  98.     m_randz = b.m_randz;
  99.     m_inrandzdiv = b.m_inrandzdiv;
  100.     m_tol = b.m_tol;
  101.     m_learning_rate = b.m_learning_rate;
  102.     m_Hlearning_rate = b.m_Hlearning_rate;
  103.     m_tlearning_rate = b.m_tlearning_rate;
  104.     m_inoutlearn = b.m_inoutlearn;
  105.  
  106.     return *this;
  107. }
  108. void CParams::DumpParams(FILE *fd )
  109. {
  110.     static char BASED_CODE fmt1[] = 
  111. "\nDump of Parameters\nTrainFlags = %d\nAImaxhid  = %d\
  112. \ngoodness   = %d\nautosave   = %d\nseed       = %d\neonh      = %d\n";
  113.  
  114.     fprintf (fd,fmt1, m_TrainFlags, m_AImaxhid,  
  115.         m_goodness, m_autosave, m_seed, m_eon);
  116.  
  117.     static char BASED_CODE fmt2[] = 
  118. "cnt_max        = %ld\nhiddegrad      = %10f\nerrtol         = %10f\
  119. \ngoodrsq        = %10f\nsigninc        = %10f\nnosigninc      = %10f\
  120. \nalpha          = %10f\n";
  121.  
  122.     fprintf (fd,fmt2,m_cnt_max,m_hiddegrad,m_errtol,m_goodrsq,m_signinc,
  123.         m_nosigninc,m_alpha);
  124.  
  125.     static char BASED_CODE fmt3[] = 
  126. "theta          = %10f\nrandz          = %10f\ninrandzdiv     = %10f\
  127. \ntol            = %10f\nlearning_rate  = %10f\nHlearning_rate = %10f\
  128. \ntlearning_rate = %10f\nInOutLearn     = %10f\n";
  129.  
  130.     fprintf (fd,fmt3,m_theta,m_randz,m_inrandzdiv,m_tol,m_learning_rate,
  131.         m_Hlearning_rate,m_tlearning_rate,m_inoutlearn);
  132. }
  133. */
  134.  
  135. int ImportParams (FILE *fd, PARAMS *pM)
  136. {
  137.     char cdummy[80];
  138.     int ex;
  139.     static char *fmt1 = {"%d %d %d %d %d %d"};
  140.     static char *fmt2 = {"%ld %f %f %f %f %f %f"};
  141.     static char *fmt3 = {"%f %f %f %f %f %f %f %f"};
  142.  
  143. #ifdef VERBOSE
  144.     Logit("Start import params\n");
  145. #endif
  146.     
  147.     fscanf (fd,"%s" , cdummy);
  148.     if (strncmp("P00",cdummy,3)!=0) goto errorexit;
  149.     fscanf (fd,"%d" , &ex);
  150.     if (ex != EXPORTVERSION) {
  151. #ifdef VERBOSE
  152.         Logit("The ENN file is the wrong export version\n");
  153. #endif
  154.         return -1;
  155.     }
  156.  
  157.     fscanf (fd,"%s" , cdummy);
  158.     if (strncmp("P01",cdummy,3)!=0) goto errorexit;
  159.     fscanf (fd,fmt1 , &pM->m_TrainFlags,
  160.         &pM->m_AImaxhid, &pM->m_goodness, &pM->m_autosave, &pM->m_seed,
  161.         &pM->m_eon);
  162.  
  163.     fscanf (fd,"%s" , cdummy);
  164.     if (strncmp("P02",cdummy,3)!=0) goto errorexit;
  165.     fscanf (fd,fmt2,&pM->m_cnt_max,
  166.         &pM->m_hiddegrad, &pM->m_errtol, &pM->m_goodrsq, &pM->m_signinc, &pM->m_nosigninc,
  167.         &pM->m_alpha);
  168.  
  169.     fscanf (fd,"%s" , cdummy);
  170.     if (strncmp("P03",cdummy,3)!=0) goto errorexit;
  171.     fscanf (fd,fmt3,&pM->m_theta,
  172.         &pM->m_randz, &pM->m_inrandzdiv, &pM->m_tol, &pM->m_learning_rate,
  173.         &pM->m_Hlearning_rate, &pM->m_tlearning_rate, &pM->m_inoutlearn);
  174.     return 0;                                     
  175.  
  176. errorexit:        
  177.     return -1;
  178.     
  179. }
  180.  
  181. void DumpParams(PARAMS *pM, FILE *fd )
  182. {
  183.     static char fmt1[] = 
  184. "\nDump of Parameters\nTrainFlags = %d\nAImaxhid  = %d\
  185. \ngoodness   = %d\nautosave   = %d\nseed       = %d\neonh      = %d\n";
  186.     static char fmt2[] = 
  187. "cnt_max        = %ld\nhiddegrad      = %10f\nerrtol         = %10f\
  188. \ngoodrsq        = %10f\nsigninc        = %10f\nnosigninc      = %10f\
  189. \nalpha          = %10f\n";
  190.     static char fmt3[] = 
  191. "theta          = %10f\nrandz          = %10f\ninrandzdiv     = %10f\
  192. \ntol            = %10f\nlearning_rate  = %10f\nHlearning_rate = %10f\
  193. \ntlearning_rate = %10f\nInOutLearn     = %10f\n";
  194.  
  195.     fprintf (fd,fmt1, pM->m_TrainFlags, pM->m_AImaxhid,  
  196.         pM->m_goodness, pM->m_autosave, pM->m_seed, pM->m_eon);
  197.  
  198.     fprintf (fd,fmt2,pM->m_cnt_max,pM->m_hiddegrad,pM->m_errtol,pM->m_goodrsq,pM->m_signinc,
  199.         pM->m_nosigninc,pM->m_alpha);
  200.  
  201.     fprintf (fd,fmt3,pM->m_theta,pM->m_randz,pM->m_inrandzdiv,pM->m_tol,pM->m_learning_rate,
  202.         pM->m_Hlearning_rate,pM->m_tlearning_rate,pM->m_inoutlearn);
  203. }
  204.  
  205.