SICALLBACK aaOcean_BeginEvaluate( ICENodeContext& in_ctxt ) { // get ocean pointer from user-data aaOcean *pOcean = (aaOcean *)(CValue::siPtrType)in_ctxt.GetUserData(); // get ICE node input port arrays CDataArrayLong PointID( in_ctxt, ID_IN_PointID); CDataArrayLong resolution( in_ctxt, ID_IN_RESOLUTION); CDataArrayLong seed( in_ctxt, ID_IN_SEED); CDataArrayFloat waveHeight( in_ctxt, ID_IN_WAVE_HEIGHT); CDataArrayFloat waveSpeed( in_ctxt, ID_IN_WAVESPEED); CDataArrayFloat chop( in_ctxt, ID_IN_CHOP); CDataArrayFloat oceanScale( in_ctxt, ID_IN_OCEAN_SCALE ); CDataArrayFloat oceanDepth( in_ctxt, ID_IN_OCEAN_DEPTH ); CDataArrayFloat windDir( in_ctxt, ID_IN_WINDDIR ); CDataArrayFloat cutoff( in_ctxt, ID_IN_CUTOFF); CDataArrayFloat velocity( in_ctxt, ID_IN_WINDVELOCITY); CDataArrayLong windAlign( in_ctxt, ID_IN_WINDALIGN ); CDataArrayFloat damp( in_ctxt, ID_IN_DAMP); CDataArrayBool enableFoam( in_ctxt, ID_IN_ENABLEFOAM); CDataArrayFloat time( in_ctxt, ID_IN_TIME); CDataArrayFloat loopTime( in_ctxt, ID_IN_REPEAT_TIME); CDataArrayFloat surfaceTension( in_ctxt, ID_IN_SURFACE_TENSION); CDataArrayFloat randWeight( in_ctxt, ID_IN_RAND_WEIGHT); pOcean->input(resolution[0], seed[0], oceanScale[0], oceanDepth[0], surfaceTension[0], velocity[0], cutoff[0], windDir[0], windAlign[0], damp[0], waveSpeed[0], waveHeight[0], chop[0], time[0], loopTime[0], enableFoam[0], randWeight[0]); return CStatus::OK; }
//main teaching function void teachNeuron(int selection, int truthTable[4][4], int statesArray[4][2], int erasAmount, int reportFreq, float bias, float eta, float threshold, int statesAmount) { /** * variables in function definition */ int i, j, wartoscOczekiwana, x0, x1 = 0, min = -2, max = 2; float w0, w1, w2, dw0, dw1, dw2, max_err, min_err, adder, blad = 0.0; //proper selection value --selection; //set first random weight w0 = randWeight(min,max); w1 = randWeight(min,max); w2 = randWeight(min,max); //diagnostic info printf("Wylosowane wagi poczatkowe to: w0 = %2.2f, w1 = %2.2f, w2 = %2.2f\n", w0, w1, w2); //learning process loops //eras count for (; i < erasAmount; i++) { //steps count for(; j < statesAmount; j++) { adder = 0; w0 = w0 + dw0; w1 = w1 + dw1; w2 = w2 + dw2; x0 = statesArray[j][0]; x1 = statesArray[j][1]; wartoscOczekiwana = truthTable[selection][j]; adder = w0*bias+w1*x0+w2*x1; blad = wartoscOczekiwana - adder; dw0 = eta * blad * bias; dw1 = eta * blad * x0; dw2 = eta * blad * x1; //check max and min error if(blad > max_err) { max_err = blad; } if(blad < min_err) { min_err = blad; } //print error info if(i%reportFreq == 0) { printf("Zarejestrowany blad dla ostatnich %d epok to: %f\n", reportFreq, max_err-min_err); min_err = 0; max_err = 0; } } j = 0; } //diagnostic info printf("Dobrane wagi koncowe to: w0 = %2.2f, w1 = %2.2f, w2 = %2.2f\n", w0, w1, w2); // return returnArray; }