Hi: I don't have a lot of experience using CPLEX cut callbacks, so I thought someone here might be able to help me. The manual doesn't seem to address my problem. I've implemented a cut callback to test some ideas and ran my model twice: once with the cut call back added in, and once without it. The "strange" behavior is that, even though the callback did not add any cuts (none of them turned out to be violated), the two runs had completely different search trees (the first with 547 nodes, and the second with 1305). I made sure to set the presolve reductions parameter to zero in both runs to avoid differences: cplex.setParam(IloCplex::PreLinear, 0). (The manual says that nonlinear reductions are turned off when IloCplex::UserCutCallbackI is used. The presolve messages output to the screen in both runs are identical.) Shouldn't the two search trees have been the same? Maybe the addition of a callback has some other side effect I'm not aware of. Thanks in advance for any hints.

asked 07 Oct '10, 19:13

Tallys%20Yunes's gravatar image

Tallys Yunes ♦
accept rate: 11%

retagged 25 Nov '11, 12:20

fbahr's gravatar image

fbahr ♦

I would not assume the trees should be the same, you never know what internal decisions depend on callbacks. You will get a better answer here :



From Pauls comment I found, Tobias Achterberg has a good answer for your question :


I have problems pasting this url, so you might have to find message with iD=14396637 manually.

Actually I think this is a nice example, not to assume anything on paths taken from advanced algorithmic implementations depending on floating point calculations.


answered 07 Oct '10, 20:58

Bo%20Jensen's gravatar image

Bo Jensen ♦
accept rate: 14%

edited 07 Oct '10, 21:24

I think there was a discussion a while back about an empty callback altering the program's behavior, but I can't find it right now. Someone with better search skills (or more motivation) might turn it up.

(07 Oct '10, 21:00) Paul Rubin ♦♦

Thanks, Bo. I'm running both with B&C search, so it must be because of item (2) in Tobias's answer.

(08 Oct '10, 17:49) Tallys Yunes ♦

The presence of a cut callback automatically turns off dual reductions (I think), so try turning off PreDual as well. It may also turn off node presolves (PreslvNd); I'm not sure about that.

Even with that, I think it's possible that a timing difference due to the presence of the callback (even if the callback just returns with no other code) may induce changes in the search tree in some cases, although I'm not at all sure about that.


answered 07 Oct '10, 20:59

Paul%20Rubin's gravatar image

Paul Rubin ♦♦
accept rate: 19%

Just remembered another one: I'm pretty sure that the presence of a cut callback turns off symmetry breaking (Symmetry).

(08 Oct '10, 13:24) Paul Rubin ♦♦

Thanks, Paul. I tried turning off all of these parameters, but I still cannot get the two runs to agree. It must have something to do with item (2) in the answer by Tobias pointed out by Bo (see below). Thanks anyway!

(08 Oct '10, 17:49) Tallys Yunes ♦
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "Title")
  • image?![alt text](/path/img.jpg "Title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported



Asked: 07 Oct '10, 19:13

Seen: 2,205 times

Last updated: 25 Nov '11, 12:20

OR-Exchange! Your site for questions, answers, and announcements about operations research.