RVL - release notes
- 1.1 (svn rev 468) - 04.03.12.
- Shift LinearOp to subclass Operator - this is now feasible, as the interfaces overlap in all significant respects, a major change from the beta version. The header file linop_base.hh is new, and contains the definitions for LinearOp as a subclass of Operator. The new version of linop.hh simply includes op.hh. Only linop.hh or op.hh should be included in application files; linop_base.hh is only useful as part of op.hh.
- Rebuilt LinCombOperator and OpComp to allow post-construction initialization and arbitrary number of summands/factors. Both can be built up in conditional branches. Because LinearOps are now Operators, can mix and match summands/factors of these two types.
- Removed ScaledFunctional since now the same functionality can be obtained via LinCombFunctional with one summand
- Removed all dependence on the CloneHandle class from functional.hh, op.hh, and ls.hh, and removed CloneHandle from utility.hh.
- Added unit test ut15.cc to tests/testsrc, test of OpComp rebuild.
- Instrumented entire package with SConstruct.
- 1.0p2 (svn rev 356) - 15.06.11. Patch 2. Files affected:
- umin/include/lnsrch.hh - LineSearchAlg gains new role, namely tracking the most recent successful step, initialized in constructor (default = 1.0). Changes in argument lists.
- umin/include/lnsrchBT.hh - better docs. Scales step by factor > 1 on exit, if search is successful on first step - then presumably a longer step is possible. Factor should be less than reciprocal of backtrack factor, to avoid cylcling.
- umin/include/umin.hh - construction of algorithm internal to UMinMethod. Currently only LBFGS with backtracking LS. Adopts new CountingIterationTable interface.
- alg/include/ioterm.hh - new CountingIterationTable implementation does or-test for relative and absolute gradient reduction.
- umin/testsrc/testlbfgs.cc - unit test for LBFGS with backtracking line search.
- umin/include/uminstep.hh, alg/include/alg.hh - minor cleanup
- 1.0p1 (svn rev 349) - 13.06.11. Patch 1. Files affected:
- umin/include/TRalg.hh,umin/include/umin.hh - trust region implementation temporarily disabled for rebuild
- umin/include/cgalg.hh - added better docs, max step/projection terminator and result methods for trust region applications
- alg/include/vectorterm.hh - added DiffBalProjTerminator, returns true and projects second vector arg on ball of given radius about first vector arg if difference exceeds radius - for approximate trust region solvers
- alg/include/ioterm.hh - cleanup
- umin/include/lbfgsalg, umin/include/lnsrchBT.hh, umin/include/uminstep.hh - minor updates, cleanup
- added functional test for trust region cg options in umin/testsrc
- 1.0 (svn rev 345) - 07.06.11. Initial release.
Differences with prerelease "beta" version:
- FunctionObjectRedn has been replaced by FunctionObjectConstEval, and the Reduction class hierarchy has been removed completely. In a number of instances, the prior structure forced the introduction of meaningless return values, and these were never anything but scalars - in six years of use, not once did a clear-cut need for a Reduction object as return type surface.
- FunctionObjectScalarRedn has been retained, as a subclass of FunctionObjectConstEval. It has fully implemented container functionality as a holder of an object with value semantics.
- In-process accumulation of reduction results is handled automatically, in that the subclass operator() method is presumed to carry it out. Cross-process accumulation must be handled separately - for example, FORs which do all nontrivial computing on rank 0 of an MPI network are implemented in mpirvl (via wrappers around serial functions).
- The Accumulation type and its methods have been removed as well - accumulation should be implemented in the operator() method body.
- Correspondingly the local function object hierarchy has been modified - n-aryFunctionObjectScalarRedn classes remain (n=Un, Bin,...), supplemented by n-aryFunctionObjectConstEval for cases not requiring a return type. These changes should be transparent for all applications, subject to the caveat above.
- LinearOp::applyOp and LinearOp::applyAdjOp fully implemented. These invoke standard sanity test for domain and range membership, with standardized error report format. Computation delegated to protected apply and applyAdj methods - user can write these assuming that all dimensional and other info implicit in domain, range membership has been checked. For existing subclasses, move implemented applyOp and applyAdjOp definitions into protected section, change names by dropping "Op".
- Similar change to OperatorEvaluation and FunctionalEvaluation construction - evaluation point checked for domain membership, with standard report, so apply methods can be written assuming that all dimensional and other constraints have been verified.
- Random number generator from external public domain source included as separate library - the RVL::RVLRandomize FO in local depends on it, also many unit tests. Should be added to hclasspath as last member in any code that uses RVL::RVLRandomize. Header file included in rvl/include/utility.hh, therefore in any file including any rvl code at all. Added this code to remove dependence on in compiler vendor's library choices.
- Added alg, umin, seq, and tsopt packages to RVL. These are nominally somewhat independent, however don't expect them to be used except as part of RVL. Applications of these packages will need to change their link paths and make a few other changes
- Major change in alg: Algorithm::run() returns void, not bool. This means that various branches must depend on Terminator::query() values instead, and corresponding changes have been made in the alg and umin codes.
- Unit tests have been added or modified in tests, mpirvl, umin, seq, and tsopt. Unit tests are portable, at least amongst serial implementations. Dependence on roundoff is hidden, and all instances of random number generation uses the public domain package rather than the standard library functions.
- The mpirvl unit tests does not work under lam, as it calls the executable directly (rather than through mpiexec with n=1). This is probably fixable; for now it is a serial test only.
- Documentation has been enhanced considerably; all packages have main pages.
- Added control macro RVL_OPERATOR_NEW_ENABLED, set in rvl/rvl/include/utility.hh. If defined, enables use of compiler-generated operator new in core vector calculus classes. Undefined by default, for reasons discussed in the TOMS design paper.