#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
Authors: | Merged in:
Dependencies: | Stopgaps:
-------------------------------------------+--------------------------------
Comment (by ptrrsn_1):
Replying to [comment:39 ncohen]:
> > Hi Mr. Nathann
>
> Hello Mister Risan !!
Hi
>
> > > * MIP_Problem : PPL can only solve continuous Linear Programs, can't
it ? In this case why "MIP_*", unless it means something different from
"Mixed Integer Program" ?
> > It was named MIP_Problem simply because it is derived from MIP_Problem
class in PPL. Since this functionality belongs to PPL, I left the name
unchanged.
> Oh. Then do you mean that PPL can solve integer programs too ? `O_o`
> If its name is MIP_problem, I guess it can... Well, why don't we expose
it then ???
Because this patch is initially only intended to be an additional exact LP
solver backend for general LP.
>
> > > * is_satisfiable : does it also solve the problem ? I mean, if users
type "if p.is_satisfiable(): a = p.optimal_value()" does it solve it twice
? The docstrings should say something about that.
> > The is_satisfiable in my wrapper wraps exactly the is_satisfiable of
PPL. After looking at the PPL implementation of this function, I guess it
does not solve the problem.
>
> Hmmmm.. I would be surprised if it were easier to check that the problem
is satisfiable than to actually solve it. `O_o`.
> But then again, I am often surprised.
Hmm, I am not really sure about it either. It was not mentioned in the PPL
documentation.
>
> > Evaluate objective function return the evaluation of objective
function on a given point (the parameter of the function). The
optimal_value return the evaluation of objective function on the optimal
solution.
>
> Right. I do not know what I could do with evaluate_objective_function,
but if you think that it is useful...
>
> > > * OK : by looking at the docstring I have no idea what it does or
what the invariants are, but of course it may also be that I am not part
of the intended audience for this class
> > I think it was used for debugging (I'm not really sure too).
>
> Well, then... What about removing it from the patch ?...
Hmm, after checking this again, I think it is not just for debugging
purpose. For example: The MIP_Problem constructor will accept any kind of
constraints (including strict inequalities which violate the invariants).
However, there is no checking for this in the constructor, that is why the
OK() can be used to check this.
>
> > > **sage/libs/ppl_ files**
> > The files pp_shim.cc and ppl_shim.hh are created by vbraun (cmiiw), I
actually don't have any idea about them.
>
> Ok, they seem to be included in Sage's source code, so it is actually ok
to modify them
>
> > > **mip.pyx**
> > > * Why would you have to add anything to get_values and solve ? The
flags you add would create problems instantly if the backend solver is not
PPL !! I think nothing needs to be changed in that file --> if the backend
is ppl then the values returned will be exact, otherwise they will just be
the usual ones. But I do not see why these functions should be changed
`O_o`
> > Thanks, I have changed this part. No additional flags needed anymore.
> Well. I saw that you now have two functions doing exactly the same thing
following each other in the file : get_variable_value and
get_exact_variable_value. As they seem to do the same thing (tell me if I
am wrong) it should only appear once. If you want to have both available,
one can be made to be a shortcut toward the other by typing in the code
> get_exact_variable_value = get_variable_value
> But why would you want to have both available ?
I have changed the get_variable_value to raise notimplementederror. The
reason I made new functions (get_exact_*) is because in generic_backend,
the return type of get_variable_value and get_objective_value are fixed to
be double. Since PPLBackend inherits these methods from GenericBackend,
the implementations of them inside PPLBackend should return doubles too...
except if I modify the GenericBackend class (change cdef double get_... to
cdef get_...). What do you think?
> In particular, why do you still modify the file mip.pyx ? As the
function get_variable_value exists, there is no need to test whether the
ppl solver is being used, or to have an ``exact`` variable, or to add
things like that to the code :
> {{{
> import sys
> from sage.all import *
> }}}
>
> > > **ppl_backend.pyx**
>
> about documentation : I just remembered that you should also add a
mention of ppl in the file
doc/en/thematic_tutorials/linear_programming.rst near the other solvers.
>
> > > * "set_variable_type" -- I think the best is for this method's code
to be something like "raise Exception('This backend does not handle
integer variables ! Read the doc !')"
> > Fixed.
>
> Well... But it the solver actually supports integer variables...
>
> > > **Others**
> > > * Is ppl.pyx part of the documentation ? At least ppl_backend is
not, so you should add it to doc/en/reference/numerical.rst
>
> Well... This is not done in your new patch.
>
> > ok. I'm still working on them and I will update it later.
> did you ?
Ok, fixed.
>
> Nathann
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/12533#comment:42>
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.