logging_optimizer.py
Go to the documentation of this file.
1 """
2 Optimization with logging via a hook.
3 Author: Jing Wu and Frank Dellaert
4 """
5 # pylint: disable=invalid-name
6 
7 from gtsam import NonlinearOptimizer, NonlinearOptimizerParams
8 import gtsam
9 
10 
11 def optimize(optimizer, check_convergence, hook):
12  """ Given an optimizer and a convergence check, iterate until convergence.
13  After each iteration, hook(optimizer, error) is called.
14  After the function, use values and errors to get the result.
15  Arguments:
16  optimizer (T): needs an iterate and an error function.
17  check_convergence: T * float * float -> bool
18  hook -- hook function to record the error
19  """
20  # the optimizer is created with default values which incur the error below
21  current_error = optimizer.error()
22  hook(optimizer, current_error)
23 
24  # Iterative loop
25  while True:
26  # Do next iteration
27  optimizer.iterate()
28  new_error = optimizer.error()
29  hook(optimizer, new_error)
30  if check_convergence(optimizer, current_error, new_error):
31  return
32  current_error = new_error
33 
34 
35 def gtsam_optimize(optimizer,
36  params,
37  hook):
38  """ Given an optimizer and params, iterate until convergence.
39  After each iteration, hook(optimizer) is called.
40  After the function, use values and errors to get the result.
41  Arguments:
42  optimizer {NonlinearOptimizer} -- Nonlinear optimizer
43  params {NonlinearOptimizarParams} -- Nonlinear optimizer parameters
44  hook -- hook function to record the error
45  """
46  def check_convergence(optimizer, current_error, new_error):
47  return (optimizer.iterations() >= params.getMaxIterations()) or (
48  gtsam.checkConvergence(params.getRelativeErrorTol(), params.getAbsoluteErrorTol(), params.getErrorTol(),
49  current_error, new_error)) or (
50  isinstance(optimizer, gtsam.LevenbergMarquardtOptimizer) and optimizer.lambda_() > params.getlambdaUpperBound())
51  optimize(optimizer, check_convergence, hook)
52  return optimizer.values()
def gtsam_optimize(optimizer, params, hook)
bool isinstance(handle obj)
Definition: pytypes.h:384
def optimize(optimizer, check_convergence, hook)
GTSAM_EXPORT bool checkConvergence(const NonlinearOptimizerParams &params, double currentError, double newError)


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:42:34