Beispiel #1
0
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 */
  }
}
Beispiel #2
0
/*****************************************************************************
  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