diff options
Diffstat (limited to 'model/ranksvmtn.cpp')
-rw-r--r-- | model/ranksvmtn.cpp | 22 |
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; } } |