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*/
}
void    errChk(int errNo )
{
  if (errNo != 0)
    {
    printf( "%s\n", krui_error( errNo ));
    exit( 1 );
    }
} /* end of errChk */
Exemple #3
0
int snns_setCurrentUnit(stEval *args, stEval *result, void *instance) {
  int currUnit = STINT(&args[0]);
  krui_err errCode;
  char *errMsg;

  errCode = krui_setCurrentUnit( currUnit );
  if (errCode == KRERR_NO_ERROR) {
     return EC_OK;
  }
  else {
    errMsg = krui_error(errCode);
    slMessage(0, "breveSNNS: setCurrentUnit failed with message %s (error code %d).", errMsg, errCode);
    return EC_ERROR;
  }
}
Exemple #4
0
/*******************************************************************************
 *  snns_showPattern
 *
 *  From the SNNS documentation:
 *    "According to the mode [snns_showPattern] stores the current
 *     pattern into the units activation (and/or output) values.
 *     The modes are:
 *       - OUTPUT_NOTHING
 *          store input pattern into input units activations
 *       - OUTPUT_ACT
 *          store input pattern into input units activations and
 *          store output pattern into output units activations
 *       - OUTPUT_OUT
 *          store input pattern into input units activations,
 *          store output pattern into output units activations and
 *          update output units output"
 *
 * i.e. shows a patten to the network using
 * krui_showPattern
 ********************************************************************************/
int snns_showPattern(stEval *args, stEval *result, void *instance) {
  int mode = STINT(&args[1]);
  krui_err errCode;
  char *errMsg;

  errCode = krui_showPattern( mode );
  if (errCode == KRERR_NO_ERROR) {
     return EC_OK;
  }
  else {
    errMsg = krui_error(errCode);
    slMessage(0, "breveSNNS: setPatternNo failed with message %s (error code %d).", errMsg, errCode);
    return EC_ERROR;
  }
}
Exemple #5
0
/**************************************************
 *  snns_setInitialisationFunc
 * 
 *  Sets the network initialization function using
 *  krui_setInitialisationFunc().
 **************************************************/
int snns_setInitialisationFunc(stEval *args, stEval *result, void *instance) {
  char *initFuncName = STSTRING(&args[0]);
  krui_err errCode;
  char *errMsg;

  errCode = krui_setInitialisationFunc( initFuncName );
  if (errCode == KRERR_NO_ERROR) {
    return EC_OK;
  }
  else {
    errMsg = krui_error(errCode);
    slMessage(0, "breveSNNS: setInitialisationFunc failed with message %s (error code %d).", errMsg, errCode);
    return EC_ERROR;
  }
}
Exemple #6
0
int snns_setUnitName(stEval *args, stEval *result, void *instance) {
  char* unitName = STSTRING(&args[1]);
  int unitNo = STINT(&args[0]);
  krui_err errCode;
  char* errMsg;

  errCode = krui_setUnitName( unitNo, unitName );
  if (errCode == KRERR_NO_ERROR) {
     return EC_OK;
  }
  else {
    errMsg = krui_error(errCode);
    slMessage(0, "breveSNNS: setUnitName failed with message %s (error code %d).", errMsg, errCode);
    return EC_ERROR;
  }
}
Exemple #7
0
/********************************************************************************
 *  snns_updateNet
 *
 *  updates the network according to update function using
 *  krui_updateNet
 ********************************************************************************/
int snns_updateNet(stEval *args, stEval *result, void *instance) {
  float *params = (float*)STLIST(&args[0]);
  int	numParams = STINT(&args[1]);
  krui_err errCode;
  char *errMsg;

  errCode = krui_updateNet( params, numParams );
  if (errCode == KRERR_NO_ERROR) {
     return EC_OK;
  }
  else {
    errMsg = krui_error(errCode);
    slMessage(0, "breveSNNS: updateNet failed with message %s (error code %d).", errMsg, errCode);
    return EC_ERROR;
  }
}
Exemple #8
0
int snns_setUnitActivation(stEval *args, stEval *result, void *instance) {
  int unitNo = STINT(&args[0]);
  FlintTypeParam unitActivation = STDOUBLE(&args[1]);
  krui_err errCode;
  char *errMsg;

  errCode = krui_setUnitActivation(unitNo, unitActivation);
  if (errCode == KRERR_NO_ERROR) {
    return EC_OK;
  }
  else {
    errMsg = krui_error(errCode);
    slMessage(0, "breveSNNS: setUnitActivation failed with message %s (error code %d).", errMsg, errCode);
    return EC_ERROR;
  }
}
Exemple #9
0
/**************************************************
 *  snns_saveNewPatterns
 * 
 *  Saves patterns from a file using
 *  krui_saveNewPatterns().
 **************************************************/
int snns_saveNewPatterns(stEval *args, stEval *result, void *instance) {
  char *filename = STSTRING(&args[0]);
  int set_no = STINT(&args[1]);
  krui_err errCode;
  char *errMsg;

  errCode = krui_saveNewPatterns(filename, set_no);
  if (errCode == KRERR_NO_ERROR) {
    return EC_OK;
  }
  else {
    errMsg = krui_error(errCode);
    slMessage(0, "breveSNNS: saveNewPatterns failed with message %s (error code %d).", errMsg, errCode);
    return EC_ERROR;
  }
}
Exemple #10
0
/**************************************************
 *  snns_loadNet
 * 
 *  Loads a network via the SNNS kernel UI function
 *  krui_loadNet().
 **************************************************/
int snns_loadNet(stEval *args, stEval *result, void *instance) {
  char *filename = STSTRING(&args[0]);
  char *netname, *netname1;
  krui_err errCode;
  char *errMsg;

  slMessage(0, "breveSNNS: in loadNet()");
  errCode = krui_loadNet(filename, &netname);
  slMessage(0, "breveSNNS: loadNet(): just finished calling krui_loadNet()");
  fflush(stderr);
  fflush(stdout);
  netname1 = (char *)slMalloc((strlen(netname)+1) * sizeof(char));
  strcpy(netname1, netname);
  if(errCode == KRERR_NO_ERROR) {
    STSTRING(result) = netname1;
    return EC_OK;
  }
  else {
    errMsg = krui_error(errCode);
    slMessage(0, "breveSNNS: loadNet failed with message %s (error code %d).", errMsg, errCode);
    return EC_ERROR;
  }
}
void
ui_checkError(krui_err error)
{
    if ((ui_kernelError = error) != 0)
	ui_tw_errorMessage(krui_error(error));
}
Exemple #12
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 #13
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);
}