Changes between Version 9 and Version 10 of Ticket #20302


Ignore:
Timestamp:
03/30/16 16:49:55 (4 years ago)
Author:
mkoeppe
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #20302 – Description

    v9 v10  
    11Frontend:
    22 - #20304: More error checking in `MixedIntegerLinearProgram`
     3 - #19523: defect: Adding constraints for the wrong MILP crashes Sage
     4 - #18733: enhancement: `MixedIntegerLinearProgram` should support tableau-query methods
     5 - #18688: task: `MixedIntegerLinearProgram` should support basis status getting/setting
    36
    47Backends:
    5  - #20303: Fixes for add_variables in CVXOPT, PPL, GLPK MIP backends and `add_linear_constraints` in CVXOPT
    6 
     8 - #20303: Fixes for `add_variables` in CVXOPT, PPL, GLPK MIP backends and `add_linear_constraints` in CVXOPT
     9 - #19525: enhancement: Improve GLPK error handling
     10 - #20323: Common `TestSuite` for MIP backends
     11 - #20324: MIP backends: Unify `add_col`, `add_variable`
     12 - #20325: `GenericBackend`: Add default implementation of `add_variables` and `add_linear_constraints`
     13 - #20326: `GenericBackend`: Fix doctest of add_linear_constraint_vector
    714
    815Interactions with `InteractiveLinearProgram` and its dictionaries:
     
    1724 - #20301 `Polyhedron.to_linear_program` should return the MIP variable used
    1825
    19 * * * *
    20 
    21 To be put on separate tickets:
    22 
    23 Clean up MILP backend interface:
    24 
    25 While implementing `InteractiveLPBackend` for #20296, I noticed several deficiencies in the design of the MILP backend interface.
    26 
    27  - `add_col` and `add_variable` both add a variable to the problem; but `add_col` only allows to add a column with no name; whereas `add_variable` only allows to add a column with no coefficients. There should be one function (`add_variable`, probably - see #20296 for a possible interface) that can do both; should then deprecate `add_col`. Note that `add_col` is not used by `MixedIntegerLinearProgram`; it is only used in doctests of the backends.  (Also compare with `add_linear_constraint`, which takes a zipped index/coefficient list, whereas `add_col` takes two parallel lists.)
    28 
    29  - `add_variables` and `add_linear_constraints` should have a default implementation in `GenericBackend`, like `add_linear_constraint_vector`.
    30 
    31  - The doctest of `add_linear_constraint_vector` from generic_backend.pyx (which is never run for any real backend!), when applied to COIN or GLPK leads to segfaults:
    32 {{{
    33 sage:             sage: coeffs = ([0, vector([1, 2])], [1, vector([2, 3])])
    34 sage:             sage: upper = vector([5, 5])
    35 sage:             sage: lower = vector([0, 0])
    36 sage:             sage: from sage.numerical.backends.generic_backend import get_solver
    37 sage:             sage: p = get_solver(solver = "Coin")                         # optional - cbc
    38 sage: p.add_linear_constraint_vector(2, coeffs, lower, upper, 'foo')
    39 ------------------------------------------------------------------------
    40 0   signals.so                          0x0000000109df05c5 print_backtrace + 37
    41 ------------------------------------------------------------------------
    42 Unhandled SIGSEGV: A segmentation fault occurred.
    43 This probably occurred because a *compiled* module has a bug
    44 in it and is not properly wrapped with sig_on(), sig_off().
    45 Python will now terminate.
    46 ------------------------------------------------------------------------
    47 Segmentation fault: 11
    48 $ sage
    49 SageMath Version 7.2.beta0, Release Date: 2016-03-24
    50 sage: sage:             sage: coeffs = ([0, vector([1, 2])], [1, vector([2, 3])])
    51 sage: sage:             sage: upper = vector([5, 5])
    52 sage: sage:             sage: lower = vector([0, 0])
    53 sage: sage:             sage: from sage.numerical.backends.generic_backend import get_solver
    54 sage: sage:             sage: p = get_solver(solver = "Coin")                         # optional - cbc
    55 sage: p.add_linear_constraint_vector(2, coeffs, lower, upper)
    56 ------------------------------------------------------------------------
    57 0   signals.so                          0x0000000109c8a5c5 print_backtrace + 37
    58 ------------------------------------------------------------------------
    59 Unhandled SIGSEGV: A segmentation fault occurred.
    60 }}}
    61 
    62 Also, I think the backends should be tested using a common `TestSuite`. Right now each backend uses its own doctests, which have slightly diverged from each other, so there is nothing (other than the fact that they were the result of copy-paste from each other) that ensures consistency. (#20296 fixes several wrong doctests in `GenericBackend`, from which I tried to copy-paste, for example.)