summaryrefslogtreecommitdiff
path: root/model
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2015-05-18 22:45:48 +0800
committerJoe Zhao <ztuowen@gmail.com>2015-05-18 22:45:48 +0800
commitaccb2b987662db4c8ced69aab78c95b622030576 (patch)
tree6f405c5d6b5f28b6f76494d2a1937ab8c10605d4 /model
parent1f53fe7adbb14e71d1c41459a8e4b579ef43559c (diff)
downloadranksvm-accb2b987662db4c8ced69aab78c95b622030576.tar.gz
ranksvm-accb2b987662db4c8ced69aab78c95b622030576.tar.bz2
ranksvm-accb2b987662db4c8ced69aab78c95b622030576.zip
openmp cont
Diffstat (limited to 'model')
-rw-r--r--model/ranksvmtn.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/model/ranksvmtn.cpp b/model/ranksvmtn.cpp
index f904fdd..8448a8a 100644
--- a/model/ranksvmtn.cpp
+++ b/model/ranksvmtn.cpp
@@ -25,6 +25,22 @@ void cal_Dw(RidList &D,const VectorXd &w, VectorXd &Dw)
Dw(i) = D.getVec(i).dot(w);
}
+void cal_Dtw(RidList &D,const VectorXd &w, VectorXd &Dw)
+{
+ int n = D.getSize();
+ #pragma omp parallel
+ {
+ VectorXd Dw_private = VectorXd::Zero(D.getfSize());
+ #pragma omp for nowait
+ for (int i=0;i<n;++i)
+ Dw_private = Dw_private + D.getVec(i)*w(i);
+ #pragma omp critical
+ {
+ Dw=Dw+Dw_private;
+ }
+ }
+}
+
int cal_Hs(RidList &D,const vector<int> &rank,const VectorXd &corr,const VectorXd &alpha,const VectorXd s,VectorXd &Hs)
{
int n = D.getSize();
@@ -219,9 +235,8 @@ int train_orig(int fsize, RidList &Data,const VectorXd &corr,VectorXd &weight){
// Generate support vector matrix sv & gradient
obj = (weight.dot(weight) + C*(alpha.dot(yt.cwiseProduct(yt))-beta.dot(yt)))/2;
VectorXd tmp = alpha.cwiseProduct(yt)-beta;
- VectorXd res = 0*weight;
- for (int i=0;i<n;++i)
- res = res + Data.getVec(i)*tmp[i];
+ VectorXd res = VectorXd::Zero(fsize);
+ cal_Dtw(Data,tmp,res);
grad = weight + C*res;
step = grad*0;
// Solve