Changes between Initial Version and Version 1 of Ticket #26511


Ignore:
Timestamp:
10/31/18 00:17:44 (4 years ago)
Author:
mkoeppe
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #26511

    • Property Cc a.mason@… gh-jiawei-wang-ucd yzh dimpase dcoudert tmonteil added
    • Property Summary changed from MIP frontend/backend using PuLP; backend to OSI using yaposib to Meta-ticket: Use Python optimization interfaces: PuLP, Pyomo, cylp...
  • Ticket #26511 – Description

    initial v1  
    1 https://github.com/coin-or/pulp
     1The purpose of this ticket is to
     2 - connect SageMath to interfaces to optimization solvers that are maintained outside of the Sage project,
     3 - integrate the related developer and user communities.
    24
    3 It has
    4 - some API-based and some file-based interfaces to various solvers (including COIN OSI via yaposib),
    5 - a basic modeling system (need to compare its capabilities with sage frontend)
     5'''Status quo in Sage:'''
     6 - Frontend class MixedIntegerLinearProgram
     7     - mutable (can call add_constraint, set_integer, new_variable etc. and then re-solve)
     8     - solver-independent and solver-specific parameters (solver_parameter)
     9     - widely used in Sage code
     10     - MIPVariable - indexed by arbitrary objects
     11     - some connections to Polyhedron class and to InteractiveLPProblem (didactical code)
     12 - Backends, using Cython, with varying degrees of implementation quality
     13     - GLPK backend - complete, includes support for tableau data and GLPK's exact rational mode
     14     - COIN backend - very basic, no support for setting solver parameters such as time limit
     15     - CPLEX backend, Gurobi backend, CVXOPT backend, PPL backend
     16     - InteractiveLP backend - basic, provide LP only for algebraic LPs
     17 - Very small developer community
    618
    7 https://github.com/coin-or/yaposib
     19'''Tickets:'''
     20
     21 - Template for minimal Python-based backends (interactivelp_backend.pyx is implemented in Cython just because a Cython template was available)
     22 - Replace basic Cython-based COIN backend by full-featured PuLP backend (gives access to many solvers)
     23 - #19219 MILP: Add CyLP backend -- Replace basic Cython-based COIN backend by full-featured cylp backend (gives detailed access to CLP, including tableau data)
     24 - PuLP backend implementation using Sage backends... to make exact backends such as InteractiveLP, PPL backend available to PuLP frontend users
     25    - can PuLP handle non-floating point data (for example for exact computation over rationals or number fields if the backend allows it?
     26    - this could be added to PuLP, rather than to Sage.
     27 - Pyomo backend implementation using Sage backends... to make exact backends available to Pyomo frontend users
     28   - see above
     29 - Check feasibility of replacing front end MixedIntegerLinearProgram by PuLP frontend or Pyomo frontend
     30    - can PuLP handle Sage's number types such as RDF and ZZ?
     31    - can Pyomo handle Sage's number types such as RDF and ZZ?
     32
     33Related:
     34 - #20302 Meta-ticket: Improvements to MixedIntegerLinearProgram, its backends, and InteractiveLinearProgram
     35
     36.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . 
     37
     38References:
     39
     40'''Key Python software (solver-independent):'''
     41
     42'''PuLP'''
     43 - https://github.com/coin-or/pulp
     44 - Installation with `sage -pip install pulp` works
     45- Frontend: a basic modeling system
     46   - example: https://github.com/coin-or/pulp/blob/master/examples/WhiskasModel1.py
     47   - need to compare its capabilities with the sage frontend
     48 - Backends: some API-based and some file-based interfaces to various solvers, including:
     49   - COIN_CMD (COIN CBC via command line),
     50   - COINMP_DLL (CBC via COINMP C library API),
     51   - YAPOSIB (Python interface to COIN OSI, see below),
     52   - see [https://github.com/coin-or/pulp/blob/master/src/pulp/solvers.py solvers.py]
     53 - is it under active development??
     54
     55'''Pyomo'''
     56- http://www.pyomo.org/
     57- installation with `sage -pip install pyomo` works
     58- some file-based, some API-based interfaces (direct/persistent) - see [https://github.com/Pyomo/pyomo/tree/master/pyomo/solvers/plugins/solvers solvers directory]
     59- big system, under active development
     60
     61'''YAPOSIB''' - Python interface to COIN OSI, using Boost::Python
     62- https://github.com/coin-or/yaposib
     63- Installation with `sage -i boost && sage -pip install yaposib` works
     64- '''incompatible open source license''' - EPL 1.0
     65- therefore we cannot use it as the basis for our solver-independent code
     66- could still be useful to be used via PuLP for solvers that don't have a direct PuLP backend
     67
     68'''Key Python software (solver-dependent):'''
     69
     70'''cylp'''
     71 - CyLP is a Python interface to COIN-OR’s Linear and mixed-integer program solvers (CLP, CBC, and CGL). CyLP’s unique feature is that you can use it to alter the solution process of the solvers from within Python. For example, you may define cut generators, branch-and-bound strategies, and primal/dual Simplex pivot rules completely in Python.
     72 - is it maintained?? https://github.com/coin-or/CyLP/issues
     73