58 (errcode(ERRCODE_INTERNAL_ERROR),
59 errmsg(
"Illegal value in parameter: factor"),
60 errhint(
"Value found: %f <= 0", factor)));
62 (*result_tuples) = NULL;
68 (errcode(ERRCODE_INTERNAL_ERROR),
69 errmsg(
"Illegal value in parameter: max_cycles"),
70 errhint(
"Value found: %d <= 0", max_cycles)));
72 (*result_tuples) = NULL;
76 if (initial_solution_id < 0 || initial_solution_id > 7) {
78 (errcode(ERRCODE_INTERNAL_ERROR),
79 errmsg(
"Illegal value in parameter: initial"),
80 errhint(
"Value found: %d <= 0", initial_solution_id)));
82 (*result_tuples) = NULL;
89 size_t total_pd_orders = 0;
91 &pd_orders_arr, &total_pd_orders);
93 if (total_pd_orders == 0) {
95 (*result_tuples) = NULL;
98 if (pd_orders_arr) {pfree(pd_orders_arr); pd_orders_arr = NULL;}
102 (errcode(ERRCODE_INTERNAL_ERROR),
103 errmsg(
"No orders found")));
109 size_t total_vehicles = 0;
111 &vehicles_arr, &total_vehicles,
114 if (total_vehicles == 0) {
116 (*result_tuples) = NULL;
119 if (pd_orders_arr) {pfree(pd_orders_arr); pd_orders_arr = NULL;}
120 if (vehicles_arr) {pfree(vehicles_arr); vehicles_arr = NULL;}
124 (errcode(ERRCODE_INTERNAL_ERROR),
125 errmsg(
"No vehicles found")));
130 PGR_DBG(
"total orders %ld", total_pd_orders);
131 for (
size_t i = 0; i < total_pd_orders; i++) {
132 PGR_DBG(
"%ld %f pick %ld - %ld %ld %ld"
133 "deliver %ld - %ld %ld %ld ",
135 pd_orders_arr[i].demand,
137 pd_orders_arr[i].pick_node_id,
139 pd_orders_arr[i].pick_open_t,
140 pd_orders_arr[i].pick_close_t,
141 pd_orders_arr[i].pick_service_t,
143 pd_orders_arr[i].deliver_node_id,
145 pd_orders_arr[i].deliver_open_t,
146 pd_orders_arr[i].deliver_close_t,
147 pd_orders_arr[i].deliver_service_t);
152 PGR_DBG(
"total vehicles %ld", total_vehicles);
153 for (
size_t i = 0; i < total_vehicles; i++) {
154 PGR_DBG(
"%ld %f %f , start %ld %ld %ld %ld "
155 "end %ld %ld %ld %ld number %ld ",
157 vehicles_arr[i].capacity,
158 vehicles_arr[i].speed,
160 vehicles_arr[i].start_node_id,
161 vehicles_arr[i].start_open_t,
162 vehicles_arr[i].start_close_t,
163 vehicles_arr[i].start_service_t,
165 vehicles_arr[i].end_node_id,
166 vehicles_arr[i].end_open_t,
167 vehicles_arr[i].end_close_t,
168 vehicles_arr[i].end_service_t,
170 vehicles_arr[i].cant_v);
175 size_t total_cells = 0;
178 PGR_DBG(
"total matrix rows %ld", total_cells);
180 for (
size_t i = 0; i < total_cells; i++) {
182 matrix_cells_arr[i].from_vid,
183 matrix_cells_arr[i].to_vid,
184 matrix_cells_arr[i].cost);
188 if (total_cells == 0) {
190 (*result_tuples) = NULL;
193 if (pd_orders_arr) {pfree(pd_orders_arr); pd_orders_arr = NULL;}
194 if (vehicles_arr) {pfree(vehicles_arr); vehicles_arr = NULL;}
195 if (matrix_cells_arr) {pfree(matrix_cells_arr); matrix_cells_arr = NULL;}
198 (errcode(ERRCODE_INTERNAL_ERROR),
199 errmsg(
"No matrix found")));
205 PGR_DBG(
"Total %ld orders in query:", total_pd_orders);
206 PGR_DBG(
"Total %ld vehicles in query:", total_vehicles);
207 PGR_DBG(
"Total %ld matrix cells in query:", total_cells);
210 PGR_DBG(
"Starting processing");
211 clock_t start_t = clock();
212 char *log_msg = NULL;
213 char *notice_msg = NULL;
214 char *err_msg = NULL;
217 pd_orders_arr, total_pd_orders,
218 vehicles_arr, total_vehicles,
219 matrix_cells_arr, total_cells,
232 time_msg(
"pgr_pickDeliver", start_t, clock());
234 if (err_msg && (*result_tuples)) {
235 pfree(*result_tuples);
237 (*result_tuples) = NULL;
242 if (log_msg) {pfree(log_msg); log_msg = NULL;}
243 if (notice_msg) {pfree(notice_msg); notice_msg = NULL;}
244 if (err_msg) {pfree(err_msg); err_msg = NULL;}
245 if (pd_orders_arr) {pfree(pd_orders_arr); pd_orders_arr = NULL;}
246 if (vehicles_arr) {pfree(vehicles_arr); vehicles_arr = NULL;}
247 if (matrix_cells_arr) {pfree(matrix_cells_arr); matrix_cells_arr = NULL;}