From d726fd34b4ace0370a4a8fd3e9d6e8cdad16eec7 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Mon, 30 Mar 2015 16:59:57 -0400 Subject: [PATCH] Print number of cuts added, even if zero --- src/gtsp-subtour.c | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/src/gtsp-subtour.c b/src/gtsp-subtour.c index e60b2d3..13df7b6 100644 --- a/src/gtsp-subtour.c +++ b/src/gtsp-subtour.c @@ -18,7 +18,7 @@ int static build_flow_digraph( int digraph_node_count = node_count + data->cluster_count + 1; int digraph_edge_count = 4 * graph->edge_count + 2 * graph->node_count + - 2 * data->cluster_count; + 2 * data->cluster_count; digraph_edges = (int *) malloc(2 * digraph_edge_count * sizeof(int)); abort_if(!digraph_edges, "could not allocate digraph_edges"); @@ -197,7 +197,7 @@ int find_exact_subtour_cuts( struct Graph digraph; graph_init(&digraph); int digraph_edge_count = 4 * graph->edge_count + 2 * graph->node_count + - 2 * data->cluster_count; + 2 * data->cluster_count; int original_cut_pool_size = lp->cut_pool_size; @@ -209,44 +209,35 @@ 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; + log_debug(" %d node-to-cluster\n", added_cuts_count); if (added_cuts_count > 0) - { - log_debug(" %d node-to-cluster\n", added_cuts_count); goto CLEANUP; - } // Constraints (2.3) original_cut_pool_size = lp->cut_pool_size; rval = find_exact_subtour_cuts_node_to_node(lp, data, x, &digraph, - capacities, min_cut_violation); + capacities, min_cut_violation); abort_if(rval, "find_exact_subtour_cuts_node_to_node failed"); added_cuts_count = lp->cut_pool_size - original_cut_pool_size; + log_debug(" %d node-to-node\n", added_cuts_count); if (added_cuts_count > 0) - { - log_debug(" %d node-to-node\n", added_cuts_count); goto CLEANUP; - } CLEANUP: graph_free(&digraph); @@ -306,7 +297,7 @@ int find_exact_subtour_cuts_node_to_node( double flow_value; rval = flow_find_max_flow(digraph, capacities, from, to, flow, - &flow_value); + &flow_value); abort_if(rval, "flow_find_max_flow failed"); if (flow_value >= 2 * (x[i] + x[j] - 1) - min_cut_violation) @@ -325,10 +316,10 @@ int find_exact_subtour_cuts_node_to_node( log_verbose("Cut edges:\n"); for (int k = 0; k < cut_edges_count; k++) log_verbose(" %d %d (%d)\n", cut_edges[k]->from->index, - cut_edges[k]->to->index, cut_edges[k]->index); + cut_edges[k]->to->index, cut_edges[k]->index); rval = add_subtour_cut(lp, graph, from, to, cut_edges, cut_edges_count, - 2); + 2); abort_if(rval, "add_subtour_cut failed"); } @@ -381,7 +372,7 @@ int find_exact_subtour_cuts_node_to_cluster( int cut_edges_count; rval = flow_find_max_flow(digraph, capacities, from, to, flow, - &flow_value); + &flow_value); abort_if(rval, "flow_find_max_flow failed"); log_verbose(" flow value = %.4lf\n", flow_value); @@ -407,11 +398,11 @@ int find_exact_subtour_cuts_node_to_cluster( struct Edge *e = cut_edges[k]; assert(e->from->mark != e->to->mark); log_verbose(" %d (%d) %d (%d) [%d]\n", e->from->index, - e->from->mark, e->to->index, e->to->mark, e->index); + e->from->mark, e->to->index, e->to->mark, e->index); } rval = add_subtour_cut(lp, graph, from, 0, cut_edges, - cut_edges_count, 1); + cut_edges_count, 1); abort_if(rval, "add_subtour_cut failed"); cuts_count++; @@ -447,7 +438,7 @@ int find_exact_subtour_cuts_cluster_to_cluster( abort_if(!flow, "could not allocate flow"); struct Node *root_node = &digraph->nodes[graph->node_count + - data->cluster_count]; + data->cluster_count]; for (int i = 0; i < data->cluster_count; i++) { @@ -466,7 +457,7 @@ int find_exact_subtour_cuts_cluster_to_cluster( log_verbose("Sending flow from cluster %d to cluster %d\n", i, j); rval = flow_find_max_flow(digraph, capacities, from, to, flow, - &flow_value); + &flow_value); abort_if(rval, "flow_find_max_flow failed"); @@ -490,10 +481,10 @@ int find_exact_subtour_cuts_cluster_to_cluster( log_verbose("Cut edges:\n"); for (int k = 0; k < cut_edges_count; k++) log_verbose(" %d %d (%d)\n", cut_edges[k]->from->index, - cut_edges[k]->to->index, cut_edges[k]->index); + cut_edges[k]->to->index, cut_edges[k]->index); rval = add_subtour_cut(lp, graph, 0, 0, cut_edges, cut_edges_count, - 0); + 0); abort_if(rval, "add_subtour_cut failed"); cuts_count++;