Opened 7 years ago

Last modified 3 months ago

#20302 new task

Clean up MILP backend interface — at Version 1

Reported by: Matthias Köppe Owned by:
Priority: major Milestone: sage-9.8
Component: numerical Keywords: lp
Cc: Dima Pasechnik, Vincent Delecroix, Volker Braun, Jeroen Demeyer, Frédéric Chapoton, François Bissey, Rudi Pendavingh, Andrey Novoseltsev, Moritz Firsching, Jean-Philippe Labbé, Marc Masdeu, Kwankyu Lee, Thierry Monteil, Marcelo Forets, Yuan Zhou Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description (last modified by Matthias Köppe)

While implementing InteractiveLPBackend for #20296, I noticed several deficiencies in the design of the MILP backend interface.

  • 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. (Also compare with add_linear_constraint, which takes a zipped index/coefficient list, whereas add_col takes two parallel lists.)
  • variable_upper_bound: This interface is bizarre. Can't remove an upper bound from a variable because None means both 'no upper bound' and 'get the upper bound'. Likewise variable_lower_bound. (Moreover, there's redundancy with col_bounds.)
  • add_variables and add_linear_constraints should have a default implementation in GenericBackend, like add_linear_constraint_vector.

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

Change History (1)

comment:1 Changed 7 years ago by Matthias Köppe

Description: modified (diff)
Note: See TracTickets for help on using tickets.