Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
//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;
        
}