#12533: arbitrary precision LP solver backend
-------------------------------------------+--------------------------------
Reporter: dimpase | Owner: ncohen
Type: enhancement | Status: needs_work
Priority: major | Milestone: sage-5.1
Component: linear programming | Resolution:
Keywords: arbitrary precision, LP | Work issues: see the latest
comments
Report Upstream: N/A | Reviewers: David Coudert,
Nathann Cohen
Authors: | Merged in:
Dependencies: 12553 | Stopgaps:
-------------------------------------------+--------------------------------
Comment (by ptrrsn_1):
Hi,
Replying to [comment:47 vbraun]:
> Generally speaking, looks good! There are a few nitpicks:
>
> In #12553, I modified the PPL classes to derive from `SageObject`.
This'll make it play nicer with the rest of Sage. Correspondingly you
should override `_repr_`, not `__repr__`.
Could you explain what is the difference between them? I could not find
any information about _repr_.
> Also needs to dump the actual information of the `MIP_problem` or its
useless in other doctests. Speaking of which, the method needs a doctest.
Also, in English you'd say "A MIP" not "An MIP", but really the output
should be more specific.
Ok, I have changed it. However, it is still not very specific because I
could not get the constraint system information from the actual PPL
object. There is constraints_begin() and constraints_end() methods in the
actual PPL's MIP_Problem. However, I am not sure how to use them (they are
const_iterators).
>
> All expensive operations (that need to solve a LP, say) must be wrapped
in `sig_on/sig_off` blocks. Be careful with exceptions thrown, use
try/finally if necessary. Otherwise you'll get into expensive but
untinterruptable computations...
Ok, I have fixed this.
>
> Can we have a few less empty lines? No need for an empty line before and
after the """ closing the docstring.
Yes, I have fixed them.
>
> The INPUT: section should be formatted like
> {{{
> - ``number`` (integer) -- description.
> }}}
> You often have only a single "-" between type and description.
Ok, fixed.
>
> Coverage should be 100%:
> {{{
> [vbraun@volker-desktop hg]$ sage -coverage
sage/numerical/backends/ppl_backend.pyx
> ----------------------------------------------------------------------
> sage/numerical/backends/ppl_backend.pyx
> ERROR: Please add a `TestSuite(s).run()` doctest.
> SCORE sage/numerical/backends/ppl_backend.pyx: 72% (24 of 33)
>
> Missing documentation:
> * int add_variable(self, lower_bound=0.0, upper_bound=None,
binary=False, continuous=True, integer=False, obj=0.0, name=None) except
-1: """ Add a variable. This amounts to adding a new column to the matrix.
By default, the variable is both positive and real. It has not been
implemented for selecting the variable type yet. INPUT: - ``lower_bound``
- the lower bound of the variable (default: 0) - ``upper_bound`` - the
upper bound of the variable (default: ``None``) - ``binary`` - ``True`` if
the variable is binary (default: ``False``). - ``continuous`` - ``True``
if the variable is binary (default: ``True``). - ``integer`` - ``True`` if
the variable is binary (default: ``False``). - ``obj`` - (optional)
coefficient of this variable in the objective function (default: 0.0) -
``name`` - an optional name for the newly added variable (default:
``None``). OUTPUT: The index of the newly created variable EXAMPLE:: sage:
from sage.numerical.backends.generic_backend import get_solver sage: p =
get_solver(solver = "PPL") sage: p.ncols() 0 sage: p.add_variable() 0
sage: p.ncols() 1 sage: p.add_variable(lower_bound=-2.0) 1 sage:
p.add_variable(name='x',obj=1.0) 2 sage: p.col_name(2) 'x' sage:
p.objective_coefficient(2) 1.00000000000000 """ for i in
range(len(self.Matrix)):
> * int add_variables(self, int n, lower_bound=0.0,
upper_bound=None, binary=False, continuous=True, integer=False, obj=0.0,
names=None) except -1: """ Add ``n`` variables. This amounts to adding new
columns to the matrix. By default, the variables are both positive and
real. It has not been implemented for selecting the variable type yet.
INPUT: - ``n`` - the number of new variables (must be > 0) -
``lower_bound`` - the lower bound of the variable (default: 0) -
``upper_bound`` - the upper bound of the variable (default: ``None``) -
``binary`` - ``True`` if the variable is binary (default: ``False``). -
``continuous`` - ``True`` if the variable is binary (default: ``True``). -
``integer`` - ``True`` if the variable is binary (default: ``False``). -
``obj`` - (optional) coefficient of all variables in the objective
function (default: 0.0) - ``names`` - optional list of names (default:
``None``) OUTPUT: The index of the variable created last. EXAMPLE:: sage:
from sage.numerical.backends.generic_backend import get_solver sage: p =
get_solver(solver = "PPL") sage: p.ncols() 0 sage: p.add_variables(5) 4
sage: p.ncols() 5 sage: p.add_variables(2, lower_bound=-2.0,
names=['a','b']) 6 """ for k in range(n):
> * int solve(self) except -1: """ Solve the problem. .. NOTE::
This method raises ``MIPSolverException`` exceptions when the solution can
not be computed for any reason (none exists, or the LP solver was not able
to find it, etc...) EXAMPLE:: sage: from
sage.numerical.backends.generic_backend import get_solver sage: p =
get_solver(solver = "PPL") sage: p.add_linear_constraints(5, 0, None)
sage: p.add_col(range(5), range(5)) sage: p.solve() 0 sage:
p.objective_coefficient(0,1) sage: p.solve() Traceback (most recent call
last):
>
>
> Missing doctests:
> * set_variable_type(self, int variable, int vtype):
> * set_verbosity(self, int level):
> * double get_objective_value(self):
> * double get_variable_value(self, int variable):
> * write_lp(self, char * name):
> * write_mps(self, char * name, int modern):
> }}}
I have fixed the missing doctests by adding some doctests. However, the
missing documentation error (all 3 of them) cannot be fixed although I
have added enough documentations. I think the documentation detection
system in sage probably contains bug (I am not sure) because the same
things also happen when we test coverage on GLPK and Gurobi backend. The
missing documentation error would only disappear if we removed "except -1"
from each functions.
>
> Finally, the ticket description should say which patch to apply for the
sanity of the release manager.
>
> Also, `ptrrsn_1` should put his name on the trac author list
(http://trac.sagemath.org) and populate the Author: field on the ticket.
Ok, done.
Thank you very much.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/12533#comment:52>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.