Originally posted by: SystemAdmin
Ah, now I understand the question, which is not really related to CPLEX.
This is one of the fundamental issues for branch-and-price. Namely, you need to use a branching rule that is compatible with your pricing algorithm. For example, if your problem is specified on a directed graph, the variables are binary and each of them says whether you would use a path in the graph (i.e., a set of arcs) or not. The pricing problem is the shortest path problem using the dual solution as weights on the arcs.
Now at the root node, everything is clear: you just query the dual solution, calculate the arc weights, and call a shortest path algorithm to check if there exists a path of negative length (which means negative reduced costs in the LP). If so, add the path as variable to the problem and resolve.
Now branching on a single variable (i.e., ruling out a certain path on the one side, and explicitly forcing to use a path on the other side) gives you issues in the pricing problem of the child node, in particular the one where you rule out the path. If you force the path you may be able to modify the graph accordingly to get back again into the situation where the pricing can be solved via the shortest path problem in a modified graph. But for the case where you rule out the graph, the pricing problem would be the shortest path problem
excluding one particular solution. This means, the resulting pricing problem is the 2-shortest paths problem: the shortest path could be the one that you ruled out, so you need the second shortest path as well. And if you continue branching, you will get the k-shortest path problem, which is exponential in k. So, you have killed the performance of your pricing problem.
For this reason, you often want to branch, e.g., on the set of outgoing arcs of a node (say, you have to use exactly one of those arcs). Split the set into two subsets S and T. On the one side of the branching you want to rule out the arcs of S (i.e., only those paths are valid that do not use those arcs), on the other side you want to rule out the paths that go through arcs in T. Now the pricing problem stays simple: just remove the respective arcs from the graph in the pricing problem of each of the children, and the problem stays a simple shortest path problem. This type of branching is called Ryan-Foster or "follow-on" branching.
So, as a summary, in branch-and-price applications the pricing problem and the branching rule are tightly connected. A nice pricing algorithm does not help if you do not have a compatible branching rule.
Tobias
#CPLEXOptimizers#DecisionOptimization