=========================
 coopr.plugins CHANGELOG
=========================

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

- Rework of package to use new plugin factory mechanism
  supported by pyutilib.component.core

- Added support for SOS constraints in solvers.

- Added logic to support the has_capability() method, which reports whether 
  a solver can analyze problems in a specified manner.

- Update to the API of various converters, to ensure
  a consistent API across converters.

- Added test_mip.py and the test_mip.yml configuration
  file that drives it.  Misc reorganization to ignore old test suites
  for solvers. The new tests are in test_mip.py and test_mip_api.py

- Update of solvers to evaluate numerical values.

- Added logic in the 'pyomo' converter to recognize OSiL problems.

- CBC
  - Fixed issue with CBC plugin generating voluminous (to put it nicely)
    output by default. If debug is enabled, we now set the log level to 5
    (high). Otherwise, it stays at its default level of 1.
  - Fixed the processing of the objective value when CBC is solving
    a maximization problem.
  - Disabling the ASL interface for CBC.

- GLPK
  - Recognize and correctly process instances in which the problem
    is infeasible.
  - General refactor of GLPK executable line creation. Specifically,
    this should fix r4083 (for Al Holder).
  - Throw an exception when unexpected line parse
    issues are encountered, so we (and the user) can quickly identify
    the line at fault. And figure out that GLPK is the issue.
  - Fixes bug in Pyomo reading unbounded/infeasible solution files from
    GLPK.

- CPLEX
  - Adding solution infeasible status - Pyomo will now indicate status correctly. 

- CPLEXDIRECT
  - Adding CPLEX solver that solves pyomo instances via the cplex python
    interface - cplex 12.2 now supports Python 2.5. The current version
    supports LPs and MIPs.
  - Adding logic to disable cplexdirect plugins if cplex cannot be imported.

- GUROBI
  - Improvements to GUROBI plug-in to allow execution on windows and linux.
  - Fix for Windows quoting and playing nice with backslashes in paths.

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

- Updated tests to recognize when various resources are not available
  (e.g. pico_convert)

- Setup recognition of suffixes for GLPK and CPLEX.

- Added hack to detect whether CBC has compiled support for NL files.

- Added draft GUROBI solver interface.

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

- Created ASL solver, which can execute any solver built with the AMPL
  Solver Library.

- Update to account for changes in pyutilib.plugin.* names

- Improvements in CPLEX plugin, mainly to include other solver statistics.

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

- Speed improvement to CPLEX solution reader - accessing solution attributes
  multiple times is expensive.

- Reworking MIP plugins to more selectively print branch-and-bound
  information. Don't print this info unless solving a MIP.

- Update of Pyro solver manager to propagate warm-start files to
  pyro_mip_servers. This currently only works for CPLEX, because CPLEX
  is currently the only solver plug-in that supports warm-starts.

- Adding transmission of solver mipgap across the Pyro distributed solver
  interface.

- Added ability to write the mipgap attribute (if not None) to the
  solver script file for CPLEX and GLPK. This needs to be added to 
  other solvers as well.

- Added fully-tested urc and lrc reduced-cost solution loading to the
  CPLEX plugin.

- CPLEX has warm-start capabilities - over-riding base OptSolver query method
  to indicate so.

- Added MIP solution read capability to GLPK plugin. Now able to read MIP
  solutions in via Pyomo and display attributes!

- Major re-work to GLPK interface, which was failing to read pretty much
  all solutions correctly. In particular, if identifiers are longer than
  the "usual" GLPK field width, the index/name and various values/status
  elements are split across multiple lines. This wrecks unit tests, but
  those will have to be revisited anyway - we still don't handle MIPs
  correctly, as the formats between MIP and LP are radically different.

- Added extraction of reduced-costs for variables in CBC plugin solution
  reader. Additionally, all values need to be pushed into the solution,
  whether non-zero or not. If this isn't done, then when the instance
  is loaded, only a subset of the variable values (and reduced-costs)
  are over-ridden.  Supression of 0 values does happen in the solution
  output routine.

- Extracting solver runtime for CPLEX solver plugin.

- Update to solvers to use the new structure for managing the parsing of
  solution results.

- Fixed bug in CBC when in NL/SOL mode that was setting each primal and dual
  variable twice when reading the solver output.

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

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

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

