bool SnnsCLib::cc_UnitsHaveToBeConnected(int SpecialUnitNo,struct Unit *UnitPtr) { int UnitNo,relUnitNo; int i; UnitNo=GET_UNIT_NO(UnitPtr); relUnitNo=((IS_HIDDEN_UNIT(UnitPtr)) ? REL_HIDDEN_NO(UnitNo) : UnitNo); switch (cc_modification){ /* no break required */ case(CC_SDCC) : return((IS_INPUT_UNIT(UnitPtr))|| (SpecialUnitNo >= cc_MaxSpecialUnitNo/2)|| (CC_LAYER_NO(UnitPtr)<NoOfLayers)); case(CC_ECC) : return ((IS_INPUT_UNIT(UnitPtr)) || ((float)relUnitNo/(float)(1+NoOfHiddenUnits)) <= CCC_M); case(CC_STAT) : return ((IS_INPUT_UNIT(UnitPtr)) || (relUnitNo <= NoOfHiddenUnits + 1 - (ccm_CurrentLayerHeight-ccm_MissingUnitsInLayer))); case(CC_LFCC) : for(i=0;i<CCR_NO_OF_LINKS;i++){ if (UnitNo==ccr_ListOfChosenUnits[i]){ return (TRUE); } } return (FALSE); /* Nicht in Liste vorhanden */ case(CC_RLCC) : return(CC_LAYER_NO(UnitPtr) < cco_ActualLayer); default : return (TRUE); /* no modification */ } }
/***************************************************************************** FUNCTION : cc_modifyHighScore PURPOSE : changes the HighScore according the the actual modification. NOTES : UPDATE : 30.03.96 ******************************************************************************/ double SnnsCLib::cc_modifyHighScore(struct Unit* SpecialUnitPtr, int s, double old) { switch(cc_modification){ case(CC_SDCC) : return ((s >= (cc_MaxSpecialUnitNo/2)) ? CCB_LAMBDA*old : old); case(CC_RLCC) : return (pow(CCO_FAKTOR,NoOfLayers-CC_LAYER_NO(SpecialUnitPtr))*old); default : return (old); } }
/***************************************************************************** FUNCTION : cc_LayerCorrectnessTest PURPOSE : Tests if the layer data is valid NOTES : UPDATE : 30.03.96 <Juergen Gatter> ******************************************************************************/ void cc_LayerCorrectnessTest(float* ParameterInArray, int StartPattern, int EndPattern) { int LayerDataCorrect=TRUE; struct Unit *UnitPtr,*UnitPtr2; struct Link *LinkPtr; FOR_ALL_UNITS(UnitPtr){ if ((CC_LAYER_NO(UnitPtr)==0)&&(IS_OUTPUT_UNIT(UnitPtr))) LayerDataCorrect=FALSE; } if (!LayerDataCorrect) { cc_calculateNetParameters(); FOR_ALL_UNITS(UnitPtr){ CC_SET_LAYER_NO(UnitPtr,0); } NoOfLayers=0; /*cc_lastFirstOutputRow=100000;*/ FOR_ALL_UNITS(UnitPtr){ FOR_ALL_LINKS(UnitPtr,LinkPtr){ UnitPtr2=LinkPtr->to; if ((CC_LAYER_NO(UnitPtr2)+1) > CC_LAYER_NO(UnitPtr)) CC_SET_LAYER_NO(UnitPtr,CC_LAYER_NO(UnitPtr2)+1); } if(CC_LAYER_NO(UnitPtr)>NoOfLayers) NoOfLayers=CC_LAYER_NO(UnitPtr); /*if ((IS_OUTPUT_UNIT(unitPtr))&& (GET_UNIT_XPOS(unitPtr) < cc_lastFirstOutputRow)) cc_lastFirstOutputRow = GET_UNIT_XPOS(unitPtr);*/ } /* This algorithm works correct, iff u2 is in a layer greater than u1