When I tried to use Java to call CPLEX and use callback functions to solve a VRP problem with branch-and-cut, some problems emerged.

I took out the subtour elimination constraint from the original problem, and used it as usercut and lazyconstraint. When I only used it as a lazyconstraint, the algorithm worked out very well, but when I used it as both usercut and lazyconstraint Java program couldn't stop, it kept calling usercutCallback at node0 and wouldn't make branch. I really don't know what the problem is.

Does CPLEX loop calling usercutCallback at each non-integer node until no usercut are violated, and then make branch? If so, can I set the maximum number of calls at each node? Maybe just one time is ok.

Another problem is why it kept generating the same cut. I think when cut A has been already added, even if I generate A again in the next loop, it should have been satisfied so that no usercut is violated and the loop should be stopped.


This question was also asked and answered on a CPLEX forum and on my blog.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.