[Coin-symphony] tracking cuts

Ted Ralphs tkralphs at lehigh.edu
Wed Jun 29 12:34:12 EDT 2005


Michael Hennebry wrote:
> My Symphony-derived solver keeps
> finding the same cuts over and over.
> 
> I check to see whether each generated cut
> violates the current fractional solution.
> It does.
> Old fractional solutions keep coming back.
> Sometimes I generate the same cut even
> with a different fractional solution.
> Having generated a cut once, I shouldn't
> have to do it again.  Generating a cut
> should cut off any fractional solution
> that would cause its regeneration.

Hmmm, this is strange. In theory, it should not be possible to get the 
same fractional solution back again or to generate the same cut again 
with default settings, at least not during the processing of a single 
search tree node. The same cut could, of course, be generated in a 
different node. If the same solution comes back again, then the code 
would go into an infinite loop, at least until tailing off was detected. 
Is this what is happening? Without more information, it's difficult for 
me to guess what's going on, but I would say it sounds like tolerance 
issues. Perhaps violated cuts are somehow being removed erroneously 
because of inaccuracies in the LP solution.

I would suggest turning up the verbosity to 11 so that all status 
information is printed out every iteration and looking at exactly what 
is happening. You should be able to see what cuts are being marked 
ineffective and what cuts are being deleted, whether the lower bound is 
monotone, whether it is going into an infinite loop, etc. If you post 
the output for an example node where this happens, I should be able to 
help spot the problem. Also, please post exactly what parameters you are 
using. It is possible that changes in the parameters from defaults are 
contributing to the problem.

Another option is to change the criteria by which constraints are 
determined to be ineffective, i.e., deletable.

> Is there a way I can tell Symphony
> to not delete any cuts ever?

Yes, there are two options. If you want to turn off deletion of cuts 
universally, then set the parameter "ineffective_constraints" to 
NO_CONSTRAINT_IS_INEFFECTIVE (0). By default, it is set to 
BASIC_SLACKS_ARE_INEFFECTIVE. See

http://www.branchandcut.org/SYMPHONY/man/node257.html

You can also disallow deletion of any particular cut. In the cut_data 
data structure, there is a field "deletable." If this is set to FALSE 
when the cut is passed to SYMPHONY, then the cut will never be deleted. 
In fact, if you calloc the cut_data structure, then by default, the cut 
will never be deleted. See

http://www.branchandcut.org/SYMPHONY/man/node208.html

> Is there a way I can tell Symphony
> to check all its cuts whenever it
> checks cuts?

I'm not sure what you mean by this. It is possible to force all cuts 
into the global pool and then to tell SYMPHONY to check to global pool 
every time. This will effectively check every cut that has ever been 
generated every iteration. Is this what you mean?

> Is there a way for me to get an identifier
> when adding a cut so that I can later ask
> Symphony what it thinks that cut is?

I'm not sure what you mean by this either. SYMPHONY does assign a global 
index to cuts that are active in the final LP relaxation of a node 
before branching, i.e., when the final node description is passed back 
to the tree manager. However, this index probably won't help you, since 
I think you are interested in what is happening during the processing of 
a single node. Generally, SYMPHONY determines whether two cuts are 
identical using a comparison function that compares the coeff array and 
other fields. It should be possible to get a list of the cut 
descriptions for the cuts currently active and to do the comparison 
yourself. Is this what you're after? I would first play around with the 
parameters above and print out all the information you can. It should be 
fairly easy to see what's going on. Let me know what you find.

Cheers,

Ted
-- 
Dr. Ted Ralphs
Assistant Professor
Industrial and Systems Engineering
Lehigh University
(610)758-4784
tkralphs at lehigh.edu
www.lehigh.edu/~tkr2



More information about the Symphony mailing list