======================
 coopr.pysp CHANGELOG
======================

-------------------------------------------------------------------------------
3.3
-------------------------------------------------------------------------------

- Under development.

-------------------------------------------------------------------------------
3.2
-------------------------------------------------------------------------------

- Significant updates required to track changes in coopr.pyomo, primarily the 
  change in Param to default to mutable=False. No known user-level impacts.

- Numerous bug fixes and performance improvements.
  
-------------------------------------------------------------------------------
3.1
-------------------------------------------------------------------------------

- Numerous bug fixes and performance improvements.
- Updates to track Coopr changes (specifically, changes to Param).
- Enhancements to PH solver server, to allow for propagation of solver options from the runph script,
  warm-starts, and linearization.
- Added --ef-solver-manager to runph, to allow for distinct routes for post-PH extensive form solves.
- Restored functionality of async PH, which had suffered from code rot. Added associated tests.
- Added a farmer-with-piecewise-profit, to illustrate (and test) piecewise constructs within PySP.

-------------------------------------------------------------------------------
3.0
-------------------------------------------------------------------------------

- Added examples of parallel execution scripts in the coopr.pysp/scripts sub-directory.
- Added support for stochastic non-linear extensions, including interfaces to ipopt. 
- Added preliminary supported for over-relaxation (a generalized version of PH).
- Added load-from-database version of network flow test problem.
- Added solver-io option to runph and runef, to allow for access to direct Python CPLEX and Gurobi solvers.
- Added numerous test cases, to improve coverage and to flush out various possible solver alternatives.
- Modified all examples to conform to the Coopr 3.0 rule convention, where the model argument comes first.
- Added preliminary capability for scenario bundling in Progressive Hedging.
- Re-worked extensive form implementations to leverage the new Pyomo block capabilities. 
- Re-worked implementation of quadratic expressions in runph - internal change only.
- Added capability for ipopt output when using runef. 
- Added maximization test cases - capability was not correctly working.
- Numerous performance and robustness improvements.
- In runph, established the normalized term-diff convergence metric as the default.
- Introduced the phsolverserver capability, to allow for minimal communication between runph and the
  associated solver servers. Yields very large run-time improvements relative to the pyro_mip-server.

-------------------------------------------------------------------------------
 2.8
-------------------------------------------------------------------------------

- Modified output of both runph and runef to make it very clear what
  "the" objective function value obtained was, and under what conditions
  it is valid. pedantic, but necessary.

- Added support for slamming of continuous variables in WW PH extensions,
  and weight oscillation detection for all variable types.

- Added support to runef and related libraries for writing the extensive
  form in NL format.

- Added minimal time interval between garbage collections - currently
  hard-coded to 5 seconds.  Saves significant time on smaller problems,
  where PH iterations run sub-second.

- Added wwph.cfg line to SEP

-------------------------------------------------------------------------------
 2.7
-------------------------------------------------------------------------------

- Modifying PH initialization to disable all registered PH extensions, and then re-enable them on an as-needed basis.
  Required to fix issues with PySP tests, which use WW PH extensions in some tests, but not all.
- Added forestry EF and PH tests. 
- Fixing various test baselines in response to recent coopr.pyomo changes.
- Fixed a serious bug that wasn't observed "in the wild" until now - if multiple specific indices were specified for a 
  non-anticipative variable, very bad things happened (basically, non-convergence at worst, bad solutions at best).
- Misc reformatting to support the Pyomo book.
- Reworked all examples to use the model-as-first-argument change introduced in coopr.pyomo.
- First real commit of asychronous PH.
- Updating asynch PH to allow for loading of solutions that specify consistent-with-current values for fixed variables.
- Various documentation updates.
- Improvement, extension, and cleanup of examples.
- Various updates due to changes in the solution variable representation (SolutionMap to raw Python dictionaries).
- Various test improvements, e.g., distinct Darwin and linux Gurobi baselines.
- Fixed bug in scenario tree solution snapshotting rleated to fixed variables.
- Added support for a --profile-memmory option for runph, which will - assuming Pympler is installed - report memory
  statistics after each PH iteration. Intended for debugging memory leaks.
- Improving efficiency of PH objective linearization code.

-------------------------------------------------------------------------------
 2.6
-------------------------------------------------------------------------------

- Migrating to use entry points instead of explicit script installation.
  This allows automatic installation and localization on MS Windows.

- When constructing the scenario tree, validate that match template of the stage variables actually matches to . 1 index of the variable. 

- Improving extensive form diagnostic output when the solve fails.

- Added a PH warning if slamming is thwarted due to lack of suffixes

- Many PySP updates due to changes in Pyomo.

- Added error trapping in PH.

- Various bug fixes...

-------------------------------------------------------------------------------
 2.5
-------------------------------------------------------------------------------

- Adding PySP extensive form tests.

- Adding two options to the runef and runph pysp scripts, to facilitate
  scenario downsampling - the case where you have a big tree, but you
  don't want to use it all.

  The options are:
    .scenario-tree-downsample-fraction=X
    .scenario-tree-random-seed

  The options are fairly self-explanatory - the only possible nuance is
  that the downsample fraction is the fraction of scenarios retained.

- Removing some older PySP test problems from the repository.

- Various updates to support heteogeneous index sets in PH for different
  nodes in the scenario tree.

- Inverting order of .dat files in PySP when loading from a node
  representation - now root-to-leaf, instead of leaf-to-root. This allows
  for deeper-in-the-tree nodes to over-write parameter values defined
  higher in the tree, which is a more "expected" behavior than the
  converse.

-------------------------------------------------------------------------------
 2.4
-------------------------------------------------------------------------------

- Addition of the --linearize-expressions option to both runph and runef. This
  change significantly reduces the memory requirements associated with model
  instantiation and manipulation, cutting memory in half and run-time by a 
  quarter (on various test problems - your mileage may vary). Numerous other
  performance enhancements to the PySP code base. Fixes to allow for use of 
  NL solvers, to support initial deployment of stochastic NLPs

-------------------------------------------------------------------------------
 2.3
-------------------------------------------------------------------------------

- Revisions 2247-2514.

-------------------------------------------------------------------------------
 2.2
-------------------------------------------------------------------------------

- OLD - we forget!

-------------------------------------------------------------------------------
 2.1
-------------------------------------------------------------------------------

- Numerous bug-fixes and enhancements, far too many to list! Highlights include the
  extensive form generator/solver, automatic PH penalty term linearization, 
  improvement of the various examples, the WW PH extensions, etc. 2.1 represents
  the first truly comprehensive and robust release of PySP.

-------------------------------------------------------------------------------
 2.0
-------------------------------------------------------------------------------

- Initial release of Coopr to create the coopr.pysp package.

- See coopr.dist for previous ChangeLog information related to Coopr.

