]> granicus.if.org Git - liblinear/commitdiff
set a max_cg_iter for the CG while loop.
authorChih-Jen Lin <cjlin@csie.ntu.edu.tw>
Mon, 17 Dec 2018 11:10:11 +0000 (19:10 +0800)
committerChih-Jen Lin <cjlin@csie.ntu.edu.tw>
Mon, 17 Dec 2018 11:10:11 +0000 (19:10 +0800)
tron.cpp

index f1495530b620674d198e1c099a14b2761f242311..c9292ca11c970b048a121fdbd1a6e6474395c070 100644 (file)
--- a/tron.cpp
+++ b/tron.cpp
@@ -217,8 +217,9 @@ int TRON::trpcg(double delta, double *g, double *M, double *s, double *r, bool *
        zTr = ddot_(&n, z, &inc, r, &inc);
        cgtol = eps_cg*sqrt(zTr);
        int cg_iter = 0;
+       int max_cg_iter = max(n, 5);
 
-       while (1)
+       while (cg_iter < max_cg_iter)
        {
                if (sqrt(zTr) <= cgtol)
                        break;
@@ -262,6 +263,9 @@ int TRON::trpcg(double delta, double *g, double *M, double *s, double *r, bool *
                zTr = znewTrnew;
        }
 
+       if (cg_iter == max_cg_iter)
+               info("WARNING: reaching maximal number of CG steps\n");
+       
        delete[] d;
        delete[] Hd;
        delete[] z;