[Cbc] When should -extraVariables be used, and when should it be avoided?

acw at ascent.com acw at ascent.com
Tue Apr 19 11:08:51 EDT 2016


A little background: About two years ago I reported a problem in which Cbc 
would segfault on a particular problem, but only when multithreading was 
enabled. It was hard to debug, because Cbc would run for many hours, for 
many millions of nodes, before it hit the problem and died -- so it was 
quite a sticky model to begin with!

In the course of investigating (and eventually fixing) this bug, Dr. 
Forrest remarked that a new feature he was working on would allow Cbc to 
find the solution to this problem in minutes, not hours. This is the 
-extraVariables feature, which we have been using happily ever since. As I 
understand it, this feature looks for sets of (integer?) variables which 
all have the same cost. When it finds such a set, it introduces a new 
variable constrained to equal the sum of that set, and then (I think) 
reformulates the objective function with the aggregate variable instead of 
that sum. My foggy understanding is that this permits Cbc to branch on the 
new variable. The value of -extraVariables tells Cbc how many such 
aggregate variables it is permitted to create.

Now, two years later, I have a model which solves more slowly with -extrav 
than without it. I am attaching this model as an .mps file. For me,

cbc -import speed-test.mps -solve -quit

uses about 9.5 CPU seconds, while

cbc -import speed-test.mps -extrav 2 -solve -quit

uses about 35 CPU seconds. I would appreciate any insight anyone may 
offer, especially any way to guess in advance whether -extraVariables is 
going to help or hurt.

Allan C. Wechsler
Ascent Technology, Inc.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cbc/attachments/20160419/48dc7c83/attachment.html>


More information about the Cbc mailing list