#17647: Branch and Bound for vertex separation
-------------------------+-------------------------------------------------
       Reporter:         |        Owner:
  dcoudert               |       Status:  needs_review
           Type:         |    Milestone:  sage-6.5
  enhancement            |   Resolution:
       Priority:  major  |    Merged in:
      Component:  graph  |    Reviewers:  Nathann Cohen
  theory                 |  Work issues:
       Keywords:         |       Commit:
        Authors:  David  |  2f0bf7a386eff5ff28a9ce87106ab50ab5c5488a
  Coudert                |     Stopgaps:
Report Upstream:  N/A    |
         Branch:         |
  public/17647b          |
   Dependencies:         |
  #17665                 |
-------------------------+-------------------------------------------------

Comment (by ncohen):

 Hello,

 > Apparently your care a lot about reducing mallocs.

 Having a short code that only does what is needed helps a lot when you try
 to understand someboy else's code.

 > >   Do you mean that the code will "return any ordering whose cost is
 lower than
 > >   `lower_bound`, even if it has no proof that it is optimal?
 > Exactly.

 Okay I understand. That helps when you split your first graph into
 subproblems. This being said, the term `lower_bound` seems to indicate
 that the user can provide a lower bound on the optimal value of the graph,
 which confused me when I read code that dealt with returning any "solution
 below the lower bound". What would you think of renaming it to something
 like "accept_any_below=4"? That's the best keyword I found, but if you
 have in mind something which could represent a bit better what it does...
 I find this name confusing.

 > > - Are those two lines needed?
 > >
 > > {{{
 > > delta_i = max(current_cost, delta_i)
 > > if delta_i < upper_bound:
 > > }}}
 > If we reduce the upper bound during the recursive call of the kth
 element of the list, we want to prune (cut) branches that are no longer
 useful.
 > So yes, these lines are needed.

 Oh I see. I had not noticed that `upper_bound` was updated at every loop.
 Consequently, wouldn't it be better to do something like that instead?
 {{{
 if delta_i >= upper_bound:
     break
 <continue exploring>
 }}}

 > Yep, I have many reasons for not exposing the BAB in the main
 `vertex_separation` function yet.
 > 1. this patch is already quite long and technical. Since you often
 complain about patch bombs, I did my best to decompose the work
 > 2. I plan to add pre-processing rules. The first one is to decompose the
 input digraph into strongly connected components, but I have others, more
 complex. I will work on this part only when the BAB will be finalized
 (including memoization of prefixes). I believe its better to wok this way.

 Okay, as you like. As long as you plan to do it in the short future, you
 can manage the patches as you like.

 Nathann_from_Nantes

--
Ticket URL: <http://trac.sagemath.org/ticket/17647#comment:40>
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 http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to