diff --git a/src/lib/lbfgs.c b/src/lib/lbfgs.c index 3ae79d4..61a8b89 100644 --- a/src/lib/lbfgs.c +++ b/src/lib/lbfgs.c @@ -505,7 +505,7 @@ int lbfgs( /* Report the progress. */ if (cd.proc_progress) { // 如果监控函数返回值不为0 则退出迭过程 - if ((ret = cd.proc_progress(cd.instance, x, g, fx, xnorm, gnorm, step, cd.n, k, ls))) { + if ((ret = cd.proc_progress(cd.instance, x, g, fx, xnorm, gnorm, step, param, cd.n, k, ls))) { goto lbfgs_exit; } } diff --git a/src/lib/lbfgs.h b/src/lib/lbfgs.h index c8de31a..dc1ea3b 100644 --- a/src/lib/lbfgs.h +++ b/src/lib/lbfgs.h @@ -441,6 +441,7 @@ typedef lbfgsfloatval_t (*lbfgs_evaluate_t)( * @param xnorm The Euclidean norm of the variables. * @param gnorm The Euclidean norm of the gradients. * @param step The line-search step used for this iteration. + * @param param 这是我们添加了一个指针以使用参数类型来监控迭代流程 * @param n The number of variables. * @param k The iteration count. * @param ls The number of evaluations called for this iteration. @@ -455,6 +456,7 @@ typedef int (*lbfgs_progress_t)( const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, + const lbfgs_parameter_t param, int n, int k, int ls diff --git a/src/sample/sample.c b/src/sample/sample.c index 129505f..1eb0dec 100644 --- a/src/sample/sample.c +++ b/src/sample/sample.c @@ -30,6 +30,7 @@ static int progress( const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, + const lbfgs_parameter_t param, int n, int k, int ls diff --git a/src/sample/sample2.cpp b/src/sample/sample2.cpp index 07fc4f8..6a411ad 100644 --- a/src/sample/sample2.cpp +++ b/src/sample/sample2.cpp @@ -87,12 +87,13 @@ protected: const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, + const lbfgs_parameter_t param, int n, int k, int ls ) { - return reinterpret_cast(instance)->progress(x, g, fx, xnorm, gnorm, step, n, k, ls); + return reinterpret_cast(instance)->progress(x, g, fx, xnorm, gnorm, step, param, n, k, ls); } int progress( @@ -102,6 +103,7 @@ protected: const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, + const lbfgs_parameter_t param, int n, int k, int ls diff --git a/src/sample/sample3.cpp b/src/sample/sample3.cpp index 9d964c2..d61fc42 100644 --- a/src/sample/sample3.cpp +++ b/src/sample/sample3.cpp @@ -20,14 +20,14 @@ public: const int n, const lbfgsfloatval_t step); static int _Progress(void *instance, const lbfgsfloatval_t *x, const lbfgsfloatval_t *g, const lbfgsfloatval_t fx, - const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, + const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, const lbfgs_parameter_t param, int n, int k, int ls) { - return reinterpret_cast(instance)->Progress(x, g, fx, xnorm, gnorm, step, n, k, ls); + return reinterpret_cast(instance)->Progress(x, g, fx, xnorm, gnorm, step, param, n, k, ls); } int Progress(const lbfgsfloatval_t *x, const lbfgsfloatval_t *g, const lbfgsfloatval_t fx, - const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, + const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, const lbfgs_parameter_t param, int n, int k, int ls); int Routine(); @@ -67,7 +67,7 @@ lbfgsfloatval_t TEST_FUNC::Func(const lbfgsfloatval_t *x, lbfgsfloatval_t *g, } int TEST_FUNC::Progress(const lbfgsfloatval_t *x, const lbfgsfloatval_t *g, const lbfgsfloatval_t fx, - const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, + const lbfgsfloatval_t xnorm, const lbfgsfloatval_t gnorm, const lbfgsfloatval_t step, const lbfgs_parameter_t param, int n, int k, int ls) { clog << "iteration times: " << k << " fx = " << fx << " gnorm/xnorm = " << gnorm/xnorm << endl;