// FM_Network.cpp: implementation of the FM_Network class.
//
//////////////////////////////////////////////////////////////////////

//#include "stdafx.h"
#include "FM_Network.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

FM_Network::FM_Network(int poc1,int poc2,int imputsize,int outputsize,char *name)
{
	int i,j;
	pocet1=poc1;
	pocet2=poc2;
	vrstva1=new neuron *[pocet1];
        for(i=0;i<pocet1;i++){
                vrstva1[i]=new neuron(1,pocet2,imputsize,i,0.1,0.2);
        }


        vrstva2=new neuron *[pocet2];
        for(i=0;i<pocet2;i++){
                vrstva2[i]=new neuron(3,outputsize,pocet1,i,0.1,0.2);
        }

         for(i=0;i<pocet1;i++)
                for(j=0;j<pocet2;j++)
                (vrstva1[i])->nplus1[j]=vrstva2[j];//vystupny pre vrstvu 1


          for(i=0;i<pocet2;i++)
                for(j=0;j<pocet1;j++)
                (vrstva2[i])->nminus1[j]=vrstva1[j];//vstupny pre vrstvu 2	
		loadformfile(name);
}

FM_Network::~FM_Network()
{	int i;
	 for(i=0;i<pocet1;i++){
                delete vrstva1[i];
        }
	 for(i=0;i<pocet2;i++){
                delete vrstva2[i];
        }

	
}

void FM_Network::loadformfile(char *name){
	int j,i;
        FILE *f=fopen(name,"rt");
        for(i=0;i<pocet2;i++){
          fscanf(f,"%lf ", &(vrstva2[i]->wbias));
          for(j=0;j<vrstva2[i]->Nminus1;j++){
                fscanf(f,"%lf ",&(vrstva2[i]->w[j]));
			//	printf("%f",vrstva2[i]->w[j]);
		  }
         fscanf(f,"\n");

         }
         for(i=0;i<pocet1;i++){
          fscanf(f,"%lf ", &(vrstva1[i]->wbias));
          for(j=0;j<vrstva1[i]->Nminus1;j++)
                fscanf(f,"%lf ",&(vrstva1[i]->w[j]));
         fscanf(f,"\n");

         }
         fclose(f);
}

double FM_Network::getoutput(double *x){
	int i;
	for(i=0;i<pocet1;i++){
            (vrstva1[i])->eval1(x);
       }
    for(i=0;i<pocet2;i++){
           (vrstva2[i])->eval2();

       }
	return((vrstva2[0])->Y);
}