From a46dc4cea099be6efc55d6eef7dbd6cac9bcd22d Mon Sep 17 00:00:00 2001 From: Alex Cunningham Date: Mon, 1 Mar 2010 16:31:05 +0000 Subject: [PATCH] Added threshold for lambda in NonlinearOptimizer so that if lambda has gotten unreasonably large, optimization will throw a runtime exception to prevent infinite loops where lambda goes to infinity. --- cpp/NonlinearOptimizer-inl.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpp/NonlinearOptimizer-inl.h b/cpp/NonlinearOptimizer-inl.h index cc1b85c9d..1c9bdf5fe 100644 --- a/cpp/NonlinearOptimizer-inl.h +++ b/cpp/NonlinearOptimizer-inl.h @@ -147,6 +147,8 @@ namespace gtsam { // if error decreased, return the new state if (next.error_ <= error_) return next; + else if (lambda_ / factor > 1e+80) // if lambda gets too big, something is broken + throw runtime_error("Lambda has grown too large!"); else { // TODO: can we avoid copying the config ? NonlinearOptimizer cautious(graph_, config_, solver_, lambda_ * factor);