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

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

- CPLEX
  - Fixing issue with CPLEX direct interface - logic for deregistration
    was not valid if the import of the cplex python module failed.

- GUROBI
  - Correcting condition under which constraint duals are extracted by the
    GUROBI plugin. We previously used binary and integer variable counts,
    which is insufficient if SOS constraints are in the model. Fortunately,
    you can avoid all of this mess by checking the Gurobi "IsMIP" attribute.

  - Suppression of dual value reporting for constant constraint.

  - Bug fix: was loading constraint duals into the "value" attribute of
    a ConstraintData? class (as opposed to the "dual" attribute).

  - Skipping ONE_VAR_CONSTANT variable from GUROBI plugin solution load.

  - Flushing out MIP warm-start capability.

- Changes to account for migration of OS services into coopr.os

- Changes to propagate the symbol map across the pyro solver manager interface.

-------------------------------------------------------------------------------
 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.

