#20302: Clean up MILP backend interface
-----------------------------+------------------------
       Reporter:  mkoeppe    |        Owner:
           Type:  defect     |       Status:  new
       Priority:  major      |    Milestone:  sage-7.2
      Component:  numerical  |   Resolution:
       Keywords:  lp         |    Merged in:
        Authors:             |    Reviewers:
Report Upstream:  N/A        |  Work issues:
         Branch:             |       Commit:
   Dependencies:             |     Stopgaps:
-----------------------------+------------------------

Old description:

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

New description:

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

--

Comment (by mkoeppe):

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

--
Ticket URL: <http://trac.sagemath.org/ticket/20302#comment:2>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to