Opened 3 years ago

Last modified 11 months ago

#20302 new task

Clean up MILP backend interface — at Version 1

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.)
  • 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 3 years ago by mkoeppe

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