diff options
| author | leochanj105 <leochanj@live.unc.edu> | 2021-10-26 13:22:32 -0400 |
|---|---|---|
| committer | leochanj105 <leochanj@live.unc.edu> | 2021-10-26 13:22:32 -0400 |
| commit | 14c854543b1a3cf344a371a5b45595657f95786b (patch) | |
| tree | 70f752880522e5e44669af365754ac0f649dce81 /SD-VBS/benchmarks/svm/src/c/takeStep.c | |
| parent | 5e2ccfae0532ddd89bcc04bf14aad451e9c79785 (diff) | |
add deadlines and costs
Diffstat (limited to 'SD-VBS/benchmarks/svm/src/c/takeStep.c')
| -rw-r--r-- | SD-VBS/benchmarks/svm/src/c/takeStep.c | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/SD-VBS/benchmarks/svm/src/c/takeStep.c b/SD-VBS/benchmarks/svm/src/c/takeStep.c deleted file mode 100644 index ae550c2..0000000 --- a/SD-VBS/benchmarks/svm/src/c/takeStep.c +++ /dev/null | |||
| @@ -1,188 +0,0 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "svm.h" | ||
| 6 | |||
| 7 | int takeStep(int i, int j, F2D* a, float C, F2D* e, F2D* Y, F2D* X, float eps, float* b, int N, int dim) | ||
| 8 | { | ||
| 9 | int ret=1; | ||
| 10 | float s; | ||
| 11 | int m, n, k; | ||
| 12 | float Ei, Ej, gamma, L, H; | ||
| 13 | F2D *a_old; | ||
| 14 | float k11, k12, k22, eta; | ||
| 15 | F2D *temp, *temp1, *temp2; | ||
| 16 | float t, t1, t2; | ||
| 17 | float bnew, delta_b; | ||
| 18 | float c1, c2, Lobj, Hobj; | ||
| 19 | |||
| 20 | if(i==j) | ||
| 21 | return 0; | ||
| 22 | |||
| 23 | a_old = fDeepCopy(a); | ||
| 24 | |||
| 25 | if( asubsref(a_old,i)>0 && asubsref(a_old,i)<C ) | ||
| 26 | Ei = asubsref(e,i); | ||
| 27 | else | ||
| 28 | Ei = cal_learned_func(i, a, b, N, Y, X, dim) - asubsref(Y,i); | ||
| 29 | |||
| 30 | if( asubsref(a_old,j)>0 && asubsref(a_old,j)<C ) | ||
| 31 | Ej = asubsref(e,j); | ||
| 32 | else | ||
| 33 | Ej = cal_learned_func(j, a, b, N, Y, X, dim) - asubsref(Y,j); | ||
| 34 | |||
| 35 | s = asubsref(Y,i) * asubsref(Y,j); | ||
| 36 | |||
| 37 | if( asubsref(Y,i) == asubsref(Y,j) ) | ||
| 38 | { | ||
| 39 | gamma = asubsref(a_old,i) + asubsref(a_old,j); | ||
| 40 | if(gamma > C) | ||
| 41 | { | ||
| 42 | L = gamma - C; | ||
| 43 | H = C; | ||
| 44 | } | ||
| 45 | else | ||
| 46 | { | ||
| 47 | L = 0; | ||
| 48 | H = gamma; | ||
| 49 | } | ||
| 50 | } | ||
| 51 | else | ||
| 52 | { | ||
| 53 | gamma = asubsref(a_old,i) - asubsref(a_old,j); | ||
| 54 | if(gamma > 0) | ||
| 55 | { | ||
| 56 | L = 0; | ||
| 57 | H = C - gamma; | ||
| 58 | } | ||
| 59 | else | ||
| 60 | { | ||
| 61 | L = -gamma; | ||
| 62 | H = C; | ||
| 63 | } | ||
| 64 | } | ||
| 65 | |||
| 66 | |||
| 67 | if(L==H) | ||
| 68 | { | ||
| 69 | fFreeHandle(a_old); | ||
| 70 | return 0; | ||
| 71 | } | ||
| 72 | |||
| 73 | temp = fMallocHandle(1, X->width); | ||
| 74 | temp1 = fMallocHandle(1, X->width); | ||
| 75 | |||
| 76 | for(m=0; m<X->width; m++) | ||
| 77 | { | ||
| 78 | asubsref(temp,m) = subsref(X,i,m); | ||
| 79 | asubsref(temp1,m) = subsref(X,j,m); | ||
| 80 | } | ||
| 81 | |||
| 82 | k11 = polynomial(3, temp, temp, dim); | ||
| 83 | k12 = polynomial(3, temp, temp1, dim); | ||
| 84 | k22 = polynomial(3, temp1, temp1, dim); | ||
| 85 | eta = 2 * k12 - k11 - k22; | ||
| 86 | |||
| 87 | fFreeHandle(temp1); | ||
| 88 | fFreeHandle(temp); | ||
| 89 | |||
| 90 | if(eta<0) | ||
| 91 | { | ||
| 92 | asubsref(a,j) = asubsref(a_old,j) + asubsref(Y,j) * (Ej-Ei)/eta; | ||
| 93 | if( asubsref(a,j) < L) | ||
| 94 | asubsref(a,j) = L; | ||
| 95 | else if( asubsref(a,j) > H ) | ||
| 96 | asubsref(a,j) = H; | ||
| 97 | } | ||
| 98 | else | ||
| 99 | { | ||
| 100 | c1 = eta/2; | ||
| 101 | c2 = asubsref(Y,j) * (Ei-Ej) - eta * asubsref(a_old,j); | ||
| 102 | Lobj = c1 * L * L + c2 * L; | ||
| 103 | Hobj = c1 * H * H + c2 * H; | ||
| 104 | |||
| 105 | if (Lobj > (Hobj+eps)) | ||
| 106 | asubsref(a,j) = L; | ||
| 107 | else if (Lobj < (Hobj-eps)) | ||
| 108 | asubsref(a,j) = H; | ||
| 109 | else | ||
| 110 | asubsref(a,j) = asubsref(a_old,j); | ||
| 111 | } | ||
| 112 | |||
| 113 | if( fabsf( asubsref(a,j)- asubsref(a_old,j) ) < (eps* (asubsref(a,j) + asubsref(a_old,j) +eps)) ) | ||
| 114 | { | ||
| 115 | fFreeHandle(a_old); | ||
| 116 | return 0; | ||
| 117 | } | ||
| 118 | |||
| 119 | asubsref(a,i) = asubsref(a_old,i) - s * ( asubsref(a,j) - asubsref(a_old,j) ); | ||
| 120 | |||
| 121 | if( asubsref(a,i) < 0) | ||
| 122 | { | ||
| 123 | asubsref(a,j) = asubsref(a,j) + s * asubsref(a,i); | ||
| 124 | asubsref(a,i) = 0; | ||
| 125 | } | ||
| 126 | else if (asubsref(a,i) > C) | ||
| 127 | { | ||
| 128 | t = asubsref(a,i) - C; | ||
| 129 | asubsref(a,j) = asubsref(a,j) + s * t; | ||
| 130 | asubsref(a,i) = C; | ||
| 131 | } | ||
| 132 | |||
| 133 | /** Update threshold to react change in Lagrange multipliers **/ | ||
| 134 | |||
| 135 | if( asubsref(a,i) > 0 && asubsref(a,i) < C ) | ||
| 136 | bnew = arrayref(b,0) + Ei + asubsref(Y,i) * (asubsref(a,i) - asubsref(a_old,i)) * k11 + asubsref(Y,j) * (asubsref(a,j) - asubsref(a_old,j)) * k12; | ||
| 137 | else | ||
| 138 | { | ||
| 139 | if( asubsref(a,j) > 0 && asubsref(a,j) < C ) | ||
| 140 | bnew = arrayref(b,0) + Ej + asubsref(Y,i) * (asubsref(a,i) - asubsref(a_old,i)) * k12 + asubsref(Y,j) * (asubsref(a,j) - asubsref(a_old,j)) * k22; | ||
| 141 | else | ||
| 142 | { | ||
| 143 | float b1, b2; | ||
| 144 | b1 = arrayref(b,0) + Ei + asubsref(Y,i) * (asubsref(a,i) - asubsref(a_old,i)) * k11 + asubsref(Y,j) * (asubsref(a,j) - asubsref(a_old,j)) * k12; | ||
| 145 | b2 = arrayref(b,0) + Ej + asubsref(Y,i) * (asubsref(a,i) - asubsref(a_old,i)) * k12 + asubsref(Y,j) * (asubsref(a,j) - asubsref(a_old,j)) * k22; | ||
| 146 | bnew = (b1 + b2) / 2; | ||
| 147 | } | ||
| 148 | } | ||
| 149 | delta_b = bnew - arrayref(b,0); | ||
| 150 | arrayref(b,0) = bnew; | ||
| 151 | |||
| 152 | /** Update error cache using new Lagrange multipliers 24ai **/ | ||
| 153 | |||
| 154 | t1 = asubsref(Y,i) * (asubsref(a,i)-asubsref(a_old,i)); | ||
| 155 | t2 = asubsref(Y,j) * (asubsref(a,j)-asubsref(a_old,j)); | ||
| 156 | |||
| 157 | temp = fMallocHandle(1, X->width); | ||
| 158 | temp1 = fMallocHandle(1, X->width); | ||
| 159 | temp2 = fMallocHandle(1, X->width); | ||
| 160 | |||
| 161 | for (k=0; k<N; k++) | ||
| 162 | { | ||
| 163 | if (0 < asubsref(a_old,i) && asubsref(a_old,i) < C ) | ||
| 164 | { | ||
| 165 | |||
| 166 | for(m=0; m<X->width; m++) | ||
| 167 | { | ||
| 168 | asubsref(temp,m) = subsref(X,i,m); | ||
| 169 | asubsref(temp1,m) = subsref(X,k,m); | ||
| 170 | asubsref(temp2,m) = subsref(X,j,m); | ||
| 171 | } | ||
| 172 | |||
| 173 | asubsref(e,k) = asubsref(e,k)+t1 * polynomial(3, temp, temp1, dim) + t2 * polynomial(3, temp2, temp1, dim) - delta_b; | ||
| 174 | asubsref(e,i) = 0; | ||
| 175 | asubsref(e,j) = 0; | ||
| 176 | } | ||
| 177 | } | ||
| 178 | |||
| 179 | fFreeHandle(a_old); | ||
| 180 | fFreeHandle(temp); | ||
| 181 | fFreeHandle(temp1); | ||
| 182 | fFreeHandle(temp2); | ||
| 183 | ret = 1; | ||
| 184 | return ret; | ||
| 185 | } | ||
| 186 | |||
| 187 | |||
| 188 | |||
