summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/svm/src/c/examineExample.c
blob: 5335f3540534233a1a7eeb3b8d9a6196d6fed575 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/********************************
Author: Sravanthi Kota Venkata
********************************/

#include "svm.h"

int examineExample(int i, F2D* a, float* b, float C, F2D* e, F2D* X, F2D* Y, float tolerance, int N, float eps, int dim)
{
    int  ret, j, k, m, n;
    float E, r1, randVal;
    float maxDiff, temp;

    if( ( asubsref(a,i) > 0) && ( asubsref(a,i) <C) )
        E = asubsref(e,i);
    else
        E = cal_learned_func(i, a, b, N, Y, X, dim) - asubsref(Y,i);

    r1 = subsref(Y,i,0) * E;
    if( ((r1 < (-1*tolerance)) && ( asubsref(a,i) < C)) || ((r1 >tolerance) && ( asubsref(a,i) > 0)) )
    {
        maxDiff = 0;
        j = i;

        for(k=0; k<N; k++)
        {
            if( ( asubsref(a,k) > 0) && ( asubsref(a,k) < C) )
            {
                temp = fabsf( E - asubsref(e,k));
                if (temp > maxDiff)
                    j = k;
            }
        }

        if ( i!=j)
        {
            ret = takeStep(i, j, a, C, e, Y, X, eps, b, N, dim);
            if(ret == 1)
                return ret;
        }

        randVal = 1.0;
        for( k= (randVal*(N-2)); k<N; k++)
        {
            if( ( asubsref(a,k) > 0) && ( asubsref(a,k) <C) )
            {
                ret = takeStep(i, k, a, C, e, Y, X, eps, b, N, dim);
                if (ret == 1)
                    return ret;
            }
        }

        for(k=0; k<N; k++)
        {
            ret = takeStep(i, k, a, C, e, Y, X, eps, b, N, dim);
            if(ret == 1)
                return ret;
        }
    }

    
    ret = 0;
    return ret;
}