@@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24
24
#include "c_common/e_report.h"
25
25
#include "c_common/time_msg.h"
26
26
27
-
27
+ #include "c_types/knapsack_rt.h"
28
28
#include "drivers/or_tools/knapsack_driver.h"
29
29
30
30
PGDLLEXPORT Datum
37
37
process (
38
38
char * weights_sql ,
39
39
char * values_sql ,
40
- char * matrix_sql ,
41
40
int bin_capacity ,
42
- double factor ,
43
- int max_cycles ,
44
- int initial_solution_id ,
45
-
46
- Solution_rt * * result_tuples ,
41
+
42
+ Knapsack_rt * * result_tuples ,
47
43
size_t * result_count ) {
48
- #if 0
49
- if (factor <= 0 ) {
50
- ereport (ERROR ,
51
- (errcode (ERRCODE_INTERNAL_ERROR ),
52
- errmsg ("Illegal value in parameter: factor" ),
53
- errhint ("Value found: %f <= 0" , factor )));
54
- (* result_count ) = 0 ;
55
- (* result_tuples ) = NULL ;
56
- return ;
57
- }
58
-
59
- if (max_cycles < 0 ) {
60
- ereport (ERROR ,
61
- (errcode (ERRCODE_INTERNAL_ERROR ),
62
- errmsg ("Illegal value in parameter: max_cycles" ),
63
- errhint ("Value found: %d <= 0" , max_cycles )));
64
- (* result_count ) = 0 ;
65
- (* result_tuples ) = NULL ;
66
- return ;
67
- }
68
-
69
- if (initial_solution_id < 0 || initial_solution_id > 7 ) {
70
- ereport (ERROR ,
71
- (errcode (ERRCODE_INTERNAL_ERROR ),
72
- errmsg ("Illegal value in parameter: initial" ),
73
- errhint ("Value found: %d <= 0" , initial_solution_id )));
74
- (* result_count ) = 0 ;
75
- (* result_tuples ) = NULL ;
76
- return ;
77
- }
78
44
79
45
pgr_SPI_connect ();
80
46
@@ -97,112 +63,13 @@ process(
97
63
return ;
98
64
}
99
65
100
-
101
- Vehicle_t * vehicles_arr = NULL ;
102
- size_t total_vehicles = 0 ;
103
- get_vehicles_raw (vehicles_sql ,
104
- & vehicles_arr , & total_vehicles ,
105
- false);
106
-
107
- if (total_vehicles == 0 ) {
108
- (* result_count ) = 0 ;
109
- (* result_tuples ) = NULL ;
110
-
111
- /* freeing memory before return */
112
- if (pd_orders_arr ) {pfree (pd_orders_arr ); pd_orders_arr = NULL ;}
113
- if (vehicles_arr ) {pfree (vehicles_arr ); vehicles_arr = NULL ;}
114
-
115
- pgr_SPI_finish ();
116
- ereport (ERROR ,
117
- (errcode (ERRCODE_INTERNAL_ERROR ),
118
- errmsg ("No vehicles found" )));
119
- return ;
120
- }
121
-
122
- PGR_DBG ("total orders %ld" , total_pd_orders );
123
- for (size_t i = 0 ; i < total_pd_orders ; i ++ ) {
124
- PGR_DBG ("%ld %f pick %ld - %ld %ld %ld"
125
- "deliver %ld - %ld %ld %ld " ,
126
- pd_orders_arr [i ].id ,
127
- pd_orders_arr [i ].demand ,
128
-
129
- pd_orders_arr [i ].pick_node_id ,
130
-
131
- pd_orders_arr [i ].pick_open_t ,
132
- pd_orders_arr [i ].pick_close_t ,
133
- pd_orders_arr [i ].pick_service_t ,
134
-
135
- pd_orders_arr [i ].deliver_node_id ,
136
-
137
- pd_orders_arr [i ].deliver_open_t ,
138
- pd_orders_arr [i ].deliver_close_t ,
139
- pd_orders_arr [i ].deliver_service_t );
140
- }
141
-
142
-
143
-
144
- PGR_DBG ("total vehicles %ld" , total_vehicles );
145
- for (size_t i = 0 ; i < total_vehicles ; i ++ ) {
146
- PGR_DBG ("%ld %f %f , start %ld %ld %ld %ld "
147
- "end %ld %ld %ld %ld number %ld " ,
148
- vehicles_arr [i ].id ,
149
- vehicles_arr [i ].capacity ,
150
- vehicles_arr [i ].speed ,
151
-
152
- vehicles_arr [i ].start_node_id ,
153
- vehicles_arr [i ].start_open_t ,
154
- vehicles_arr [i ].start_close_t ,
155
- vehicles_arr [i ].start_service_t ,
156
-
157
- vehicles_arr [i ].end_node_id ,
158
- vehicles_arr [i ].end_open_t ,
159
- vehicles_arr [i ].end_close_t ,
160
- vehicles_arr [i ].end_service_t ,
161
-
162
- vehicles_arr [i ].cant_v );
163
- }
164
-
165
- Matrix_cell_t * matrix_cells_arr = NULL ;
166
- size_t total_cells = 0 ;
167
- get_matrixRows_plain (matrix_sql , & matrix_cells_arr , & total_cells );
168
-
169
- PGR_DBG ("total matrix rows %ld" , total_cells );
170
- for (size_t i = 0 ; i < total_cells ; i ++ ) {
171
- PGR_DBG ("%ld %ld %f" ,
172
- matrix_cells_arr [i ].from_vid ,
173
- matrix_cells_arr [i ].to_vid ,
174
- matrix_cells_arr [i ].cost );
175
- }
176
-
177
- if (total_cells == 0 ) {
178
- (* result_count ) = 0 ;
179
- (* result_tuples ) = NULL ;
180
-
181
- /* freeing memory before return */
182
- if (pd_orders_arr ) {pfree (pd_orders_arr ); pd_orders_arr = NULL ;}
183
- if (vehicles_arr ) {pfree (vehicles_arr ); vehicles_arr = NULL ;}
184
- if (matrix_cells_arr ) {pfree (matrix_cells_arr ); matrix_cells_arr = NULL ;}
185
-
186
- ereport (WARNING ,
187
- (errcode (ERRCODE_INTERNAL_ERROR ),
188
- errmsg ("No matrix found" )));
189
- pgr_SPI_finish ();
190
- return ;
191
- }
192
-
193
-
194
- PGR_DBG ("Total %ld orders in query:" , total_pd_orders );
195
- PGR_DBG ("Total %ld vehicles in query:" , total_vehicles );
196
- PGR_DBG ("Total %ld matrix cells in query:" , total_cells );
197
-
198
-
199
66
PGR_DBG ("Starting processing" );
200
67
clock_t start_t = clock ();
201
68
char * log_msg = NULL ;
202
69
char * notice_msg = NULL ;
203
70
char * err_msg = NULL ;
204
71
205
- do_pgr_pickDeliver (
72
+ do_knapsack (
206
73
pd_orders_arr , total_pd_orders ,
207
74
vehicles_arr , total_vehicles ,
208
75
matrix_cells_arr , total_cells ,
@@ -218,31 +85,7 @@ process(
218
85
& notice_msg ,
219
86
& err_msg );
220
87
221
- time_msg ("pgr_pickDeliver" , start_t , clock ());
222
-
223
- if (err_msg && (* result_tuples )) {
224
- pfree (* result_tuples );
225
- (* result_count ) = 0 ;
226
- (* result_tuples ) = NULL ;
227
- }
228
- pgr_global_report (log_msg , notice_msg , err_msg );
229
- /* TODO(dev) remove unused includes */
230
- #include "c_common/orders_input.h"
231
- #include "c_common/vehicles_input.h"
232
- #include "c_common/matrixRows_input.h"
233
- #include "c_types/pickDeliveryOrders_t.h"
234
- #include "drivers/pgr_pickDeliver/pickDeliver_driver.h"
235
- #include "c_types/solution_rt.h"
236
- /* freeing memory before return */
237
- if (log_msg ) {pfree (log_msg ); log_msg = NULL ;}
238
- if (notice_msg ) {pfree (notice_msg ); notice_msg = NULL ;}
239
- if (err_msg ) {pfree (err_msg ); err_msg = NULL ;}
240
- if (pd_orders_arr ) {pfree (pd_orders_arr ); pd_orders_arr = NULL ;}
241
- if (vehicles_arr ) {pfree (vehicles_arr ); vehicles_arr = NULL ;}
242
- if (matrix_cells_arr ) {pfree (matrix_cells_arr ); matrix_cells_arr = NULL ;}
243
-
244
88
pgr_SPI_finish ();
245
- #endif
246
89
}
247
90
248
91
@@ -263,10 +106,7 @@ _vrp_knapsack(PG_FUNCTION_ARGS) {
263
106
process (
264
107
text_to_cstring (PG_GETARG_TEXT_P (0 )),
265
108
text_to_cstring (PG_GETARG_TEXT_P (1 )),
266
- text_to_cstring (PG_GETARG_TEXT_P (2 )),
267
- PG_GETARG_FLOAT8 (3 ),
268
- PG_GETARG_INT32 (4 ),
269
- PG_GETARG_INT32 (5 ),
109
+ PG_GETARG_INT32 (2 ),
270
110
& result_tuples ,
271
111
& result_count );
272
112
@@ -286,7 +126,7 @@ _vrp_knapsack(PG_FUNCTION_ARGS) {
286
126
287
127
funcctx = SRF_PERCALL_SETUP ();
288
128
tuple_desc = funcctx -> tuple_desc ;
289
- result_tuples = (Solution_rt * ) funcctx -> user_fctx ;
129
+ result_tuples = (Knapsack_rt * ) funcctx -> user_fctx ;
290
130
291
131
if (funcctx -> call_cntr < funcctx -> max_calls ) {
292
132
HeapTuple tuple ;
0 commit comments