# Logging vs outputs in iterative optimisation

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.