static void create_snns_unit(void)

{
 struct PosType unit_pos;

 PLANE *PLANE_element = PLANE_first_element; 
 int x,y,width,height,unit_no,pos,ret;
 int y_offset=0,relative_y_max=0,absolute_y_max=0,y_begin;
 int x_max=0,old_x_begin=2,new_x_begin,x_begin;

 ret = krui_allocateUnits((*PLANE_last_element).width * 
                             (*PLANE_last_element).height +
                               (*PLANE_last_element).begin-1);
 if(ret != 0){
   ui_tw_errorMessage(krui_error(ret));
   BN_ERROR = 1;
 }

 while((! BN_ERROR) && (PLANE_element != NULL)) {

   height = (*PLANE_element).height;
   width  = (*PLANE_element).width;
   pos    = (*PLANE_element).pos;
    
   y_begin = calculate_y_begin(&absolute_y_max,&relative_y_max,&y_offset,height,pos);
   x_begin = calculate_x_begin(&new_x_begin,&old_x_begin,&x_max,width,pos);

   for(y=0;y<height;y++){
     for(x=0;x<width;x++){
       unit_no = krui_createDefaultUnit();
       if(unit_no<0) ui_checkError(unit_no);
       krui_setUnitActFunc(unit_no, "Act_Perceptron");
       ret = krui_setUnitTType(unit_no,(*PLANE_element).type+1);
       if(ret != 0){
         ui_tw_errorMessage(krui_error(ret));
         BN_ERROR = 1;
       }
      
       unit_pos.x = x_begin + x;
       unit_pos.y = y_begin + y;

       krui_setUnitPosition(unit_no,&unit_pos);
     }/*for*/
   }/*for*/

   PLANE_element = (*PLANE_element).next;
 }/*while*/
}
Exemple #2
0
krui_err SnnsCLib::bn_kohonen_createNet(int X, int Y, int IUnits, int HUnits)
{
  int i,j,unit_no;
  struct PosType    unit_pos;
  krui_err ret;

  unit_pos.z = 0;

  /*  Allocate units */
  
  ret = krui_allocateUnits( HUnits + IUnits );
  CHECK_RETURN ( ret );


  /*  Create standard (input) Units  */

  unit_pos.x = 1;
  for (i = 1; i <= IUnits; i++) {
    unit_no = krui_createDefaultUnit();
    if (unit_no < 0)  CHECK_RETURN( unit_no );
    ret = krui_setUnitTType( unit_no, INPUT );
    CHECK_RETURN( ret );
    
    unit_pos.y = (IUnits<Y)?i+(Y-IUnits)/2:i;
    krui_setUnitPosition( unit_no, &unit_pos );
  }


  /* Create standard hidden Units. The size of the feature map is X*Y */
  
  for (i = 1; i <= Y; i++)
    for (j = 1; j <= X; j++) {
      unit_pos.x = 4+j;
      unit_no = krui_createDefaultUnit();
      if (unit_no < 0)  CHECK_RETURN( unit_no );
      ret = krui_setUnitTType( unit_no, HIDDEN );
      CHECK_RETURN( ret );
      
      unit_pos.y = i;
      krui_setUnitPosition( unit_no, &unit_pos );
    }
  

  /* Make connections between input units and hidden units  */

  /* set all link weights to zero */

  for (i = IUnits + 1; i <= IUnits + HUnits; i++) {

      /*  Make hidden unit to current unit  */
      ret = krui_setCurrentUnit( i );
      CHECK_RETURN( ret );
    
      /* (backward) connect current (hidden) unit with input unit */
      for (j = 1; j <= IUnits; j++) {
	  ret = krui_createLink( j,0.0);
	  CHECK_RETURN( ret );
      }
  } 
         

  /*  set the update function  */

  ret = krui_setUpdateFunc (const_cast<char*>(KOHONEN_UPDATE_FUNC_NAME));
  CHECK_RETURN( ret );


  /* set the learning function */

  ret = krui_setLearnFunc (const_cast<char*>(KOHONEN_LEARN_FUNC_NAME));
  CHECK_RETURN( ret );


  /* set the init function */

  ret = krui_setInitialisationFunc (const_cast<char*>(KOHONEN_INIT_FUNC_NAME));
  //CHECK_RETURN( ret );

  return(ret);

} /* bn_kohonen_createNet */
Exemple #3
0
/*****************************************************************************
  FUNCTION : bn_artmap_make_layer

  PURPOSE  : make a complete layer
  NOTES    :

  UPDATE   : 20.1.1993
******************************************************************************/
krui_err SnnsCLib::bn_artmap_make_layer (int  units, int  rows, int  cols, 
				      int  Xbegin, int  Ybegin,
				      char *name_prefix, int  unit_ttype, 
				      char *actfuncname, char *outfuncname,
				      int  NoOfSites, char **SiteNames,
				      char **SiteFuncNames)

{
   krui_err             ret_code = KRERR_NO_ERROR;

   int                  row;
   int                  col;
   int                  count;
   int                  last_col;
   int                  unit_no;
   struct PosType       unit_pos;
   char                 *site_name, *site_func_name;
   int                  site_no;
   char                 name[100];

   unit_pos.z = 0;

   /* Create Site Table Entries */
   site_no = 1;
   while (site_no <= NoOfSites) {
      site_name= *(SiteNames+(site_no-1));
      site_func_name= *(SiteFuncNames+(site_no-1));

      if ((site_name != NULL) && (site_func_name != NULL)) {
         ret_code = krui_createSiteTableEntry(site_name, site_func_name);
         CHECK_RETURN (ret_code);
      } /*if*/

      site_no++;
   }  /*while*/

   /* Create Units */
   for (row = 1, count = 0; row <= rows; row++) {

      if ((units % rows) > 0) {
         last_col = POS_SIGN((units-count) % (rows-row+1));
      } else {
         last_col = 1;
      } /*if*/

      for (col = 1; col <= (cols-1+last_col); col++) {

         count++;

         unit_no = krui_createDefaultUnit();
         if (unit_no < 0)  CHECK_RETURN (unit_no);

         ret_code = krui_setUnitTType (unit_no, unit_ttype);
         CHECK_RETURN( ret_code );

         ret_code = krui_setUnitActFunc(unit_no, actfuncname);
         CHECK_RETURN (ret_code);

         ret_code = krui_setUnitOutFunc(unit_no, outfuncname);
         CHECK_RETURN (ret_code);

         if (units > 1) {
            sprintf (name,"%s%d",name_prefix,count);
         } else {
            sprintf (name,"%s",name_prefix);
         } /*if*/

         ret_code = krui_setUnitName (unit_no, name);
         CHECK_RETURN (ret_code);

         unit_pos.x = Xbegin + col - 1;
         unit_pos.y = Ybegin + row - 1;
         krui_setUnitPosition( unit_no, &unit_pos );

         ret_code = krui_setCurrentUnit (unit_no);
         CHECK_RETURN (ret_code);

         /* Add Sites */
         site_no = 1;
         while (site_no <= NoOfSites) {
             site_name= *(SiteNames+(site_no-1));

             if (site_name != NULL) {
                ret_code = krui_addSite (site_name);
                CHECK_RETURN (ret_code);
             } /*if*/

             site_no++;
         } /*while*/

      } /*for*/

   } /*for*/

   return (ret_code);
} 
Exemple #4
0
krui_err SnnsCLib::bn_assoz_createNet(int X, int Y)
{
  int i,j,unit_no;
  struct PosType    unit_pos;
  krui_err ret = KRERR_NO_ERROR;

  int HUnits= X*Y;
  int IUnits= X*Y;


  /*  Allocate units */
  
  ret = krui_allocateUnits( IUnits + HUnits );
  CHECK_RETURN (ret);


  /* Create standard input Units. The size of the input layer is X*Y */
  
  for (i = 1; i <= Y; i++)
    for (j = 1; j <= X; j++) {
      unit_pos.x = j;
      unit_no = krui_createDefaultUnit();
      if (unit_no < 0)  CHECK_RETURN (unit_no);
      ret = krui_setUnitTType( unit_no, INPUT );
      CHECK_RETURN (ret);
      ret = krui_setUnitActFunc( unit_no, const_cast<char*>("Act_RM") );
      CHECK_RETURN (ret);
      
      unit_pos.y = i;
      krui_setUnitPosition( unit_no, &unit_pos );
    }

  /* Create standard hidden Units. The size of the output layer is X*Y */
  
  for (i = 1; i <= Y; i++)
    for (j = 1; j <= X; j++) {
      unit_pos.x = X+4+j;
      unit_no = krui_createDefaultUnit();
      if (unit_no < 0)  CHECK_RETURN (unit_no);
      ret = krui_setUnitTType( unit_no, HIDDEN );
      CHECK_RETURN (ret);
      ret = krui_setUnitActFunc( unit_no, const_cast<char*>("Act_RM") );
      CHECK_RETURN (ret);
      
      unit_pos.y = i;
      krui_setUnitPosition( unit_no, &unit_pos );
    }
  

  /* Make connections between input units and hidden units  */

  for (i = IUnits + 1; i <= IUnits + HUnits; i++) {

      /*  Make hidden unit to current unit  */
      ret = krui_setCurrentUnit( i );
      CHECK_RETURN (ret);
    
      /* (backward) connect current (hidden) unit with input unit */
      /* set all link weights from the input units to one */
      ret = krui_createLink( i-IUnits, 1.0);
      CHECK_RETURN (ret);

      /* Make connections from all hidden units  */
      /* set link weights to zero */
      for (j = IUnits + 1; j <= IUnits + HUnits; j++) {
	  if (j != i){
	      ret = krui_createLink( j, 0.0);
	      CHECK_RETURN (ret);
	  }
      }
  } 

  /*  set the update function  */
  ret = krui_setUpdateFunc (const_cast<char*>(ASSOZ_UPDATE_FUNC_NAME));
  CHECK_RETURN (ret);

  /* set the learning function */
  ret = krui_setLearnFunc (const_cast<char*>(ASSOZ_LEARN_FUNC_NAME));
  CHECK_RETURN (ret);

  /* set the init function */
  ret = krui_setInitialisationFunc (const_cast<char*>(ASSOZ_INIT_FUNC_NAME));
  //CHECK_RETURN (ret);

  return(ret);

} /* bn_assoz_createNet */
Exemple #5
0
static inline void creatUnit(IPackage&p,IConnection*c)
{
        uint32 subnet;
        uint16 numunits;
        SUnit unit,ounit;
        p>>subnet>>numunits;
        IPackage op("set");
        op<<QString("create unit");
        op<<subnet<<numunits;
        int num,err;
        //yet no check for subnet/layer defined, SNNS itself gives damn
        //buffer for string ops:
        char buf[256];
        //create units
        for(int i=0;i<numunits;i++){
                getUnit(unit,p);
                ounit=unit;
                num=krui_createDefaultUnit();
                if(num<0){//error
                        ounit.mask=UERR;
                        ounit.errcode=(QString)krui_error(-num);
                        setUnit(ounit,op);
                        //proceed with next unit
                        continue;
                }else{//success
                        ounit.mask|=UNUM;
                        ounit.id=num;
                }
                //subnet/layer
                krui_setUnitLayerNo(num,subnet&0xffff);
                int subn=(subnet>>16)&0xffff;
                subn-=32736;
                krui_setUnitSubnetNo(num,subn);
                //name
                if(unit.mask&UNAME){
                        err=krui_setUnitName(num,CHR(buf,unit.name));
                        if(err){
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                        }
                }
                //output function
                if(unit.mask&UOUTF){
                        err=krui_setUnitOutFunc(num,CHR(buf,unit.outfunc));
                        if(err){
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                        }
                }//must be for error and nomask, doesn't hurt anyway
                ounit.mask|=UOUTF;
                ounit.outfunc=krui_getUnitOutFuncName(num);
                //activation function
                if(unit.mask&UACTF){
                        err=krui_setUnitActFunc(num,CHR(buf,unit.actfunc));
                        if(err){
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                        }
                }
                ounit.mask|=UACTF;
                ounit.actfunc=krui_getUnitActFuncName(num);
                //initial activation
                if(unit.mask&UIACT)
                        krui_setUnitInitialActivation(num,unit.iact);
                //activation
                if(unit.mask&UACT)
                        krui_setUnitActivation(num,unit.act);
                //bias
                if(unit.mask&UBIAS)
                        krui_setUnitBias(num,unit.bias);
                //prototype
                if(unit.mask&UPROTO){
                        err=krui_setUnitFType(num,CHR(buf,unit.prototype));
                        if(err){
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                                ounit.prototype=(char*)0;
                                //take this as non-fatal and proceed
                        }
                }
                //position
                if(unit.mask&UPOS){
                        struct PosType pos;
                        pos.x=unit.xpos;
                        pos.y=unit.ypos;
                        pos.z=unit.zpos;
                        krui_setUnitPosition(num,&pos);
                        //the above doesn't transport errors, so ...
                        krui_getUnitPosition(num,&pos);
                        ounit.xpos=pos.x;
                        ounit.ypos=pos.y;
                        ounit.zpos=pos.z;
                }else {
                        struct PosType pos;
                        ounit.mask|=UPOS;
                        krui_getUnitPosition(num,&pos);
                        ounit.xpos=pos.x;
                        ounit.ypos=pos.y;
                        ounit.zpos=pos.z;
                }
                //send back
                setUnit(ounit,op);
        }
        c->send(op);
}
Exemple #6
0
static inline void modifUnit(IPackage&p,IConnection*c)
{
        uint32 subnet;
        uint16 numunits;
        int err;
        SUnit unit,ounit;
        IPackage op("set");
        op<<QString("modify unit");
        op<<subnet<<numunits;
        char buf[256];
        for(int i=0;i<numunits;i++){
                getUnit(unit,p);
                ounit=unit;
                //check for existance
                if(!(unit.mask&UNUM)){
                      int num=krui_createDefaultUnit();
                      if(num<0){
                              ounit.errcode="Unable to create unit.";
                              setUnit(ounit,op);
                              continue;
                      }
                      unit.id=ounit.id=num;
                }
                if(unit.id==0||unit.id>krui_getNoOfUnits()){
                        ounit.mask=UERR|UNUM;
                        ounit.errcode="Unit doesn't exist.";
                        setUnit(ounit,op);
                        continue;
                }
                //prototype
                if(unit.mask&UPROTO){
                        err=krui_setUnitFType(unit.id,CHR(buf,unit.prototype));
                        if(err){
                                ounit.prototype=krui_getUnitFTypeName(unit.id);
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                        }
                }
                //position
                if(unit.mask&UPOS){
                        PosType pos;
                        pos.x=unit.xpos;
                        pos.y=unit.ypos;
                        pos.z=unit.zpos;
                        krui_setUnitPosition(unit.id,&pos);
                        krui_getUnitPosition(unit.id,&pos);
                        ounit.xpos=pos.x;
                        ounit.ypos=pos.y;
                        ounit.zpos=pos.z;
                }
                //bias
                if(unit.mask&UBIAS){
                        krui_setUnitBias(unit.id,unit.bias);
                }
                //i_activation
                if(unit.mask&UIACT){
                        krui_setUnitInitialActivation(unit.id,unit.iact);
                }
                //activation
                if(unit.mask&UACT){
                        err=krui_setUnitActivation(unit.id,unit.act);
                        if(err){
                                ounit.act=krui_getUnitActivation(unit.id);
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                        }
                }
                //actfunc
                if(unit.mask&UACTF){
                        err=krui_setUnitActFunc(unit.id,CHR(buf,unit.actfunc));
                        if(err){
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                                ounit.actfunc=krui_getUnitActFuncName(unit.id);
                        }
                }
                //outfunc
                if(unit.mask&UOUTF){
                        err=krui_setUnitOutFunc(unit.id,CHR(buf,unit.outfunc));
                        if(err){
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                                ounit.outfunc=krui_getUnitOutFuncName(unit.id);
                        }
                }
                //name
                if(unit.mask&UNAME){
                        err=krui_setUnitName(unit.id,CHR(buf,unit.name));
                        if(err){
                                ounit.mask|=UERR;
                                ounit.errcode=krui_error(err);
                                ounit.name=krui_getUnitName(unit.id);
                        }
                }
                //store
                setUnit(ounit,op);
        }
        c->send(op);
}
void create_network(char *weight_file)

{
 FILE *fp;
 float val;

/*  Allocate units (the user may or may not use this function, 
      there is no need to do this)  */

       ret = krui_allocateUnits( OUnits + HUnits + IUnits );
       errChk( ret );
       printf( "\n\nCreate Units now\n" );

/*  Create standard (input) Units  */

       unit_pos.x = 1;
       for (i = 1; i <= IUnits; i++)
	 {
	   unit_no = krui_createDefaultUnit();
	   if (unit_no < 0)  errChk( unit_no );
	   ret = krui_setUnitTType( unit_no, INPUT );
	   errChk( ret );

	   unit_pos.y = (IUnits<Y)?i+(Y-IUnits)/2:i;
	   krui_setUnitPosition( unit_no, &unit_pos );
	 }

/*  Create standard (hidden) Units  */
  
       for (i = 1; i <= Y; i++)
	 for (j = 1; j <= X; j++)
	   {
	     unit_pos.x = 4+j;
	     unit_no = krui_createDefaultUnit();
	     if (unit_no < 0)  errChk( unit_no );
	     ret = krui_setUnitTType( unit_no, HIDDEN );
	     errChk( ret );

	     unit_pos.y = i;
	     krui_setUnitPosition( unit_no, &unit_pos );
	   }

/*  Create standard (output) Units  */

       unit_pos.x = 4+X+3;
       if (OUnits) for (i = 1; i <= OUnits; i++)
	 {
	   unit_no = krui_createDefaultUnit();
	   if (unit_no < 0)  errChk( unit_no );
	   ret = krui_setUnitTType( unit_no, OUTPUT );
	   errChk( ret );

	   unit_pos.y = (OUnits<Y)?i+(Y-OUnits)/2:i;
	   krui_setUnitPosition( unit_no, &unit_pos );
	 }

/* Make Connections now */
/* Make connections between hidden units and output units first !  */

       for (i = IUnits + HUnits + 1; i <= IUnits + HUnits + OUnits; i++)
	 {  /*  Make output unit to current unit  */
	   ret = krui_setCurrentUnit( i );
	   errChk( ret );

	   for (j = IUnits + 1; j <= IUnits + HUnits; j++)
	     {  /*  connect current (output) unit with hidden unit. 
                    REMEMBER: The hidden unit #j is the predecessor of
                        the (output) unit #i (it is a backward connection) */
	       ret = krui_createLink( j, 0 );
	       errChk( ret );
	     }
	 }

/* Make connections between input units and hidden units
   and set link weight with datas from output_file   */

       printf("\nSet link weights now\n");
       if((fp=fopen(weight_file,"r"))!=NULL)
        for (i = IUnits + 1; i <= IUnits + HUnits; i++)
	 {  /*  Make hidden unit to current unit  */
	   ret = krui_setCurrentUnit( i );
	   errChk( ret );

	   for (j = 1; j <= IUnits; j++)
	     { /*  (backward) connect current (hidden) unit with input unit  */
	       fscanf(fp,"%s",string);
               val = atof(string);
               ret = krui_createLink( j,val);
	       errChk( ret );
	     }
	 }
        else{ /* set all link weights to zero */
	  for (i = IUnits + 1; i <= IUnits + HUnits; i++)
	    {  /*  Make hidden unit to current unit  */
	      ret = krui_setCurrentUnit( i );
	      errChk( ret );
	      
	      for (j = 1; j <= IUnits; j++)
		{/* (backward) connect current (hidden) unit with input unit */
		  ret = krui_createLink( j,0);
		  errChk( ret );
		}
	    } 
	  
	  printf("\nWeight file %s could not be opened!\n",weight_file);
	  printf("All weights have been set to zero!\n");
	}
       fclose(fp);

 
        /*  set the update function  */
       ret = krui_setUpdateFunc (KOHONEN_UPDATE_FUNC_NAME);
       errChk( ret );
        /* set the learning function */
       ret = krui_setLearnFunc (KOHONEN_LEARN_FUNC_NAME);
       errChk( ret );
        /* set the init function */
       ret = krui_setInitialisationFunc (KOHONEN_INIT_FUNC_NAME);
       errChk( ret );


       printf("\nEnter Filename of the Network to save: ");
       scanf("%s", name);
       strcat(name,".net");
       printf("Save Network\n");
      
/*  save the network  */

       ret = krui_saveNet( name, NULL );
       errChk( ret );
       printf( "\nCreate Patterns now\n" );

} /* end of create_network */