|
|
|
@ -209,31 +209,24 @@ int find_exact_subtour_cuts(
|
|
|
|
|
|
|
|
|
|
// Constraints (2.1)
|
|
|
|
|
rval = find_exact_subtour_cuts_cluster_to_cluster(lp, data, &digraph,
|
|
|
|
|
capacities,
|
|
|
|
|
min_cut_violation);
|
|
|
|
|
capacities, min_cut_violation);
|
|
|
|
|
abort_if(rval, "find_exact_subtour_cuts_cluster_to_cluster failed");
|
|
|
|
|
|
|
|
|
|
added_cuts_count = lp->cut_pool_size - original_cut_pool_size;
|
|
|
|
|
log_debug(" %d cluster-to-cluster\n", added_cuts_count);
|
|
|
|
|
if (added_cuts_count > 0)
|
|
|
|
|
{
|
|
|
|
|
log_debug(" %d cluster-to-cluster\n",
|
|
|
|
|
added_cuts_count);
|
|
|
|
|
goto CLEANUP;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Constraints (2.2)
|
|
|
|
|
original_cut_pool_size = lp->cut_pool_size;
|
|
|
|
|
rval = find_exact_subtour_cuts_node_to_cluster(lp, data, x, &digraph,
|
|
|
|
|
capacities,
|
|
|
|
|
min_cut_violation);
|
|
|
|
|
capacities, min_cut_violation);
|
|
|
|
|
abort_if(rval, "find_exact_subtour_cuts_node_to_cluster failed");
|
|
|
|
|
|
|
|
|
|
added_cuts_count = lp->cut_pool_size - original_cut_pool_size;
|
|
|
|
|
if (added_cuts_count > 0)
|
|
|
|
|
{
|
|
|
|
|
log_debug(" %d node-to-cluster\n", added_cuts_count);
|
|
|
|
|
if (added_cuts_count > 0)
|
|
|
|
|
goto CLEANUP;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Constraints (2.3)
|
|
|
|
|
original_cut_pool_size = lp->cut_pool_size;
|
|
|
|
@ -242,11 +235,9 @@ int find_exact_subtour_cuts(
|
|
|
|
|
abort_if(rval, "find_exact_subtour_cuts_node_to_node failed");
|
|
|
|
|
|
|
|
|
|
added_cuts_count = lp->cut_pool_size - original_cut_pool_size;
|
|
|
|
|
if (added_cuts_count > 0)
|
|
|
|
|
{
|
|
|
|
|
log_debug(" %d node-to-node\n", added_cuts_count);
|
|
|
|
|
if (added_cuts_count > 0)
|
|
|
|
|
goto CLEANUP;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
|
graph_free(&digraph);
|
|
|
|
|