A reporter is a class meant to collect textual, graphical etc (or combinations of such data) as
an algorithm is proceeding. The "Report" often consists of snapshots of the progress and
provides a fine grain level of detail. Often the report will be the solution itself at a given time
point but it may be in a different form from the solution altogether. The "Trace" is similar to the
"Report" in that it consists of snapshots of an algorithm's progress but is typically at a much coarser
level of detail. As an simple example, one might be conducting an iterative multiparameter optimization.
The "Report" might contain the parameters and their numeric values at a given iteration of the
optimzation while the "Trace" would just contain the value of the objective function. Empty implementations of the Report and Trace are certainly allowable and one could certainly embed trace
information in the Report object. This interface is meant to encourage a standard way of reporting
algorithmic progressions that may be useful to developers of say GUI tools etc.
Classes that actually compile the reported output and trace information
should implement this interface.