Dip  0.92.4
symphony.h
Go to the documentation of this file.
1 /*===========================================================================*/
2 /* */
3 /* This file is part of the SYMPHONY MILP Solver Framework. */
4 /* */
5 /* SYMPHONY was jointly developed by Ted Ralphs (ted@lehigh.edu) and */
6 /* Laci Ladanyi (ladanyi@us.ibm.com). */
7 /* */
8 /* (c) Copyright 2005-2019 Ted Ralphs. All Rights Reserved. */
9 /* */
10 /* This software is licensed under the Eclipse Public License. Please see */
11 /* accompanying file for terms. */
12 /* */
13 /*===========================================================================*/
14 
15 #ifndef _SYM_API_H
16 #define _SYM_API_H
17 
18 #define COMPILING_FOR_MASTER
19 
20 #ifdef PROTO
21 #undef PROTO
22 #endif
23 #define PROTO(x) x
24 
25 /*****************************************************************************
26  *****************************************************************************
27  ************* **********
28  ************* Return Values **********
29  ************* **********
30  *****************************************************************************
31  *****************************************************************************/
32 
33 /*----------------------- Global return codes -------------------------------*/
34 #define FUNCTION_TERMINATED_NORMALLY 0
35 #define FUNCTION_TERMINATED_ABNORMALLY -1
36 #define ERROR__USER -100
37 
38 /*-------------- Return codes for sym_parse_comand_line() -------------------*/
39 #define ERROR__OPENING_PARAM_FILE -110
40 #define ERROR__PARSING_PARAM_FILE -111
41 
42 /*----------------- Return codes for sym_load_problem() ---------------------*/
43 #define ERROR__READING_GMPL_FILE -120
44 #define ERROR__READING_WARM_START_FILE -121
45 #define ERROR__READING_MPS_FILE -122
46 #define ERROR__READING_LP_FILE -123
47 
48 /*-------------------- Return codes for sym_solve() -------------------------*/
49 #define TM_NO_PROBLEM 225
50 #define TM_NO_SOLUTION 226
51 #define TM_OPTIMAL_SOLUTION_FOUND 227
52 #define TM_TIME_LIMIT_EXCEEDED 228
53 #define TM_NODE_LIMIT_EXCEEDED 229
54 #define TM_ITERATION_LIMIT_EXCEEDED 230
55 #define TM_TARGET_GAP_ACHIEVED 231
56 #define TM_FOUND_FIRST_FEASIBLE 232
57 #define TM_FINISHED 233
58 #define TM_UNFINISHED 234
59 #define TM_FEASIBLE_SOLUTION_FOUND 235
60 #define TM_SIGNAL_CAUGHT 236
61 #define TM_UNBOUNDED 237
62 #define PREP_OPTIMAL_SOLUTION_FOUND 238
63 #define PREP_NO_SOLUTION 239
64 #define TM_ERROR__NO_BRANCHING_CANDIDATE -250
65 #define TM_ERROR__ILLEGAL_RETURN_CODE -251
66 #define TM_ERROR__NUMERICAL_INSTABILITY -252
67 #define TM_ERROR__COMM_ERROR -253
68 #define TM_ERROR__USER -275
69 #define PREP_ERROR -276
70 
71 /*****************************************************************************
72  *****************************************************************************
73  ************* **********
74  ************* General Constants **********
75  ************* **********
76  *****************************************************************************
77  *****************************************************************************/
78 
79 #ifndef TRUE
80 #define TRUE 1
81 #endif
82 #ifndef FALSE
83 #define FALSE 0
84 #endif
85 
86 #ifndef ANYONE
87 #define ANYONE -1
88 #endif
89 #ifndef ANYTHING
90 #define ANYTHING -1
91 #endif
92 
93 #define DSIZE sizeof(double)
94 #define ISIZE sizeof(int)
95 #define CSIZE sizeof(char)
96 
97 #ifndef BITSPERBYTE
98 #define BITSPERBYTE 8
99 #endif
100 #ifndef BITS
101 #define BITS(type) (BITSPERBYTE * (int)sizeof (type))
102 #endif
103 
104 #ifdef HIBITI
105 #undef HIBITI
106 #endif
107 #define HIBITI (1U << (BITS(int) - 1))
108 #ifdef MAXINT
109 #undef MAXINT
110 #endif
111 #define MAXINT ((int)(~(HIBITI)))
112 #ifdef MAXDOUBLE
113 #undef MAXDOUBLE
114 #endif
115 #define MAXDOUBLE 1.79769313486231570e+308
116 
117 #define SYM_INFINITY 1e20
118 
119 #define BIG_DBL 1e40
120 
121 #define SYM_MINIMIZE 0
122 #define SYM_MAXIMIZE 1
123 
124 #define MAX_NAME_SIZE 255
125 
126 /*--------------------- return values for user-written functions ------------*/
127 #define USER_ERROR -5
128 #define USER_SUCCESS -4
129 #define USER_NO_PP -3
130 #define USER_AND_PP -2
131 #define USER_DEFAULT -1
132 
133 /*------------ search order options for multi-criteria problems -------------*/
134 #define MC_FIFO 0
135 #define MC_LIFO 1
136 
137 /*------------ warm_starting options for multi-criteria problems -------------*/
138 #define MC_WS_UTOPIA_FIRST 0
139 #define MC_WS_UTOPIA_BOTH_FIXED 1
140 #define MC_WS_UTOPIA_BOTH 2
141 #define MC_WS_BEST_CLOSE 3
142 
143 /*------------------------ compare_candidates -------------------------------*/
144 #define BIGGEST_DIFFERENCE_OBJ 0
145 #define LOWEST_LOW_OBJ 1
146 #define HIGHEST_LOW_OBJ 2
147 #define LOWEST_HIGH_OBJ 3
148 #define HIGHEST_HIGH_OBJ 4
149 #define HIGH_LOW_COMBINATION 9
150 
151 /*--------------------------- select_child ----------------------------------*/
152 #define PREFER_LOWER_OBJ_VALUE 0
153 #define PREFER_HIGHER_OBJ_VALUE 1
154 
155 /*-------------------- generate_cuts_in_lp defaults -------------------------*/
156 #define GENERATE_CGL_CUTS 20
157 #define DO_NOT_GENERATE_CGL_CUTS 21
158 
159 /*-------------------- xxx_cuts_generation_levels ---------------------------*/
160 #define DO_NOT_GENERATE -1
161 #define GENERATE_DEFAULT 0
162 #define GENERATE_IF_IN_ROOT 1
163 #define GENERATE_ONLY_IN_ROOT 2
164 #define GENERATE_ALWAYS 3
165 #define GENERATE_PERIODICALLY 4
166 
167 /*------------------------- node selection rules ----------------------------*/
168 #define LOWEST_LP_FIRST 0
169 #define HIGHEST_LP_FIRST 1
170 #define BREADTH_FIRST_SEARCH 2
171 #define DEPTH_FIRST_SEARCH 3
172 #define BEST_FIRST_SEARCH 4
173 #define DEPTH_FIRST_THEN_BEST_FIRST 5
174 
175 /*-------------------------- diving_strategy --------------------------------*/
176 #define BEST_ESTIMATE 0
177 #define COMP_BEST_K 1
178 #define COMP_BEST_K_GAP 2
179 
180 /*--------------- parameter values for feasibility pump heuristic -----------*/
181 #define SYM_FEAS_PUMP_DEFAULT 1 /* use fp using the default rules */
182 #define SYM_FEAS_PUMP_REPEATED 2 /* use fp till the end of solve */
183 #define SYM_FEAS_PUMP_TILL_SOL 3 /* use fp till a solution is found */
184 #define SYM_FEAS_PUMP_DISABLE -1 /* dont use fp */
185 
186 typedef struct MIPDESC MIPdesc;
189 
190 /*===========================================================================*/
191 /*===================== Interface functions (master.c) ======================*/
192 /*===========================================================================*/
193 
194 void sym_version PROTO((void));
195 sym_environment *sym_open_environment PROTO((void));
196 int sym_close_environment PROTO((sym_environment *env));
197 int sym_reset_environment PROTO((sym_environment *env));
198 int sym_set_defaults PROTO((sym_environment *env));
199 int sym_parse_command_line PROTO((sym_environment *env, int argc,
200  char **argv));
201 int sym_set_user_data PROTO((sym_environment *env, void *user));
202 int sym_get_user_data PROTO((sym_environment *env, void **user));
203 int sym_read_mps PROTO((sym_environment *env, char *infile));
204 int sym_read_lp PROTO((sym_environment *env, char *infile));
205 int sym_read_gmpl PROTO((sym_environment *env, char *modelfile,
206  char *datafile));
207 int sym_write_mps PROTO((sym_environment *env, char *infile));
208 int sym_write_lp PROTO((sym_environment *env, char *infile));
209 
210 int sym_load_problem PROTO((sym_environment *env));
211 int sym_find_initial_bounds PROTO((sym_environment *env));
212 
213 int sym_solve PROTO((sym_environment *env));
214 int sym_warm_solve PROTO((sym_environment *env));
215 int sym_mc_solve PROTO((sym_environment *env));
216 
217 int sym_create_permanent_cut_pools PROTO((sym_environment *env, int *cp_num));
218 int sym_explicit_load_problem PROTO((sym_environment *env, int numcols,
219  int numrows, int *start, int *index,
220  double *value, double *collb,
221  double *colub, char *is_int, double *obj,
222  double *obj2, char *rowsen,
223  double *rowrhs, double *rowrng,
224  char make_copy));
225 
226 int sym_is_abandoned PROTO((sym_environment *env));
227 int sym_is_proven_optimal PROTO((sym_environment *env));
228 int sym_is_proven_primal_infeasible PROTO((sym_environment *env));
229 int sym_is_iteration_limit_reached PROTO((sym_environment *env));
230 int sym_is_time_limit_reached PROTO((sym_environment *env));
231 int sym_is_target_gap_achieved PROTO((sym_environment *env));
232 
233 int sym_get_status PROTO((sym_environment *env));
234 int sym_get_num_cols PROTO((sym_environment *env, int *numcols));
235 int sym_get_num_rows PROTO((sym_environment *env, int *numrows));
236 int sym_get_num_elements PROTO((sym_environment *env, int *numelems));
237 int sym_get_col_lower PROTO((sym_environment *env, double *collb));
238 int sym_get_col_upper PROTO((sym_environment *env, double *colub));
239 int sym_get_row_sense PROTO((sym_environment *env, char *rowsen));
240 int sym_get_rhs PROTO((sym_environment *env, double *rowrhs));
241 int sym_get_matrix PROTO((sym_environment *env, int *nz, int *matbeg,
242  int *matind, double *matval));
243 int sym_get_row_range PROTO((sym_environment *env, double *rowrng));
244 int sym_get_row_lower PROTO((sym_environment *env, double *rowlb));
245 int sym_get_row_upper PROTO((sym_environment *env, double *rowub));
246 int sym_get_obj_coeff PROTO((sym_environment *env, double *obj));
247 int sym_get_obj2_coeff PROTO((sym_environment *env, double *obj2));
248 int sym_get_obj_sense PROTO((sym_environment *env, int *sense));
249 
250 int sym_is_continuous PROTO((sym_environment *env, int index, int *value));
251 int sym_is_binary PROTO((sym_environment *env, int index, int *value));
252 int sym_is_integer PROTO((sym_environment *env, int index, char *value));
253 
254 double sym_get_infinity PROTO(());
255 
256 int sym_get_col_solution PROTO((sym_environment *env, double *colsol));
257 int sym_get_sp_size PROTO((sym_environment *env, int *size));
258 int sym_get_sp_solution PROTO((sym_environment *env, int index,
259  double *colsol, double *objval));
260 int sym_get_row_activity PROTO((sym_environment *env, double *rowact));
261 int sym_get_obj_val PROTO((sym_environment *env, double *objval));
262 int sym_get_primal_bound PROTO((sym_environment *env, double *ub));
263 int sym_get_iteration_count PROTO((sym_environment *env, int *numnodes));
264 
265 int sym_set_obj_coeff PROTO((sym_environment *env, int index, double value));
266 int sym_set_obj2_coeff PROTO((sym_environment *env, int index, double value));
267 int sym_set_col_lower PROTO((sym_environment *env, int index, double value));
268 int sym_set_col_upper PROTO((sym_environment *env, int index, double value));
269 int sym_set_row_lower PROTO((sym_environment *env, int index, double value));
270 int sym_set_row_upper PROTO((sym_environment *env, int index, double value));
271 int sym_set_row_type PROTO((sym_environment *env, int index, char rowsense,
272  double rowrhs, double rowrng));
273 int sym_set_obj_sense PROTO((sym_environment *env, int sense));
274 int sym_set_col_solution PROTO((sym_environment *env, double * colsol));
275 int sym_set_primal_bound PROTO((sym_environment *env, double bound));
276 int sym_set_continuous PROTO((sym_environment *env, int index));
277 int sym_set_integer PROTO((sym_environment *env, int index));
278 int sym_set_col_names PROTO((sym_environment *env, char **colname));
279 int sym_add_col PROTO((sym_environment *env, int numelems, int *indices,
280  double *elements, double collb, double colub,
281  double obj, char is_int, char *name));
282 int sym_add_row PROTO((sym_environment *env, int numelems, int *indices,
283  double *elements, char rowsen, double rowrhs,
284  double rowrng));
285 int sym_delete_cols PROTO((sym_environment *env, int num, int * indices));
286 int sym_delete_rows PROTO((sym_environment *env, int num, int * indices));
287 
288 int sym_write_warm_start_desc PROTO((warm_start_desc *ws, char *file));
289 warm_start_desc *sym_read_warm_start PROTO((char *file));
290 
291 void sym_delete_warm_start PROTO((warm_start_desc *ws));
292 warm_start_desc *sym_get_warm_start PROTO((sym_environment *env,
293  int copy_warm_start));
294 
295 int sym_set_warm_start PROTO((sym_environment *env, warm_start_desc *ws));
296 
297 int sym_set_int_param PROTO((sym_environment *env, const char *key, int value));
298 int sym_set_dbl_param PROTO((sym_environment *env, const char *key, double value));
299 int sym_set_str_param PROTO((sym_environment *env, const char *key, const char *value));
300 
301 int sym_get_int_param PROTO((sym_environment *env, const char *key, int *value));
302 int sym_get_dbl_param PROTO((sym_environment *env, const char *key, double *value));
303 int sym_get_str_param PROTO((sym_environment *env, const char *key, char **value));
304 
305 int sym_get_lb_for_new_rhs PROTO((sym_environment *env, int cnt,
306  int *new_rhs_ind, double *new_rhs_val,
307  double *lb_for_new_rhs));
308 int sym_get_ub_for_new_rhs PROTO((sym_environment *env, int cnt,
309  int *new_rhs_ind, double *new_rhs_val,
310  double *ub_for_new_rhs));
311 #if 0
312 int sym_get_lb_for_new_obj PROTO((sym_environment *env, int cnt,
313  int *new_obj_ind, double *new_obj_val,
314  double *lb_for_new_obj));
315 #endif
316 int sym_get_ub_for_new_obj PROTO((sym_environment *env, int cnt,
317  int *new_obj_ind, double *new_obj_val,
318  double *ub_for_new_obj));
319 
320 warm_start_desc *sym_create_copy_warm_start PROTO((warm_start_desc * ws));
321 MIPdesc *sym_create_copy_mip_desc PROTO((sym_environment *env));
322 MIPdesc *sym_get_presolved_mip_desc PROTO((sym_environment *env));
323 sym_environment * sym_create_copy_environment PROTO((sym_environment *env));
324 
325 int sym_test PROTO((sym_environment *env, int argc, char **argv,
326  int *test_status));
327 
328 #endif
#define PROTO(x)
Definition: sym_proto.h:27
double obj[2]
Definition: sym_master.h:48