I'm coding an iterative algorithm of constrained continuous optimisation. An augmented Lagrangian algorithm (outer) calls a bound-constrained L-BFGS-B algorithm (inner), which calls a line search algorithm. Optimisation problems have between 1 and 10,000 bound-constrained variables and 100–200 nonlinear constraints.

The program outputs a solution vector (if found), Lagrangian multipliers and termination reasons. Also, the output is a list of iterates, objective values and possibly Lagrangian multipliers per each inner and outer iteration.

For problematic cases, I'd like to provide diagnostics info: warnings, numerical issues (matrix ill-conditioning, NaNs, etc.) and so on.

I'm using Scala to adapt some algorithms from the Breeze library, and also add a Lagrangian algorithm. Some algorithms in that library have logging statements everywhere, whereas others have very little logging.

Questions:

  1. What information is normally logged and what is output in numerical optimisation algorithms?
  2. How do I decide between logging vs outputting? Obviously, there's a trade-off between outputs complexity and the "intrusiveness" of logging.
  3. Will it make sense creating lean algorithm classes with diagnostics sub-classes containing logging?

Other advice, e.g., design tips, references and open-source code examples, are very welcome too.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Browse other questions tagged or ask your own question.