I am trying to get the heuristic callback working in CPLEX 12.4 (C++, concert) . I have an MILP and a heuristic to convert fractional LP solution to a feasible integer solution and am implementing this algorithm in the heuristic callback. I also have user cuts implemented using the usercutcallback. At every node in the branch and bound tree, CPLEX calls the heuristic call back first followed by the usercutcallback. Is there a way to change the frequency at which the heuristiccallback is called. Typically I would like CPLEX to call the heuristic callback once every 5 times the LP is being solved at a node. Any help is appreciated.

asked 21 May '14, 23:18

pondy's gravatar image

accept rate: 0%

You could use a node callback to count the number of nodes cplex creates


And then as suggested above by David (I don't know how to make the smart tags):

  if(numofnodes % 5 == 0) Heuristic();

answered 22 May '14, 08:08

Sune's gravatar image

accept rate: 20%

Aren't heuristic callbacks called at each node ? In this case, one call back is enough, don't you think so ?

(22 May '14, 18:13) David

I actually think you are right. The manual says "During branching, the heuristic callback is called after each node subproblem has been solved, including any cuts that may have been newly generated. Before branching, at the root node, the heuristic callback is also called before each round of cuts is added to the problem and re-solved." Therefore one callback is enough.

(23 May '14, 02:49) Sune

Since both callbacks are activated at every node, I suggest you add a counter member to your heuristic callback and in the main code of the heuristic callback , you condition the search for a new incumbent in the condition (here once every 5 times)

    if (mycounter++ %5 ==0){
   ... //heuristic to find a new incumbent

answered 22 May '14, 06:28

David's gravatar image

accept rate: 12%

A quite late comment: The heuristic callback can be called multiple times at the root node if more than one round of cuts is added. So if one want to employ the heuristic at every k node, one has to take care of that. However, if it should be called for every k solved LP, one should use the counter in the heuristic callback!

(12 Jun '14, 09:20) Sune
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: 21 May '14, 23:18

Seen: 2,675 times

Last updated: 12 Jun '14, 09:20

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