[Coin-symphony] how to save cut generated by feasibility test?

tkr2 at lehigh.edu tkr2 at lehigh.edu
Wed Jun 1 17:44:29 EDT 2005


Quoting Michael Hennebry <hennebry at web.cs.ndsu.nodak.edu>:

> On Tue, 31 May 2005 tkr2 at lehigh.edu wrote:
> 
> > Quoting Michael Hennebry <hennebry at web.cs.ndsu.nodak.edu>:
> >
> > >
> > >
> > > If user_is_feasible includes a test for violated linear
> > > constraints (e.g. subcycle breaking constraints),
> > > Ascertaining that a solution is infeasible might also
> > > generate a cut.
> > > It would be nice to be able to save that cut and
> > > not have to redo the work when user_find_cuts is called.
> > > How does one do that?
> >
> > Yes, I agree this is something that one might want to do, but I haven't
> gotten
> > around to providing a direct way of doing it. Currently, the most
> > straightforward and safest way to do this is to simply generate the cut in
> > user_is_feasible() and save them in the user data structure. Then in the
> > function user_generate_cuts_in_lp(), just return them. This should actually
> be
> > pretty easy to do I would think.
> 
> How do I make sure that the call to user_generate_cuts_in_lp()
> applies to the same b&b node as the call to user_is_feasible()?
> I suppose the straightforward way would be to test  whether
> the constraint is violated, but depending on implementation
> details of Symphony, it might lack in reliability.

user_generate_cuts() should always be called directly after user_is_feasible() 
if the user reports that the solution is not feasible() and user_is_feasible() 
was not called during strong branching. There is now an argument to 
user_is_feasible() that tells you whether it was called during straong 
branching or not. At any rate, there is no harm in passing an unviolated cut 
to SYMPHONY, since it also tests violation before adding the cut. As long as 
the cuts are globally valid, you can hand them to SYMPHONY anytime and it will 
not cause problems. I guess this contradicts my eariler remark about not 
generating cuts during straong branching, but this really only applied to cuts 
that are not globally valid.

> Also, is there a reason I should use user_generate_cuts_in_lp()
> instead of user_generate_cuts()?

If you want to parallelize your code and therefore have separate user data 
structures for the LP solver and the cut generator, it would not be possible 
to user user_generate_cuts(). That is the only reason.

> -- 
> Mike   hennebry at web.cs.ndsu.NoDak.edu
> "There are three kinds of people,
> those who can count and those who can't."
> 


-------------------------------------------------
This mail sent through IMP: http://horde.org/imp/



More information about the Symphony mailing list