// 
// File name: neuman1.cpp
//
// Discription: Main
//
// Programmer: Vladimir P. Stasevich (SV)
//
// History: 
//    Created 03.12.1999 (SV)
//
#include <string.h> 
#include <conio.h> 
#include "neuro.h" 

#define N0 30 
#define N1 10 
#define N2 10 
  
void main() 
{ 
   float Inp[N0], Out[N2]; 
   unsigned count; 
   unsigned char buf[256]; 
   int i; 
   NetBP N(3,N0,N1,N2); 
   /* первый способ конструирования сети */ 
   /*** второй способ конструирования сети 
   NeuronBP _FAR *H0, _FAR *H1, _FAR *H2; 
   H0= new NeuronBP [N0]; 
   H1= new NeuronBP [N1]; 
   H2= new NeuronBP [N2]; 
   for(i=0;i<N1;i++) H1[i].InitNeuron(N0); 
   for(i=0;i<N2;i++) H2[i].InitNeuron(N1); 
   LayerBP L0(H0,N0,0); 
   LayerBP L1(H1,N1,N0); 
   LayerBP L2(H2,N2,N1); 
   NetBP N(3); 
   i=N.SetLayer(0,&L0); 
   i=N.SetLayer(1,&L1); 
   i=N.SetLayer(2,&L2); // здесь можно проверить i 
   ***/ 
   
   ClearScreen(); 
   
   N.FullConnect(); 
   
   N.GetLayer(0)->SetName("Input"); 
   N.GetLayer(0)->SetShowDim(1,1,5,6); 
   N.GetLayer(1)->SetName("Hidden"); 
   N.GetLayer(1)->SetShowDim(15,1,2,5); 
   N.GetLayer(2)->SetName("Out"); 
   N.GetLayer(2)->SetShowDim(23,1,10,1); 
   
   // srand(1); 
   // меняем особенность случайной структуры сети 
   SetSigmoidType(HYPERTAN); 
   SetNiuParm(0.1); 
   SetLimit(0.001); 
   SetDSigma(1); 
   
   N.Randomize(1); 
   N.SetLearnCycle(64000U); 
   N.OpenPatternFile("char1.img"); 
   
   for(count=0;;count++) 
   { 
      sprintf(buf,"Cycle %u",count); 
      out_str(1,23,buf,10 | (1<<4)); 
      out_str(1,24,"ESC breaks ",11 | (1<<4)); 
      
      if(kbhit() || i==13) i=getch(); 
      if(i==27) break; 
      if(i=='s' || i=='S') goto save; 
      
      if(N.LoadNextPattern(Inp,Out)) break; 
      
      N.Cycle(Inp,Out); 
      // N.Propagate(); // "сквозной канал" 

      N.GetLayer(0)->Show(); 
      N.GetLayer(1)->Show(); 
      N.GetLayer(2)->Show(); 
      N.GetLayer(2)->PrintAxons(47,0); 
      
      if(count && N.IsConverged()) 
      { 
         save: 
            out_str(40,24,"FileConf:",15 | (1<<4)); 
            gotoxy(50,25); 
            gets(buf); 
            if(strlen(buf)) N.SaveToFile(buf); 
            break; 
      } 
   } 
   N.ClosePatternFile(); 
} 

