static void make_links(void) { int unit_ptr, mainUnit_Ptr; FlintType weight; weight = 1.0; for ((mainUnit_Ptr) = krui_getFirstUnit(); (mainUnit_Ptr) <= krui_getNoOfUnits(); (mainUnit_Ptr)++) /* main loop self connections too */ for ((unit_ptr) = krui_getFirstUnit(); (unit_ptr) <= krui_getNoOfUnits(); (unit_ptr)++) { /* inner loop */ /*if (NOT (unit_ptr == mainUnit_Ptr)) { not the same entry !! */ krui_setCurrentUnit(mainUnit_Ptr); if (NOT krui_isConnected(unit_ptr)) { krui_createLink(unit_ptr, weight); krui_setLinkWeight(weight); } } }
void ui_krui_setCurrentLink(int sourceNo, int targetNo, char *siteName) { (void) krui_setCurrentUnit(targetNo); /* target */ (void) ui_krui_setCurrentSite(targetNo, siteName); (void) krui_isConnected(sourceNo); /* sets current link */ }
Bool ui_krui_setCurrentSite(int targetNo, char *siteName) { (void) krui_setCurrentUnit(targetNo); /* target */ if (krui_getUnitInputType(targetNo) != SITES) return(TRUE); if ((siteName != NULL) AND strlen(siteName)) return((krui_setSite(siteName) == UI_SET_OK)); else return(FALSE); /* invalid site name */ }
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; } }
void create_patterns(char *pattern_file,int no_of_exemplars) { FILE *fp; float val; int setNo; if (!strlen(pattern_file) || !no_of_exemplars) return; /* shortcut of no patterns */ /* create patterns with datas from pattern_file */ if((fp=fopen(pattern_file,"r"))!=NULL){ ret = krui_allocNewPatternSet(&setNo); errChk( ret ); for (j = 1; j <= no_of_exemplars; j++){ for (i = 1; i <= IUnits; i++){ ret = krui_setCurrentUnit(i); errChk( ret ); fscanf(fp,"%s",string); val=atof(string); krui_setUnitActivation(i,val); } ret = krui_newPattern(); errChk( ret ); } } else { printf("\n Pattern file %s could not be opened!\n",pattern_file); exit(1); } fclose(fp); printf("\nFilename of patterns to save: "); scanf("%s", name); strcat(name,".pat"); printf("Save Patterns\n"); /* save the patterns */ ret = krui_saveNewPatterns( name, setNo ); errChk( ret ); } /* end of create_patterns */
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 */
/***************************************************************************** FUNCTION : bn_artmap_createNet PURPOSE : Generation of the ARTMAP network using SNNS kernel functions. NOTES : UPDATE : 20.1.1993 ******************************************************************************/ krui_err SnnsCLib::bn_artmap_createNet(int f1aUnits, int f1aRows, int f2aUnits, int f2aRows, int f1bUnits, int f1bRows, int f2bUnits, int f2bRows) { krui_err ret_code = KRERR_NO_ERROR; int NoOfSites; char **SiteName, **SiteFunc; int i, j; /* Allocate memory for the to pointer Arrays for site names and sitefunc names */ SiteName = (char **) malloc (2*sizeof(char *)); SiteFunc = (char **) malloc (2*sizeof(char *)); if ((SiteName == NULL) || (SiteFunc == NULL)) { return (KRERR_INSUFFICIENT_MEM); } /*if*/ /* Allocate memory to save Site names and Sitefunc names */ *SiteName = (char *)malloc (STRING_LENGTH); *(SiteName+1) = (char *)malloc (STRING_LENGTH); *SiteFunc = (char *)malloc (STRING_LENGTH); *(SiteFunc+1) = (char *)malloc (STRING_LENGTH); if ((*SiteName == NULL) || (*(SiteName+1) == NULL) || (*SiteFunc == NULL) || (*(SiteFunc+1) == NULL) ) { return (KRERR_INSUFFICIENT_MEM); } /*if*/ /********* create ARTa units ******************/ /* create Input Layer for ARTa */ ret_code = bn_artmap_make_layer (f1aUnits, f1aRows, F1a_COLS, INPa_X, INPa_Y, const_cast<char*>("inpa"), INPUT, ACTF_INPa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Comparison Layer for ARTa */ ret_code = bn_artmap_make_layer (f1aUnits, f1aRows, F1a_COLS, CMPa_X, CMPa_Y, const_cast<char*>("cmpa"), HIDDEN, ACTF_CMPa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Recognition Layer for ARTa */ ret_code = bn_artmap_make_layer (f2aUnits, f2aRows, F2a_COLS, RECa_X, RECa_Y, const_cast<char*>("reca"), SPECIAL, ACTF_RECa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Delay Layer for ARTa */ ret_code = bn_artmap_make_layer (f2aUnits, f2aRows, F2a_COLS, DELa_X, DELa_Y, const_cast<char*>("dela"), HIDDEN, ACTF_DELa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create d1a */ ret_code = bn_artmap_make_layer (1, 1, 1, D1a_X, D1a_Y, const_cast<char*>("d1a"), HIDDEN, ACTF_Da, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create d2a */ ret_code = bn_artmap_make_layer (1, 1, 1, D2a_X, D2a_Y, const_cast<char*>("d2a"), HIDDEN, ACTF_Da, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create d3a */ ret_code = bn_artmap_make_layer (1, 1, 1, D3a_X, D3a_Y, const_cast<char*>("d3a"), HIDDEN, ACTF_Da, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create local reset layer */ NoOfSites = 2; strcpy(*SiteName, SITE_NAME_RSTa_SELF); strcpy(*(SiteName+1), SITE_NAME_RSTa_SIGNAL); strcpy(*SiteFunc, SITE_FUNC_RSTa_SELF); strcpy(*(SiteFunc+1), SITE_FUNC_RSTa_SIGNAL); ret_code = bn_artmap_make_layer (f2aUnits, f2aRows, F2a_COLS, RSTa_X, RSTa_Y, const_cast<char*>("rsta"), HIDDEN, ACTF_RSTa, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create g1a */ NoOfSites = 2; strcpy(*SiteName , SITE_NAME_REC_G1a); strcpy(*(SiteName+1), SITE_NAME_INP_G1a); strcpy(*SiteFunc , SITE_FUNC_REC_G1a); strcpy(*(SiteFunc+1), SITE_FUNC_INP_G1a); ret_code = bn_artmap_make_layer (1, 1, 1, G1a_X, G1a_Y, const_cast<char*>("g1a"), HIDDEN, ACTF_G1a, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create ria */ NoOfSites = 2; strcpy(*SiteName , SITE_NAME_INP_RIa); strcpy(*(SiteName+1), SITE_NAME_RHO_RIa); strcpy(*SiteFunc , SITE_FUNC_INP_RIa); strcpy(*(SiteFunc+1), SITE_FUNC_RHO_RIa); ret_code = bn_artmap_make_layer (1, 1, 1, RIa_X, RIa_Y, const_cast<char*>("ria"), HIDDEN, ACTF_RIa, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create rca */ ret_code = bn_artmap_make_layer (1, 1, 1, RCa_X, RCa_Y, const_cast<char*>("rca"), HIDDEN, ACTF_RCa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create rga */ ret_code = bn_artmap_make_layer (1, 1, 1, RGa_X, RGa_Y, const_cast<char*>("rga"), HIDDEN, ACTF_RGa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create cla */ ret_code = bn_artmap_make_layer (1, 1, 1, CLa_X, CLa_Y, const_cast<char*>("cla"), HIDDEN, ACTF_CLa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create nca */ ret_code = bn_artmap_make_layer (1, 1, 1, NCa_X, NCa_Y, const_cast<char*>("nca"), HIDDEN, ACTF_NCa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create rhoa */ ret_code = bn_artmap_make_layer (1, 1, 1, RHOa_X, RHOa_Y, const_cast<char*>("rhoa"), HIDDEN, ACTF_RHOa, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create g2a */ ret_code = bn_artmap_make_layer (1, 1, 1, G2a_X, G2a_Y, const_cast<char*>("g2a"), HIDDEN, ACTF_G2a, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /********* create MAP-Field units ******************/ /* create map layer */ ret_code = bn_artmap_make_layer (f2bUnits, f2bRows, F2b_COLS, MAP_X, MAP_Y, const_cast<char*>("map"), HIDDEN, ACTF_MAP, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create d1 unit */ ret_code = bn_artmap_make_layer (1, 1, 1, D1_X, D1_Y, const_cast<char*>("d1"), HIDDEN, ACTF_D1, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create G unit */ NoOfSites = 2; strcpy(*SiteName , SITE_NAME_ARTa_G); strcpy(*(SiteName+1), SITE_NAME_ARTb_G); strcpy(*SiteFunc , SITE_FUNC_ARTa_G); strcpy(*(SiteFunc+1), SITE_FUNC_ARTb_G); ret_code = bn_artmap_make_layer (1, 1, 1, G_X, G_Y, const_cast<char*>("G"), HIDDEN, ACTF_G, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create rb unit */ NoOfSites = 2; strcpy(*SiteName , SITE_NAME_B_RB); strcpy(*(SiteName+1), SITE_NAME_RHO_RB); strcpy(*SiteFunc , SITE_FUNC_B_RB); strcpy(*(SiteFunc+1), SITE_FUNC_RHO_RB); ret_code = bn_artmap_make_layer (1, 1, 1, RB_X, RB_Y, const_cast<char*>("rb"), HIDDEN, ACTF_RB, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create rm unit */ ret_code = bn_artmap_make_layer (1, 1, 1, RM_X, RM_Y, const_cast<char*>("rm"), HIDDEN, ACTF_RM, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create rg unit */ ret_code = bn_artmap_make_layer (1, 1, 1, RG_X, RG_Y, const_cast<char*>("rg"), HIDDEN, ACTF_RG, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create cl unit */ ret_code = bn_artmap_make_layer (1, 1, 1, CL_X, CL_Y, const_cast<char*>("cl"), HIDDEN, ACTF_CL, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create nc unit */ ret_code = bn_artmap_make_layer (1, 1, 1, NC_X, NC_Y, const_cast<char*>("nc"), HIDDEN, ACTF_NC, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create rho unit */ ret_code = bn_artmap_make_layer (1, 1, 1, RHO_X, RHO_Y, const_cast<char*>("rho"), HIDDEN, ACTF_RHO, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create qu unit */ NoOfSites = 2; strcpy(*SiteName , SITE_NAME_INPa_QU); strcpy(*(SiteName+1), SITE_NAME_CMPa_QU); strcpy(*SiteFunc , SITE_FUNC_INPa_QU); strcpy(*(SiteFunc+1), SITE_FUNC_CMPa_QU); ret_code = bn_artmap_make_layer (1, 1, 1, QU_X, QU_Y, const_cast<char*>("qu"), HIDDEN, ACTF_QU, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create drho unit */ ret_code = bn_artmap_make_layer (1, 1, 1, DRHO_X, DRHO_Y, const_cast<char*>("drho"), HIDDEN, ACTF_DRHO, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /********* create ARTb units ******************/ /* create Input Layer for ARTb */ ret_code = bn_artmap_make_layer (f1bUnits, f1bRows, F1b_COLS, INPb_X, INPb_Y, const_cast<char*>("inpb"), INPUT, ACTF_INPb, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Comparison Layer for ARTb */ ret_code = bn_artmap_make_layer (f1bUnits, f1bRows, F1b_COLS, CMPb_X, CMPb_Y, const_cast<char*>("cmpb"), HIDDEN, ACTF_CMPb, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Recognition Layer for ARTb */ ret_code = bn_artmap_make_layer (f2bUnits, f2bRows, F2b_COLS, RECb_X, RECb_Y, const_cast<char*>("recb"), SPECIAL, ACTF_RECb, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Delay Layer for ARTa */ ret_code = bn_artmap_make_layer (f2bUnits, f2bRows, F2b_COLS, DELb_X, DELb_Y, const_cast<char*>("delb"), HIDDEN, ACTF_DELb, OUTFUNC, 0, NULL, NULL); /* create d1b */ ret_code = bn_artmap_make_layer (1, 1, 1, D1b_X, D1b_Y, const_cast<char*>("d1b"), HIDDEN, ACTF_Db, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create d2b */ ret_code = bn_artmap_make_layer (1, 1, 1, D2b_X, D2b_Y, const_cast<char*>("d2b"), HIDDEN, ACTF_Db, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create d3b */ ret_code = bn_artmap_make_layer (1, 1, 1, D3b_X, D3b_Y, const_cast<char*>("d3b"), HIDDEN, ACTF_Db, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create local reset layer */ NoOfSites = 2; strcpy(*SiteName , SITE_NAME_RSTb_SELF); strcpy(*(SiteName+1), SITE_NAME_RSTb_SIGNAL); strcpy(*SiteFunc , SITE_FUNC_RSTb_SELF); strcpy(*(SiteFunc+1), SITE_FUNC_RSTb_SIGNAL); ret_code = bn_artmap_make_layer (f2bUnits, f2bRows, F2b_COLS, RSTb_X, RSTb_Y, const_cast<char*>("rstb"), HIDDEN, ACTF_RSTb, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create g1b */ NoOfSites = 2; strcpy(*SiteName , SITE_NAME_REC_G1b); strcpy(*(SiteName+1), SITE_NAME_INP_G1b); strcpy(*SiteFunc , SITE_FUNC_REC_G1b); strcpy(*(SiteFunc+1), SITE_FUNC_INP_G1b); ret_code = bn_artmap_make_layer (1, 1, 1, G1b_X, G1b_Y, const_cast<char*>("g1b"), HIDDEN, ACTF_G1b, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create rib */ NoOfSites = 2; strcpy(*SiteName , SITE_NAME_INP_RIb); strcpy(*(SiteName+1), SITE_NAME_RHO_RIb); strcpy(*SiteFunc , SITE_FUNC_INP_RIb); strcpy(*(SiteFunc+1), SITE_FUNC_RHO_RIb); ret_code = bn_artmap_make_layer (1, 1, 1, RIb_X, RIb_Y, const_cast<char*>("rib"), HIDDEN, ACTF_RIb, OUTFUNC, NoOfSites, SiteName, SiteFunc); CHECK_RETURN (ret_code); /* create rcb */ ret_code = bn_artmap_make_layer (1, 1, 1, RCb_X, RCb_Y, const_cast<char*>("rcb"), HIDDEN, ACTF_RCb, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create rgb */ ret_code = bn_artmap_make_layer (1, 1, 1, RGb_X, RGb_Y, const_cast<char*>("rgb"), HIDDEN, ACTF_RGb, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create clb */ ret_code = bn_artmap_make_layer (1, 1, 1, CLb_X, CLb_Y, const_cast<char*>("clb"), HIDDEN, ACTF_CLb, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create ncb */ ret_code = bn_artmap_make_layer (1, 1, 1, NCb_X, NCb_Y, const_cast<char*>("ncb"), HIDDEN, ACTF_NCb, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create rhob */ ret_code = bn_artmap_make_layer (1, 1, 1, RHOb_X, RHOb_Y, const_cast<char*>("rhob"), HIDDEN, ACTF_RHOb, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create g2b */ ret_code = bn_artmap_make_layer (1, 1, 1, G2b_X, G2b_Y, const_cast<char*>("g2b"), HIDDEN, ACTF_G2b, OUTFUNC, 0, NULL, NULL); CHECK_RETURN (ret_code); /* Make Connections now */ /********* Create Links **************************************/ /********* Links to ARTa units ***********************/ /* TO cmpa units */ for (i=1; i<=f1aUnits; i++) { ret_code = krui_setCurrentUnit (CMPa_UNIT(i)); CHECK_RETURN (ret_code); /* FROM inpa units */ ret_code = krui_createLink (INPa_UNIT(i),0.0); CHECK_RETURN (ret_code); /* FROM g1a unit */ ret_code = krui_createLink (G1a_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM dela units */ for (j=1; j<=f2aUnits; j++) { ret_code = krui_createLink (DELa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ } /*for*/ /* TO reca units */ for (i=1; i<=f2aUnits; i++) { ret_code = krui_setCurrentUnit (RECa_UNIT(i)); CHECK_RETURN (ret_code); /* FROM cmpa units */ for (j=1; j<=f1aUnits; j++) { ret_code = krui_createLink (CMPa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* FROM rga unit */ ret_code = krui_createLink (RGa_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM rsta units */ ret_code = krui_createLink (RSTa_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* FROM g2a unit */ ret_code = krui_createLink (G2a_UNIT, 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO dela units */ for (i=1; i<=f2aUnits; i++) { ret_code = krui_setCurrentUnit (DELa_UNIT(i)); CHECK_RETURN (ret_code); /* FROM reca units */ ret_code = krui_createLink (RECa_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rsta units */ for (i=1; i<=f2aUnits; i++) { ret_code = krui_setCurrentUnit (RSTa_UNIT(i)); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_RSTa_SELF); CHECK_RETURN (ret_code); /* FROM itself */ ret_code = krui_createLink (RSTa_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* second Site */ ret_code = krui_setSite (SITE_NAME_RSTa_SIGNAL); CHECK_RETURN (ret_code); /* FROM dela units */ ret_code = krui_createLink (DELa_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* FROM rga unit */ ret_code = krui_createLink (RGa_UNIT, 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO d1a unit */ ret_code = krui_setCurrentUnit (Da_UNIT(1)); CHECK_RETURN (ret_code); /* FROM dela units */ for (j=1; j<=f2aUnits; j++) { ret_code = krui_createLink (DELa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO d2a unit */ ret_code = krui_setCurrentUnit (Da_UNIT(2)); CHECK_RETURN (ret_code); /* FROM d1a unit */ ret_code = krui_createLink (Da_UNIT(1), 0.0); CHECK_RETURN (ret_code); /* TO d3a unit */ ret_code = krui_setCurrentUnit (Da_UNIT(3)); CHECK_RETURN (ret_code); /* FROM d2a unit */ ret_code = krui_createLink (Da_UNIT(2), 0.0); CHECK_RETURN (ret_code); /* TO g1a unit */ ret_code = krui_setCurrentUnit (G1a_UNIT); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_REC_G1a); CHECK_RETURN (ret_code); /* FROM reca units */ for (j=1; j<=f2aUnits; j++) { ret_code = krui_createLink (RECa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* second Site */ ret_code = krui_setSite (SITE_NAME_INP_G1a); CHECK_RETURN (ret_code); /* FROM inpa units */ for (j=1; j<=f1aUnits; j++) { ret_code = krui_createLink (INPa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO ria unit */ ret_code = krui_setCurrentUnit (RIa_UNIT); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_INP_RIa); CHECK_RETURN (ret_code); /* FROM inpa units */ for (j=1; j<=f1aUnits; j++) { ret_code = krui_createLink (INPa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* second Site */ ret_code = krui_setSite (SITE_NAME_RHO_RIa); CHECK_RETURN (ret_code); /* from rhoa unit */ ret_code = krui_createLink (RHOa_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO rca unit */ ret_code = krui_setCurrentUnit (RCa_UNIT); CHECK_RETURN (ret_code); /* FROM cmpa units */ for (j=1; j<=f1aUnits; j++) { ret_code = krui_createLink (CMPa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rga unit */ ret_code = krui_setCurrentUnit (RGa_UNIT); CHECK_RETURN (ret_code); /* FROM ria unit */ ret_code = krui_createLink (RIa_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM rca unit */ ret_code = krui_createLink (RCa_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO cla unit */ ret_code = krui_setCurrentUnit (CLa_UNIT); CHECK_RETURN (ret_code); /* FROM d3a unit */ ret_code = krui_createLink (Da_UNIT(3), 0.0); CHECK_RETURN (ret_code); /* FROM rga unit */ ret_code = krui_createLink (RGa_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM g2a unit */ ret_code = krui_createLink (G2a_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO nca unit */ ret_code = krui_setCurrentUnit (NCa_UNIT); CHECK_RETURN (ret_code); /* FROM rsta units */ for (j=1; j<=f2aUnits; j++) { ret_code = krui_createLink (RSTa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rhoa unit */ ret_code = krui_setCurrentUnit (RHOa_UNIT); CHECK_RETURN (ret_code); /* FROM itself */ ret_code = krui_createLink (RHOa_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM drho unit */ ret_code = krui_createLink (DRHO_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO g2a unit */ ret_code = krui_setCurrentUnit (G2a_UNIT); CHECK_RETURN (ret_code); /* FROM inpa units */ for (j = 1; j <= f1aUnits; j++) { ret_code = krui_createLink (INPa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /********* Links to MAP Fiels units ***********************/ /* TO map units */ for (i=1; i<=f2bUnits; i++) { ret_code = krui_setCurrentUnit (MAP_UNIT(i)); CHECK_RETURN (ret_code); /* FROM dela units */ for (j=1; j<=f2aUnits; j++) { ret_code = krui_createLink (DELa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* FROM delb unit */ ret_code = krui_createLink (DELb_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* FROM G unit */ ret_code = krui_createLink (G_UNIT, 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO d1 unit */ ret_code = krui_setCurrentUnit (D1_UNIT); CHECK_RETURN (ret_code); /* FROM delb units */ for (j=1; j<=f2bUnits; j++) { ret_code = krui_createLink (DELb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO G unit */ ret_code = krui_setCurrentUnit (G_UNIT); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_ARTa_G); CHECK_RETURN (ret_code); /* FROM reca units */ for (j=1; j<=f2aUnits; j++) { ret_code = krui_createLink (RECa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* second Site */ ret_code = krui_setSite (SITE_NAME_ARTb_G); CHECK_RETURN (ret_code); /* FROM recb units */ for (j=1; j<=f2bUnits; j++) { ret_code = krui_createLink (RECb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rb unit */ ret_code = krui_setCurrentUnit (RB_UNIT); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_B_RB); CHECK_RETURN (ret_code); /* FROM d1 unit */ ret_code = krui_createLink (D1_UNIT, 0.0); CHECK_RETURN (ret_code); /* second Site */ ret_code = krui_setSite (SITE_NAME_RHO_RB); CHECK_RETURN (ret_code); /* from rho unit */ ret_code = krui_createLink (RHO_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO rm unit */ ret_code = krui_setCurrentUnit (RM_UNIT); CHECK_RETURN (ret_code); /* FROM map units */ for (j=1; j<=f2bUnits; j++) { ret_code = krui_createLink (MAP_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rg unit */ ret_code = krui_setCurrentUnit (RG_UNIT); CHECK_RETURN (ret_code); /* FROM rb unit */ ret_code = krui_createLink (RB_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM rm unit */ ret_code = krui_createLink (RM_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO cl unit */ ret_code = krui_setCurrentUnit (CL_UNIT); CHECK_RETURN (ret_code); /* FROM cla unit */ ret_code = krui_createLink (CLa_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM clb unit */ ret_code = krui_createLink (CLb_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM rg unit */ ret_code = krui_createLink (RG_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO nc unit */ ret_code = krui_setCurrentUnit (NC_UNIT); CHECK_RETURN (ret_code); /* FROM nca unit */ ret_code = krui_createLink (NCa_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM ncb unit */ ret_code = krui_createLink (NCb_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO rho unit */ ret_code = krui_setCurrentUnit (RHO_UNIT); CHECK_RETURN (ret_code); /* from itself */ ret_code = krui_createLink (RHO_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO qu unit */ ret_code = krui_setCurrentUnit (QU_UNIT); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_INPa_QU); CHECK_RETURN (ret_code); /* FROM inpa units */ for (j=1; j <= f1aUnits; j++) { ret_code = krui_createLink (INPa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* second Site */ ret_code = krui_setSite (SITE_NAME_CMPa_QU); CHECK_RETURN (ret_code); /* from cmpa units */ for (j=1; j<=f1aUnits; j++) { ret_code = krui_createLink (CMPa_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO drho unit */ ret_code = krui_setCurrentUnit (DRHO_UNIT); CHECK_RETURN (ret_code); /* from itself */ ret_code = krui_createLink (DRHO_UNIT, 0.0); CHECK_RETURN (ret_code); /* from rg unit */ ret_code = krui_createLink (RG_UNIT, 0.0); CHECK_RETURN (ret_code); /* from qu unit */ ret_code = krui_createLink (QU_UNIT, 0.0); CHECK_RETURN (ret_code); /* from rhoa unit */ ret_code = krui_createLink (RHOa_UNIT, 0.0); CHECK_RETURN (ret_code); /* from rga unit */ ret_code = krui_createLink (RGa_UNIT, 0.0); CHECK_RETURN (ret_code); /* from clb unit */ ret_code = krui_createLink (CLb_UNIT, 0.0); CHECK_RETURN (ret_code); /********* Links to ARTb units ***********************/ /* TO cmpb units */ for (i=1; i<=f1bUnits; i++) { ret_code = krui_setCurrentUnit (CMPb_UNIT(i)); CHECK_RETURN (ret_code); /* FROM inpb units */ ret_code = krui_createLink (INPb_UNIT(i),0.0); CHECK_RETURN (ret_code); /* FROM g1b unit */ ret_code = krui_createLink (G1b_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM delb units */ for (j=1; j<=f2bUnits; j++) { ret_code = krui_createLink (DELb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ } /*for*/ /* TO recb units */ for (i=1; i<=f2bUnits; i++) { ret_code = krui_setCurrentUnit (RECb_UNIT(i)); CHECK_RETURN (ret_code); /* FROM cmpb units */ for (j=1; j<=f1bUnits; j++) { ret_code = krui_createLink (CMPb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* FROM rgb unit */ ret_code = krui_createLink (RGb_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM rstb units */ ret_code = krui_createLink (RSTb_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* FROM g2b unit */ ret_code = krui_createLink (G2b_UNIT, 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO delb units */ for (i=1; i<=f2bUnits; i++) { ret_code = krui_setCurrentUnit (DELb_UNIT(i)); CHECK_RETURN (ret_code); /* FROM recb units */ ret_code = krui_createLink (RECb_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* FROM map units */ ret_code = krui_createLink (MAP_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rstb units */ for (i=1; i<=f2bUnits; i++) { ret_code = krui_setCurrentUnit (RSTb_UNIT(i)); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_RSTb_SELF); CHECK_RETURN (ret_code); /* FROM itself */ ret_code = krui_createLink (RSTb_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* second Site */ ret_code = krui_setSite (SITE_NAME_RSTb_SIGNAL); CHECK_RETURN (ret_code); /* FROM delb units */ ret_code = krui_createLink (DELb_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* FROM rgb unit */ ret_code = krui_createLink (RGb_UNIT, 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO d1b unit */ ret_code = krui_setCurrentUnit (Db_UNIT(1)); CHECK_RETURN (ret_code); /* FROM delb units */ for (j=1; j<=f2bUnits; j++) { ret_code = krui_createLink (DELb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO d2b unit */ ret_code = krui_setCurrentUnit (Db_UNIT(2)); CHECK_RETURN (ret_code); /* FROM d1b unit */ ret_code = krui_createLink (Db_UNIT(1), 0.0); CHECK_RETURN (ret_code); /* TO d3b unit */ ret_code = krui_setCurrentUnit (Db_UNIT(3)); CHECK_RETURN (ret_code); /* FROM d2b unit */ ret_code = krui_createLink (Db_UNIT(2), 0.0); CHECK_RETURN (ret_code); /* TO g1b unit */ ret_code = krui_setCurrentUnit (G1b_UNIT); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_REC_G1b); CHECK_RETURN (ret_code); /* FROM recb units */ for (j=1; j<=f2bUnits; j++) { ret_code = krui_createLink (RECb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* second Site */ ret_code = krui_setSite (SITE_NAME_INP_G1b); CHECK_RETURN (ret_code); /* FROM inpb units */ for (j=1; j<=f1bUnits; j++) { ret_code = krui_createLink (INPb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rib unit */ ret_code = krui_setCurrentUnit (RIb_UNIT); CHECK_RETURN (ret_code); /* first Site */ ret_code = krui_setSite (SITE_NAME_INP_RIb); CHECK_RETURN (ret_code); /* FROM inpb units */ for (j=1; j<=f1bUnits; j++) { ret_code = krui_createLink (INPb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* second Site */ ret_code = krui_setSite (SITE_NAME_RHO_RIb); CHECK_RETURN (ret_code); /* from rhob unit */ ret_code = krui_createLink (RHOb_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO rcb unit */ ret_code = krui_setCurrentUnit (RCb_UNIT); CHECK_RETURN (ret_code); /* FROM cmpb units */ for (j=1; j<=f1bUnits; j++) { ret_code = krui_createLink (CMPb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rgb unit */ ret_code = krui_setCurrentUnit (RGb_UNIT); CHECK_RETURN (ret_code); /* FROM rib unit */ ret_code = krui_createLink (RIb_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM rcb unit */ ret_code = krui_createLink (RCb_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO clb unit */ ret_code = krui_setCurrentUnit (CLb_UNIT); CHECK_RETURN (ret_code); /* FROM d3b unit */ ret_code = krui_createLink (Db_UNIT(3), 0.0); CHECK_RETURN (ret_code); /* FROM rgb unit */ ret_code = krui_createLink (RGb_UNIT, 0.0); CHECK_RETURN (ret_code); /* FROM g2b unit */ ret_code = krui_createLink (G2b_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO ncb unit */ ret_code = krui_setCurrentUnit (NCb_UNIT); CHECK_RETURN (ret_code); /* FROM rstb units */ for (j=1; j<=f2bUnits; j++) { ret_code = krui_createLink (RSTb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rhob unit */ ret_code = krui_setCurrentUnit (RHOb_UNIT); CHECK_RETURN (ret_code); /* from itself */ ret_code = krui_createLink (RHOb_UNIT, 0.0); CHECK_RETURN (ret_code); /* TO g2b unit */ ret_code = krui_setCurrentUnit (G2b_UNIT); CHECK_RETURN (ret_code); /* FROM inpb units */ for (j = 1; j <= f1bUnits; j++) { ret_code = krui_createLink (INPb_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* set the update function */ ret_code = krui_setUpdateFunc (UPDATE_FUNC_NAME); CHECK_RETURN( ret_code ); /* set the learning function */ ret_code = krui_setLearnFunc (LEARN_FUNC_NAME); //ui_NumberOfLearnParamsChanged(); //ui_NumberOfUpdateParamsChanged(); return (ret_code); }
/***************************************************************************** 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); }
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 */
krui_err SnnsCLib::bn_art2_createNet (int f1Units, int f1Rows, int f2Units, int f2Rows) { krui_err ret_code = KRERR_NO_ERROR; int i, j; /********* create units ******************/ /* create Input Layer */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, INP_X, INP_Y, 1, 1, const_cast<char*>("inp"), INPUT, ACTF_INP, OUTF_INP, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create W-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, W_X, W_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("w"), HIDDEN, ACTF_W, OUTF_W, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create X-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, X_X, X_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("x"), HIDDEN, ACTF_X, OUTF_X, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create U-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, U_X, U_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("u"), HIDDEN, ACTF_U, OUTF_U, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create V-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, V_X, V_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("v"), HIDDEN, ACTF_V, OUTF_V, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create P-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, P_X, P_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("p"), HIDDEN, ACTF_P, OUTF_P, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Q-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, Q_X, Q_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("q"), HIDDEN, ACTF_Q, OUTF_Q, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create R-Units */ ret_code = bn_art2_make_layer (f1Units, f1Rows, F1_COLS, R_X, R_Y, F1_SEP_X, F1_SEP_Y, const_cast<char*>("r"), HIDDEN, ACTF_R, OUTF_R, 0, NULL, NULL); CHECK_RETURN (ret_code); /* create Recognition Layer */ ret_code = bn_art2_make_layer (f2Units, f2Rows, F2_COLS, REC_X, REC_Y, 1, 1, const_cast<char*>("rec"), SPECIAL, ACTF_REC, OUTF_REC, 0, NULL, NULL); CHECK_RETURN (ret_code); ret_code = bn_art2_make_layer (f2Units, f2Rows, F2_COLS, RST_X, RST_Y, 1, 1, const_cast<char*>("rst"), HIDDEN, ACTF_RST, OUTF_RST, 0, NULL, NULL); CHECK_RETURN (ret_code); /********* Create Links **************************************/ /* TO w units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (W_UNIT(i)); CHECK_RETURN (ret_code); /* FROM inp units */ ret_code = krui_createLink (INP_UNIT(i),0.0); CHECK_RETURN (ret_code); /* FROM u units */ ret_code = krui_createLink (U_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO x units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (X_UNIT(i)); CHECK_RETURN (ret_code); /* FROM w units */ ret_code = krui_createLink (W_UNIT(i),0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO u units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (U_UNIT(i)); CHECK_RETURN (ret_code); /* FROM v units */ ret_code = krui_createLink (V_UNIT(i),0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO v units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (V_UNIT(i)); CHECK_RETURN (ret_code); /* FROM x units */ ret_code = krui_createLink (X_UNIT(i),0.0); CHECK_RETURN (ret_code); /* FROM q unit */ ret_code = krui_createLink (Q_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO p units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (P_UNIT(i)); CHECK_RETURN (ret_code); /* FROM rec units */ for (j=1; j<=f2Units; j++) { ret_code = krui_createLink (REC_UNIT(j),0.0); CHECK_RETURN (ret_code); } /*for*/ /* FROM u unit */ ret_code = krui_createLink (U_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO q units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (Q_UNIT(i)); CHECK_RETURN (ret_code); /* FROM p unit */ ret_code = krui_createLink (P_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO r units */ for (i=1; i<=f1Units; i++) { ret_code = krui_setCurrentUnit (R_UNIT(i)); CHECK_RETURN (ret_code); /* FROM p unit */ ret_code = krui_createLink (P_UNIT(i), 0.0); CHECK_RETURN (ret_code); /* FROM inp unit */ ret_code = krui_createLink (INP_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rec units */ for (i=1; i<=f2Units; i++) { ret_code = krui_setCurrentUnit (REC_UNIT(i)); CHECK_RETURN (ret_code); /* FROM p units */ for (j=1; j<=f1Units; j++) { ret_code = krui_createLink (P_UNIT(j), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* FROM rst unit */ ret_code = krui_createLink (RST_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ /* TO rst units */ for (i=1; i<=f2Units; i++) { ret_code = krui_setCurrentUnit (RST_UNIT(i)); CHECK_RETURN (ret_code); /* FROM rec units */ ret_code = krui_createLink (REC_UNIT(i), 0.0); CHECK_RETURN (ret_code); } /*for*/ //printf (" Done.\n"); /* set the update function */ ret_code = krui_setUpdateFunc (UPDATE_FUNC_NAME); CHECK_RETURN( ret_code ); /* set the learning function */ ret_code = krui_setLearnFunc (LEARN_FUNC_NAME); return (ret_code); }
/***************************************************************************** FUNCTION : o_createOszi PURPOSE : creates the window GRAPH RETURNS : void NOTES : UPDATE : 08.03.95 ******************************************************************************/ void o_createOszi (void) { Widget menu,mItem,form,w1,w2,printlab; Widget Done_oszi, clear_oszi, print_oszi; Arg arg[5]; Cardinal n; char buf[40]; Colormap o_graph_col; unsigned long foreground,background; int curr_unit,test_unit, count_unit = 0; o_graph_error_scale = GRAPH_SSE; /* test whether there are output units defined. Since no error can be computed in the opposit case, the graph tool can not be used */ curr_unit = krui_getCurrentUnit(); test_unit = krui_getFirstUnit(); do{ n=krui_getUnitTType(test_unit); if( (n == 2) || (n == 7) ) count_unit = 1; }while((test_unit = krui_getNextUnit()) && (count_unit == 0)); curr_unit = krui_setCurrentUnit(curr_unit); if(count_unit == 0){ ui_confirmOk("No Output units defined!\nAn error can neither be\ncomputed nor displayed!"); return; } if(o_open) { XRaiseWindow (XtDisplay (o_displayMainWidget), XtWindow (o_displayMainWidget)); return; } o_open = 1; o_init(); sprintf (buf, "SNNS graph"); n = 0; XtSetArg(arg[n],XtNminWidth,460); n++; XtSetArg(arg[n],XtNminHeight,200); n++; XtSetArg(arg[n],XtNheight,o_WindowHeight+58); n++; XtSetArg(arg[n],XtNwidth,o_WindowWidth+10); n++; XtSetArg(arg[n],XtNborderWidth,1); n++; o_displayMainWidget = XtCreatePopupShell(buf, topLevelShellWidgetClass, ui_toplevel, arg, n); n = 0; form = XtCreateManagedWidget ("form", formWidgetClass, o_displayMainWidget, arg, n); grid_oszi = ui_xCreateToggleItem ("grid",form,NULL,NULL,NULL); ui_xSetToggleState (grid_oszi, FALSE) ; XtAddCallback (grid_oszi, XtNcallback, (XtCallbackProc) o_gridProc, NULL); print_oszi = ui_xCreateButtonItem ("print",form,grid_oszi,NULL); XtAddCallback(print_oszi, XtNcallback, (XtCallbackProc) o_printProc, NULL); if(strlen(o_printfile) == 0)sprintf(o_printfile,"./graph.ps"); printlab = ui_xCreateLabelItem("Print to file:",form,14*8,print_oszi,NULL); o_printW = ui_xCreateDialogItem ("o_printW",form,o_printfile,0, printlab,NULL); Done_oszi = ui_xCreateButtonItem ("done",form,NULL,grid_oszi); XtAddCallback(Done_oszi,XtNcallback,(XtCallbackProc) o_DoneProc,NULL); clear_oszi = ui_xCreateButtonItem ("clear",form,Done_oszi,grid_oszi); XtAddCallback(clear_oszi,XtNcallback,(XtCallbackProc) o_clearProc,NULL); w1 = ui_xCreateLabelItem ("Scale X:",form,7*8,print_oszi,grid_oszi); w2 = ui_xCreateButtonItem ("prev",form,w1,grid_oszi); XtAddCallback(w2,XtNcallback,(XtCallbackProc) o_XForwardProc,NULL); w1 = ui_xCreateButtonItem ("next",form,w2,grid_oszi); XtAddCallback(w1,XtNcallback,(XtCallbackProc) o_XBackProc,NULL); w2 = ui_xCreateLabelItem (" Scale Y:",form,9*8,w1,grid_oszi); w1 = ui_xCreateButtonItem ("prev",form,w2,grid_oszi); XtAddCallback(w1,XtNcallback,(XtCallbackProc) o_YBackProc,NULL); w2 = ui_xCreateButtonItem ("next",form,w1,grid_oszi); XtAddCallback(w2,XtNcallback,(XtCallbackProc) o_YForwardProc,NULL); w1 = ui_xCreateLabelItem (" Display:",form,9*8,w2,grid_oszi); o_scaleWidget = ui_xCreateMenuButtonItem(" SSE ",form,w1,grid_oszi); menu = XtCreatePopupShell("menu",simpleMenuWidgetClass,o_scaleWidget, NULL,ZERO); mItem = XtCreateManagedWidget(" SSE",smeBSBObjectClass,menu,NULL,ZERO); XtAddCallback(mItem,XtNcallback,(XtCallbackProc)o_set_err_scale,(caddr_t)1); mItem = XtCreateManagedWidget(" MSE",smeBSBObjectClass,menu,NULL,ZERO); XtAddCallback(mItem,XtNcallback,(XtCallbackProc)o_set_err_scale,(caddr_t)2); mItem = XtCreateManagedWidget("SSE/#out", smeBSBObjectClass,menu,NULL,ZERO); XtAddCallback(mItem,XtNcallback,(XtCallbackProc)o_set_err_scale,(caddr_t)3); o_DisplayWidget = o_xCreateScreenItem("screen",form,o_WindowWidth, o_WindowHeight,NULL,clear_oszi); XtAddEventHandler(o_DisplayWidget,StructureNotifyMask | ExposureMask, FALSE,(XtEventHandler) o_eventProc,o_display); XtAddEventHandler(form,KeyPressMask,FALSE, (XtEventHandler)ui_key_control,(Cardinal *) 0); ui_checkWindowPosition(o_displayMainWidget); XtPopup (o_displayMainWidget, XtGrabNone); o_display = XtDisplay (o_DisplayWidget); o_window = XtWindow (o_DisplayWidget); o_fontStruct = XLoadQueryFont(o_display, "6x12"); o_gc[label_gc] = XCreateGC (o_display, o_window, ZERO, NULL); o_gc[train_gc] = XCreateGC (o_display, o_window, ZERO, NULL); o_gc[test_gc] = XCreateGC (o_display, o_window, ZERO, NULL); XSetFont(o_display,o_gc[label_gc],(*o_fontStruct).fid); o_screen = DefaultScreen (o_display); o_depth = DisplayPlanes(o_display,o_screen); o_graph_col = DefaultColormap(o_display, o_screen); if(ui_col_monochromeMode == FALSE){ /* settings for black learning curve */ fg.red = 0; fg.green = 0; fg.blue = 0; fg2.red = 65535; fg2.green = 0; fg2.blue = 0; }else{ XSetLineAttributes(o_display, o_gc[test_gc],1,LineDoubleDash, CapButt,JoinMiter); fg.red = 0; fg.green = 0; fg.blue = 0; fg2.red = 0; fg2.green = 0; fg2.blue = 0; } background = WhitePixel (o_display, o_screen); XSetBackground (o_display, o_gc[train_gc], background); XSetBackground (o_display, o_gc[test_gc], background); XSetBackground (o_display, o_gc[label_gc], background); XAllocColor(o_display,o_graph_col,&fg); XAllocColor(o_display,o_graph_col,&fg2); foreground = BlackPixel (o_display, o_screen); XSetForeground (o_display, o_gc[train_gc], fg.pixel); XSetForeground (o_display, o_gc[test_gc], fg2.pixel); XSetForeground (o_display, o_gc[label_gc], foreground); XSetGraphicsExposures(o_display,o_gc[label_gc],0); XSetGraphicsExposures(o_display,o_gc[train_gc],0); XSetGraphicsExposures(o_display,o_gc[test_gc],0); o_Pixmap = XCreatePixmap(o_display,o_window, (unsigned int) o_PixmapWidth, (unsigned int) o_PixmapHeight, (unsigned int) o_depth); o_ClearPixmap(o_display,o_Pixmap,o_gc[train_gc],fg.pixel,o_screen,0,0, o_PixmapWidth,o_PixmapHeight); o_ClearPixmap(o_display,o_Pixmap,o_gc[test_gc],fg2.pixel,o_screen,0,0, o_PixmapWidth,o_PixmapHeight); XClearArea(o_display,o_window,o_OsziXPos,o_OsziYPos, (unsigned int) o_OsziWidth-1, (unsigned int) o_OsziHeight,1); o_PressPossible = 1; }
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 */