[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