summaryrefslogtreecommitdiff
path: root/model/ranksvmtn.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'model/ranksvmtn.cpp')
-rw-r--r--model/ranksvmtn.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/model/ranksvmtn.cpp b/model/ranksvmtn.cpp
index c2ca639..01d9851 100644
--- a/model/ranksvmtn.cpp
+++ b/model/ranksvmtn.cpp
@@ -6,9 +6,9 @@
using namespace std;
using namespace Eigen;
-const double C=1e-5; // Compensating & scaling
+const double C=1e-4; // Compensating & scaling
// Main terminating criteria
-const int maxiter = 10; // max iteration count
+const int maxiter = 20; // max iteration count
const double prec=1e-10; // precision
// conjugate gradient
const double cg_prec=1e-10; // precision
@@ -44,7 +44,7 @@ int cal_Hs(const MatrixXd &D,const vector<int> &rank,const VectorXd &corr,const
int cg_solve(const MatrixXd &D,const vector<int> &rank,const VectorXd &corr,const VectorXd &alph,const vector<int> &A1,const vector<int> &A2,const VectorXd &b, VectorXd &x)
{
double alpha,beta,r_1,r_2;
- int step=0;
+ int iter=0;
VectorXd q;
VectorXd Hs;
cal_Hs(D,rank,corr,alph,A1,A2,x,Hs);
@@ -56,7 +56,12 @@ int cg_solve(const MatrixXd &D,const vector<int> &rank,const VectorXd &corr,cons
r_1 = res.dot(res);
if (r_1<cg_prec) // Terminate condition
break;
- if (step){
+ if (iter > cg_maxiter)
+ {
+ LOG(INFO) << "CG forced termination by maxiter, r:"<<r_1;
+ break;
+ }
+ if (iter){
beta = r_1 / r_2;
p = res + p * beta;
}
@@ -64,12 +69,7 @@ int cg_solve(const MatrixXd &D,const vector<int> &rank,const VectorXd &corr,cons
alpha = r_1/p.dot(q);
x=x+p*alpha;
res=res-q*alpha;
- ++step;
- if (step > cg_maxiter)
- {
- LOG(INFO) << "CG force terminated by maxiter";
- break;
- }
+ ++iter;
r_2=r_1;
}
return 0;
@@ -167,7 +167,7 @@ int line_search(const VectorXd &w,const MatrixXd &D,const VectorXd &corr,const v
++iter;
if (iter > cg_maxiter)
{
- LOG(INFO) << "line search force terminated by maxiter";
+ LOG(INFO) << "line search forced termination by maxiter, prec:"<<g*g/h;
break;
}
}