Opened 3 years ago

Last modified 8 months ago

#20302 new task

Clean up MILP backend interface — at Version 2

Reported by: mkoeppe Owned by:
Priority: major Milestone: sage-8.5
Component: numerical Keywords: lp
Cc: dimpase, vdelecroix, vbraun, jdemeyer, chapoton, fbissey, Rudi, novoselt, moritz, jipilab, mmasdeu, klee, tmonteil, mforets Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description (last modified by mkoeppe)

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.)
  • 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 (2)

comment:1 Changed 3 years ago by mkoeppe

  • Description modified (diff)

comment:2 Changed 3 years ago by mkoeppe

  • Description modified (diff)

Description modified to remove my comments about variable_upper_bound and variable_lower_bound. I was misled by the interface description in GenericBackend, which was out of sync with the real backends. Fixed in #20296

Last edited 3 years ago by mkoeppe (previous) (diff)
Note: See TracTickets for help on using tickets.