diff --git a/cpp/src/routing/local_search/sliding_tsp.cu b/cpp/src/routing/local_search/sliding_tsp.cu index 4dcf532464..a4a8dc2de2 100644 --- a/cpp/src/routing/local_search/sliding_tsp.cu +++ b/cpp/src/routing/local_search/sliding_tsp.cu @@ -275,7 +275,7 @@ __global__ void execute_sliding_moves_tsp( s_route.copy_from(route); __syncthreads(); - s_route.copy_to_tsp_route(sol.problem.order_info.depot_included); + s_route.copy_to_tsp_route(); __shared__ i_t sh_overlaps; @@ -471,7 +471,7 @@ void compute_cumulative_distances(solution_t& sol, n_temp_storage_bytes, distances_ptr, distances_ptr, - n_nodes + 1, + n_nodes + 2, sol.sol_handle->get_stream()); if (n_temp_storage_bytes > 0) { @@ -484,7 +484,7 @@ void compute_cumulative_distances(solution_t& sol, temp_storage_bytes, distances_ptr, distances_ptr, - n_nodes + 1, + n_nodes + 2, sol.sol_handle->get_stream()); } @@ -504,7 +504,7 @@ bool local_search_t::perform_sliding_tsp( sol.compute_max_active(); moved_regions_.resize(sol.get_n_routes() * sol.get_max_active_nodes_for_all_routes(), sol.sol_handle->get_stream()); - auto n_nodes = sol.get_num_orders(); + auto n_nodes = sol.problem_ptr->order_info.get_num_depot_excluded_orders(); size_t temp_storage_bytes = 0; resize_temp_storage(sol, move_candidates, n_nodes, temp_storage_bytes); diff --git a/cpp/src/routing/route/route.cuh b/cpp/src/routing/route/route.cuh index 13d7847b50..5bba4b0002 100644 --- a/cpp/src/routing/route/route.cuh +++ b/cpp/src/routing/route/route.cuh @@ -245,10 +245,11 @@ class route_t { return get_node(*n_nodes).time_dim.forward_feasible(this->vehicle_info()); } - DI void copy_to_tsp_route(bool depot_included) + DI void copy_to_tsp_route() { dimensions.requests.tsp_requests.start = get_node(0).node_info(); dimensions.requests.tsp_requests.end = get_node(*n_nodes).node_info(); + for (i_t tid = threadIdx.x; tid < *n_nodes; tid += blockDim.x) { if (get_node(tid).node_info().is_depot()) { continue; } dimensions.requests.tsp_requests.pred[get_node(tid).node_info().node()] = @@ -257,10 +258,10 @@ class route_t { get_node(tid + 1).node_info(); } - if (depot_included) { - dimensions.requests.tsp_requests.pred[0] = get_node(*n_nodes - 1).node_info(); - dimensions.requests.tsp_requests.succ[0] = get_node(1).node_info(); - } + dimensions.requests.tsp_requests.pred[dimensions.requests.tsp_requests.end.node()] = + get_node(*n_nodes - 1).node_info(); + dimensions.requests.tsp_requests.succ[dimensions.requests.tsp_requests.start.node()] = + get_node(1).node_info(); } // insert a single node to the route