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 2000-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 _BB_CONSTANTS_H
16 #define _BB_CONSTANTS_H
17 
18 #include "symphony.h"
19 
20 #define BB_BUNCH 127 * sizeof(double)
21 
22 /*----------------- Error codes for process_chain() ------------------------*/
23 #define ERROR__NO_BRANCHING_CANDIDATE  -101
24 #define ERROR__ILLEGAL_RETURN_CODE     -102
25 #define ERROR__NUMERICAL_INSTABILITY   -103
26 #define ERROR__ILLEGAL_BRANCHING       -104
27 #define ERROR__COMM_ERROR              -105
28 #define ERROR__DUAL_INFEASIBLE         -106
29 /*---------------------------- type of the problem --------------------------*/
30 #define ZERO_ONE_PROBLEM         0
31 #define INTEGER_PROBLEM          1
32 #define MIXED_INTEGER_PROBLEM    2
33 
34 /*---------------------------- input format ---------------------------------*/
35 #define MPS_FORMAT               0
36 #define LP_FORMAT                1
37 #define GMPL_FORMAT              2
38 
39 /*--------------------------- modes of giving a list ------------------------*/
40 #define WRT_PARENT               0
41 #define EXPLICIT_LIST            1
42 #define NO_DATA_STORED           2
43 
44 /*----------------- possible stati of a node in the search tree -------------*/
45 #define NODE_STATUS__CANDIDATE         0
46 #define NODE_STATUS__BRANCHED_ON       1
47 #define NODE_STATUS__HELD              2
48 #define NODE_STATUS__ROOT              3
49 #define NODE_STATUS__PRUNED            4
50 #define NODE_STATUS__TIME_LIMIT        5
51 #define NODE_STATUS__ITERATION_LIMIT   6
52 #define NODE_STATUS__WARM_STARTED      7
53 #define NODE_STATUS__WSPRUNED          8
54 /*------------------------------ not_fixed stati ----------------------------*/
55 #define NF_CHECK_ALL             0x00
56 #define NF_CHECK_AFTER_LAST      0x01
57 #define NF_CHECK_UNTIL_LAST      0x02
58 #define NF_CHECK_NOTHING         0x04
59 
60 /*------------------- options on whether to dive or not ---------------------*/
61 #define DO_NOT_DIVE              0
62 #define DO_DIVE                  1
63 #define CHECK_BEFORE_DIVE        2
64 
65 /*-------------- possible node types when sending a node to TM --------------*/
66 #define ROOT_NODE                       0
67 #define NODE_BRANCHED_ON                1
68 #define INFEASIBLE_HOLD_FOR_NEXT_PHASE  2
69 #define OVER_UB_HOLD_FOR_NEXT_PHASE     3
70 #define INFEASIBLE_PRUNED               4
71 #define FEASIBLE_PRUNED                 5
72 #define OVER_UB_PRUNED                  6
73 #define DISCARDED_NODE                  7
74 #define TIME_LIMIT                      8
75 #define ITERATION_LIMIT                 9
76 #define REPRICED_NODE                   10
77 #define MC_FEASIBLE_PRUNED              11
78 /*to be used when warm_started*/
79 #define PRUNED_HAS_CAN_SOLUTION        12
80 #define NOT_PRUNED_HAS_CAN_SOLUTION    13
81 
82 /*------------------- possible node types for VBC Tool ----------------------*/
83 #define VBC_INTERIOR_NODE       1 /*Dark Red*/
84 #define VBC_PRUNED              2 /*Green*/
85 #define VBC_ACTIVE_NODE         3 /*White*/
86 #define VBC_CAND_NODE           4 /*Light Red*/
87 #define VBC_FEAS_SOL_FOUND      5 /*Blue*/
88 #define VBC_PRUNED_INFEASIBLE   6 /*color ??, used only when vbc_emulation = 3*/
89 #define VBC_PRUNED_FATHOMED     7 /*do*/
90 #define VBC_IGNORE              8 /*do*/
91 
92 
93 /*------------------ what to do with pruned nodes in the TM -----------------*/
94 #define DISCARD                  0
95 #define KEEP_ON_DISK_FULL        1
96 #define KEEP_ON_DISK_VBC_TOOL    2
97 #define KEEP_IN_MEMORY           3
98 
99 /*---------------------- logging options in the TM --------------------------*/
100 #define NO_LOGGING               0
101 #define FULL_LOGGING             1
102 #define VBC_TOOL                 2
103 
104 /*****************************************************************************
105  *****************************************************************************
106  *************                                                      **********
107  *************       Constants related to the LP process            **********
108  *************                                                      **********
109  *****************************************************************************
110  *****************************************************************************/
111 
112 /*****************************************************************************/
113 /*******         Constants related to solving of an lp                 *******/
114 /*****************************************************************************/
115 
116 /*--------------------- Constants related to the basis ----------------------*/
117 #  define INVALID_BASIS_STATUS 255
118 #  define VAR_AT_LB    0
119 #  define VAR_BASIC    1
120 #  define VAR_AT_UB    2
121 #  define VAR_FREE     3
122 #  define VAR_FIXED    4   /* OSLLIB uses this */
123 #  define SLACK_AT_LB  0
124 #  define SLACK_BASIC  1
125 #  define SLACK_AT_UB  2
126 #  define SLACK_FREE   3
127 #  define SLACK_FIXED  4   /* OSLLIB uses this for 'E' rows */
128 
129 /*----------------- LP Solver return codes (dual simplex) -------------------*/
130 #define LP_OPTIMAL                   0
131 #define LP_D_INFEASIBLE              1
132 #define LP_D_UNBOUNDED               2
133 #define LP_D_ITLIM                   3
134 #define LP_D_OBJLIM                  4
135 #define LP_OPT_FEASIBLE              5
136 #define LP_OPT_FEASIBLE_BUT_CONTINUE 6
137 #define LP_TIME_LIMIT                7
138 #define LP_ABANDONED                 8
139 
140 #define MOVE_TO_LB               0
141 #define MOVE_TO_UB               1
142 
143 #define LOWER_THAN_LB            0
144 #define HIGHER_THAN_UB           1
145 
146 /*----------------------------- LP status -----------------------------------*/
147 #define LP_HAS_BEEN_ABANDONED    0
148 #define LP_HAS_NOT_BEEN_MODIFIED 1
149 #define LP_HAS_BEEN_MODIFIED     2
150 
151 /*--------------------- how the variables are ordered -----------------------*/
152 #define COLIND_ORDERED             0
153 #define USERIND_ORDERED            1
154 #define COLIND_AND_USERIND_ORDERED 2
155 
156 /*---------------- The possible total dual feasibility stati ----------------*/
157 #define NOT_TDF     0
158 #define TDF_NOT_ALL 1
159 #define TDF_HAS_ALL 2
160 
161 /*----- for marking an lp_cut that it was copied to slack_cuts already ------*/
162 #define DO_NOT_BRANCH_ON_THIS_ROW  0x01
163 #define ALLOWED_TO_BRANCH_ON       0x02
164 #define CANDIDATE_FOR_BRANCH       0x04
165 #define SWITCH_CANDIDATE_ALLOWED   0x06
166 #define CUT_BRANCHED_ON            0x08
167 
168 /*------ which constraints considered ineffective (ineffective_constraints) -*/
169 #define NO_CONSTRAINT_IS_INEFFECTIVE      0
170 #define NONZERO_SLACKS_ARE_INEFFECTIVE    1
171 #define BASIC_SLACKS_ARE_INEFFECTIVE      2
172 #define ZERO_DUAL_VALUES_ARE_INEFFECTIVE  3
173 
174 /*------ whether a cut should be sent to CP if effective for long enough ----*/
175 #define CUT__DO_NOT_SEND_TO_CP     -1
176 #define CUT__SEND_TO_CP            -2
177 #define BASE_CONSTRAINT            -3
178 
179 /*---------------- source of cut --------------------------------------------*/
180 #define LEFTOVER                    0
181 #define INTERNAL_CUT_POOL          -1
182 #define EXTERNAL_CUT_POOL          -2
183 #define INTERNAL_CUT_GEN           -3
184 #define EXTERNAL_CUT_GEN           -4
185 
186 
187 /* --------------- type of cgl cut generator --------------------------------*/
188 #define CGL_PROBING_GENERATOR       0
189 #define CGL_KNAPSACK_GENERATOR      1
190 #define CGL_CLIQUE_GENERATOR        2
191 #define CGL_GOMORY_GENERATOR        3
192 #define CGL_TWOMIR_GENERATOR        4
193 #define CGL_FLOWCOVER_GENERATOR     5
194 #define CGL_ODDHOLE_GENERATOR       6
195 #define CGL_MIR_GENERATOR           7
196 #define CGL_NUM_GENERATORS          7
197 
198 
199 /* --------------- the status of cut generation on the chain ----------------*/
200 #define CGL_CHAIN_START             0
201 #define CGL_CHAIN_CONTINUE          1
202 #define CGL_CHAIN_CHECK             2
203 #define CGL_CHAIN_PAUSE             3
204 #define CGL_CHAIN_STOP              4
205 
206 /*---------------- what is the status of a particular constraint ------------*/
207 #define VIOLATED_ROW                0
208 #define TIGHT_ROW                   1
209 #define SLACK_ROW                   2
210 
211 /*--------------------- flags in the lp_data->status ------------------------*/
212 /************* variables NOT_REMOVABLE always remain in the LP ***************/
213 
214 #define NOT_FIXED                   0x01
215 
216 #define TEMP_FIXED_TO_LB            0x02
217 #define PERM_FIXED_TO_LB            0x04
218 #define TEMP_PERM_LB__SWITCH        0x06
219 #define NOT_FIXED__TEMP_LB__SWITCH  0x03
220 #define NOT_FIXED__PERM_LB__SWITCH  0x05
221 
222 #define TEMP_FIXED_TO_UB            0x08
223 #define PERM_FIXED_TO_UB            0x10
224 #define TEMP_PERM_UB__SWITCH        0x18
225 #define NOT_FIXED__TEMP_UB__SWITCH  0x09
226 #define NOT_FIXED__PERM_UB__SWITCH  0x11
227 
228 #define BASE_VARIABLE               0x20
229 #define VARIABLE_BRANCHED_ON        0x40
230 
231 #define NOT_REMOVABLE               0x60
232 
233 /*----------------------- col_gen -------------------------------------------*
234  * last 2 digits refer to what to do when we would fathom:
235  *     DO_NOT_GENERATE__COLS_DISCARD
236  *     DO_NOT_GENERATE_COLS_SEND (for next phase)
237  *     GENERATE_COLS__RESOLVE
238  * next 2 digits refer to what to do right before branching
239  ----------------------------------------------------------------------------*/
240 #define FATHOM__DO_NOT_GENERATE_COLS__DISCARD    0x00
241 #define FATHOM__DO_NOT_GENERATE_COLS__SEND       0x01
242 #define FATHOM__GENERATE_COLS__RESOLVE           0x02
243 #define COLGEN__FATHOM                           0x03
244 
245 #define BEFORE_BRANCH__DO_NOT_GENERATE_COLS      0x04
246 #define BEFORE_BRANCH__GENERATE_COLS__RESOLVE    0x08
247 
248 #define COLGEN_REPRICING                         0x10
249 
250 /*-------------------- argument for generate_column_u -----------------------*/
251 #define GENERATE_NEXTIND            0
252 #define GENERATE_REAL_NEXTIND       1
253 
254 /*---------------- Where the unpack_cuts routine is called from -------------*/
255 #define CUT_FROM_CG                 0
256 #define CUT_FROM_CP                 1
257 #define CUT_FROM_TM                 2
258 #define CUT_LEFTOVER                3
259 #define CUT_NOT_IN_MATRIX_SLACK     5
260 #if 0
261 #define CUT_VIOLATED_SLACK          4
262 #endif
263 
264 /*--------------------- how should a cut be unpacked ------------------------*/
265 #define UNPACK_CUTS_MULTIPLE        0
266 #define UNPACK_CUTS_SINGLE          1
267 
268 /*------------------------- built-in cut types ------------------------------*/
269 #define EXPLICIT_ROW                100
270 #define OPTIMALITY_CUT_FIRST        101
271 #define OPTIMALITY_CUT_SECOND       102
272 #define ORIGINAL_CONSTRAINT         103
273 
274 /*----------------- possible types of candidate objects ---------------------*/
275 #define CANDIDATE_VARIABLE          0
276 #define CANDIDATE_CUT_IN_MATRIX     1
277 #define CANDIDATE_CUT_NOT_IN_MATRIX 2
278 #define VIOLATED_SLACK              3
279 #define SLACK_TO_BE_DISCARDED       4
280 
281 /*----------------- possible types of branching objects ---------------------*/
282 #define BRANCHING_VARIABLE          0
283 #define BRANCHING_CUT               1
284 #define SOS1_IMPLICIT               2
285 
286 /*------------ possible return values of select_candidates_u() --------------*/
287 #define DO_BRANCH                   0
288 #define DO_NOT_BRANCH               1
289 #define DO_NOT_BRANCH__FATHOMED     2
290 #define DO_NOT_BRANCH__FEAS_SOL     3
291 
292 /*---------------- possible return values of branch() -----------------------*/
293 #define NEW_NODE                     -1
294 #define FATHOMED_NODE                -2
295 #define FEAS_SOL_FOUND               -3
296 /* asm4: added this return code for the case when the node can be pruned by
297  * branching */
298 #define BRANCHING_INF_NODE           -4
299 
300 /*------------- normal return value of various functions --------------------*/
301 
302 /*---------------------------------------------------------------------------*\
303  * anything non-negative means continue the node and the value is the
304  * number of cuts added. if there were vars added then that fact has already
305  * been printed out
306 \*---------------------------------------------------------------------------*/
307 
308 /*----------------------- discard_slack_cuts --------------------------------*/
309 #define DISCARD_SLACKS_BEFORE_NEW_ITERATION   0
310 #define DISCARD_SLACKS_WHEN_STARTING_NEW_NODE 1
311 
312 /*---------------- What is the solution to be displayed ---------------------*/
313 #define DISP_FEAS_SOLUTION          0
314 #define DISP_RELAXED_SOLUTION       1
315 #define DISP_FINAL_RELAXED_SOLUTION 2
316 
317 /*****************************************************************************/
318 /************ Default options and results of user defined functions **********/
319 /*****************************************************************************/
320 
321 /*---------------------------- colgen_strat ---------------------------------*/
322 #define COLGEN_STR_SIZE 5
323 #define COLGEN_STR_ARRAY {				\
324       { "FATHOM__DO_NOT_GENERATE_COLS__DISCARD",	\
325 	   FATHOM__DO_NOT_GENERATE_COLS__DISCARD },	\
326       { "FATHOM__DO_NOT_GENERATE_COLS__SEND",		\
327 	   FATHOM__DO_NOT_GENERATE_COLS__SEND    },	\
328       { "FATHOM__GENERATE_COLS__RESOLVE",		\
329 	   FATHOM__GENERATE_COLS__RESOLVE        },	\
330       { "BEFORE_BRANCH__DO_NOT_GENERATE_COLS",		\
331 	   BEFORE_BRANCH__DO_NOT_GENERATE_COLS   },	\
332       { "BEFORE_BRANCH__GENERATE_COLS__RESOLVE",	\
333 	   BEFORE_BRANCH__GENERATE_COLS__RESOLVE }	\
334 }
335 
336 /*------------------------- candidate selection -----------------------------*/
337 #ifdef COMPILE_FRAC_BRANCHING
338 #define COMPARE_CAN_STR_SIZE 9
339 #define COMPARE_CAN_STR_ARRAY {				\
340    { "LOWEST_LOW_FRAC", LOWEST_LOW_FRAC },			\
341    { "HIGHEST_LOW_FRAC", HIGHEST_LOW_FRAC },			\
342    { "LOWEST_HIGH_FRAC", LOWEST_HIGH_FRAC },			\
343    { "HIGHEST_HIGH_FRAC", HIGHEST_HIGH_FRAC },			\
344    { "BIGGEST_DIFFERENCE_OBJ", BIGGEST_DIFFERENCE_OBJ },	\
345    { "LOWEST_LOW_OBJ", LOWEST_LOW_OBJ },			\
346    { "HIGHEST_LOW_OBJ", HIGHEST_LOW_OBJ },			\
347    { "LOWEST_HIGH_OBJ", LOWEST_HIGH_OBJ },			\
348    { "HIGHEST_HIGH_OBJ", HIGHEST_HIGH_OBJ }			\
349 }
350 #else
351 #define COMPARE_CAN_STR_SIZE 5
352 #define COMPARE_CAN_STR_ARRAY {				\
353    { "BIGGEST_DIFFERENCE_OBJ", BIGGEST_DIFFERENCE_OBJ },	\
354    { "LOWEST_LOW_OBJ", LOWEST_LOW_OBJ },			\
355    { "HIGHEST_LOW_OBJ", HIGHEST_LOW_OBJ },			\
356    { "LOWEST_HIGH_OBJ", LOWEST_HIGH_OBJ },			\
357    { "HIGHEST_HIGH_OBJ", HIGHEST_HIGH_OBJ }			\
358 }
359 #endif
360 
361 /*---------------------------- same_cuts ------------------------------------*/
362 /* only default is to compare byte by byte */
363 
364 #define DIFFERENT_CUTS           1
365 #define SAME_CUTS                2
366 #define FIRST_CUT_BETTER         3
367 #define SECOND_CUT_BETTER        4
368 
369 /*--------------------------- is_feasible -----------------------------------*/
370 #define TEST_ZERO_ONE            0
371 #define TEST_INTEGRALITY         1
372 
373 #define IP_INFEASIBLE               0
374 #define IP_FEASIBLE                 1
375 #define IP_FEASIBLE_BUT_CONTINUE    2
376 #define IP_ALMOST_FEASIBLE          3
377 #define IP_FEASIBILITY_NOT_KNOWN    4
378 #define IP_HEUR_FEASIBLE            5
379 
380 /*------------------------- display_solution --------------------------------*/
381 #define DISP_NOTHING             0
382 #define DISP_NZ_INT              1
383 #define DISP_NZ_HEXA             2
384 #define DISP_FRAC_INT            3
385 #define DISP_FRAC_HEXA           4
386 /* no result */
387 
388 /*--------------------- pack_feasible_solution ------------------------------*/
389 /* #define SEND_NONZEROS  0*/
390 /* no result */
391 
392 /*------------------------- pack_lp_solution --------------------------------*/
393 #define SEND_NONZEROS            0
394 #define SEND_FRACTIONS           1
395 
396 #define LP_SOL_TO_CG             0
397 #define LP_SOL_TO_CP             1
398 #define LP_SOL_WITHIN_LP         2
399 /* no result */
400 
401 /*-------------------- emulation options for vbctool ------------------------*/
402 #define NO_VBC_EMULATION         0
403 #define VBC_EMULATION_FILE       1
404 #define VBC_EMULATION_LIVE       2
405 #define VBC_EMULATION_FILE_NEW   3
406 
407 /*------------------------ compare_candidates -------------------------------*/
408 #ifdef COMPILE_FRAC_BRANCHING
409 #define HIGHEST_LOW_FRAC         5
410 #define LOWEST_LOW_FRAC          6
411 #define HIGHEST_HIGH_FRAC        7
412 #define LOWEST_HIGH_FRAC         8
413 #endif
414 
415 #define FIRST_CANDIDATE_BETTER                    0
416 #define FIRST_CANDIDATE_BETTER_AND_BRANCH_ON_IT   1
417 #define SECOND_CANDIDATE_BETTER                   2
418 #define SECOND_CANDIDATE_BETTER_AND_BRANCH_ON_IT  3
419 #define BRANCH_ON_IT                              1
420 
421 /*--------------------------- select_child ----------------------------------*/
422 #ifdef COMPILE_FRAC_BRANCHING
423 #define PREFER_MORE_FRACTIONAL   2
424 #define PREFER_LESS_FRACTIONAL   3
425 #endif
426 
427 #define PRUNE_THIS_CHILD            0
428 #define RETURN_THIS_CHILD           1
429 #define KEEP_THIS_CHILD             2
430 #define PRUNE_THIS_CHILD_FATHOMABLE 3
431 
432 /*to be used to differentiate the fathomed nodes */
433 #define PRUNE_THIS_CHILD_INFEASIBLE 4
434 
435 /*--------------------- shall_we_branch defaults ----------------------------*/
436 #define USER__DO_NOT_BRANCH      0
437 #define USER__DO_BRANCH          1
438 #define USER__BRANCH_IF_MUST     2 /*default*/
439 #define USER__BRANCH_IF_TAILOFF  3
440 
441 /*--------------------- select_candidates defaults --------------------------*/
442 #define USER__CLOSE_TO_HALF                10
443 #define USER__CLOSE_TO_HALF_AND_EXPENSIVE  11
444 #define USER__CLOSE_TO_ONE_AND_CHEAP       12
445 
446 /*****************************************************************************
447  *****************************************************************************
448  *************                                                      **********
449  *************       Constants related to the Tree Manager          **********
450  *************                                                      **********
451  *****************************************************************************
452  *****************************************************************************/
453 
454 /*--------------------------- tree manager ----------------------------------*/
455 #define NEW_NODE__NONE          -1
456 #define NEW_NODE__STARTED       -2
457 #define NEW_NODE__ERROR         -3
458 #define NEW_NODE__STOP          -4
459 
460 /*****************************************************************************
461  *****************************************************************************
462  *************                                                      **********
463  *************        Constants related to the Cut Pool             **********
464  *************                                                      **********
465  *****************************************************************************
466  *****************************************************************************/
467 
468 /*----------------------- cut pool warm start -------------------------------*/
469 #define NO_WARM_START            0
470 #define READ_CP_LIST             1
471 #define READ_TM_LIST             2
472 
473 /*--------------- parameter values for "check_which_cuts" -------------------*/
474 #define CHECK_ALL_CUTS           0
475 #define CHECK_LEVEL              1
476 #define CHECK_TOUCHES            2
477 #define CHECK_LEVEL_AND_TOUCHES  3
478 
479 /*--------------- parameter values for "delete_which_cuts" ------------------*/
480 #define DELETE_BY_QUALITY                 1
481 #define DELETE_BY_TOUCHES                 2
482 /*These are for backward compatibility -- they default to the old style*/
483 #define DELETE_DUPLICATES                 2
484 #define DELETE_DUPLICATE_AND_INEFFECTIVE  2
485 
486 /*--------------- parameter values for restart/sens analysis ----------------*/
487 
488 #define NOTHING_CHANGED                   0
489 #define RHS_CHANGED                       1
490 #define OBJ_COEFF_CHANGED                 2
491 #define CONSTRAINT_MATRIX_CHANGED         3
492 #define COL_BOUNDS_CHANGED                4
493 #define OBJ_SENSE_CHANGED                 5
494 #define RHS_SENSE_CHANGED                 6
495 #define COLS_ADDED                        7
496 
497 /*--------------- parameter values for restart/sens analysis ----------------*/
498 #define DO_NOT_TRIM          0
499 #define TRIM_LEVEL           1
500 #define TRIM_INDEX           2
501 #define ON_CRU_VARS          3
502 
503 
504 /*--------------------- order type of a  matrix -----------------------------*/
505 #define MAT_ROW_ORDERED         0
506 #define MAT_COL_ORDERED         1
507 
508 /*---------------------- type of an implication -----------------------------*/
509 #define IMP_ROW             0
510 #define IMP_COL             1
511 
512 /*-----------------  return codes for presolve functions --------------------*/
513 /* preprocessor exited without modifying the MIP in any way */
514 #define PREP_UNMODIFIED     0
515 /* preprocessor modified the MIP in some way */
516 #define PREP_MODIFIED       1
517 /* preprocessor found the MIP infeasible */
518 #define PREP_INFEAS         2
519 /* preprocessor found the MIP unbounded */
520 #define PREP_SOLVED         3
521 /* preprocessor solved the MIP */
522 #define PREP_UNBOUNDED      4
523 #define PREP_NUMERIC_ERROR -1
524 #define PREP_OTHER_ERROR   -2
525 
526 /*--------------- types used for collecting info about the problem ----*/
527 
528 /* used to define prob type and/or row type */
529 #define CONTINUOUS_TYPE       0
530 #define BINARY_TYPE           1
531 #define INTEGER_TYPE          2
532 //#define INTEGER_PROBLEM          1
533 //#define MIXED_INTEGER_PROBLEM    2
534 #define BIN_CONT_TYPE         3
535 #define BIN_INT_TYPE          4
536 #define INT_CONT_TYPE         5
537 #define ALL_MIXED_TYPE        6
538 
539 #if 0
540 /* row type */
541 #define CONTINUOUS_ROW           0
542 #define BINARY_ROW               1
543 #define INTEGER_ROW              2
544 #define BIN_CONT_ROW             3
545 #define BIN_INT_ROW              4
546 #define INT_CONT_ROW             5
547 #define ALL_MIXED_ROW            6
548 #endif
549 
550 /* row bound type*/
551 #define OPEN_ROW                 0
552 #define ALL_BOUNDED_ROW          1
553 #define MIXED_BOUNDED_ROW        2
554 
555 /* vec coefs type*/
556 #define ALL_INTEGER_VEC          0
557 #define ALL_BINARY_VEC           1
558 #define FRACTIONAL_VEC           2
559 
560 /* vec sign type */
561 #define MIXED_TYPE_VEC           0
562 #define ALL_POS_VEC              1
563 #define ALL_NEG_VEC              2
564 
565 #endif
566 
567 /*--------------- types used for diving heuristic -------------------------*/
568 #define VLENGTH_FIX_DIVING       0
569 #define GUIDED_FIX_DIVING        1
570 #define CROSSOVER_FIX_DIVING     2
571 #define EUC_FIX_DIVING           3
572 #define RANK_FIX_DIVING          4
573 #define FRAC_FIX_DIVING          5
574 #define VLENGTH_DIVING           6
575 #define GUIDED_DIVING            7
576 #define CROSSOVER_DIVING         8
577 #define EUC_DIVING               9
578 #define RANK_DIVING              10
579 #define FRAC_DIVING              11
580 #define DIVING_HEURS_CNT         12
581 #define ROOT_DIVING              20
582 #define COEFF_DIVING             21
583 #define PC_DIVING                22
584 
585 /*--------------- types used for diving heuristic -------------------------*/
586 #define FR_SEARCH                0
587 #define RINS_SEARCH              1
588 
589