/home/coin/SVN-release/CoinAll-1.1.0/SYMPHONY/include/symphony.h

Go to the documentation of this file.
00001 /*===========================================================================*/
00002 /*                                                                           */
00003 /* This file is part of the SYMPHONY MILP Solver Framework.                  */
00004 /*                                                                           */
00005 /* SYMPHONY was jointly developed by Ted Ralphs (tkralphs@lehigh.edu) and    */
00006 /* Laci Ladanyi (ladanyi@us.ibm.com).                                        */
00007 /*                                                                           */
00008 /* (c) Copyright 2005 Ted Ralphs. All Rights Reserved.                       */
00009 /*                                                                           */
00010 /* This software is licensed under the Common Public License. Please see     */
00011 /* accompanying file for terms.                                              */
00012 /*                                                                           */
00013 /*===========================================================================*/
00014 
00015 #ifndef _API_H
00016 #define _API_H
00017 
00018 #define COMPILING_FOR_MASTER
00019 
00020 #ifdef PROTO
00021 #undef PROTO
00022 #endif
00023 #define PROTO(x) x
00024 
00025 /*****************************************************************************
00026  *****************************************************************************
00027  *************                                                      **********
00028  *************                  Return Values                       **********
00029  *************                                                      **********
00030  *****************************************************************************
00031  *****************************************************************************/
00032 
00033 /*----------------------- Global return codes -------------------------------*/
00034 #define FUNCTION_TERMINATED_NORMALLY      0
00035 #define FUNCTION_TERMINATED_ABNORMALLY   -1
00036 #define ERROR__USER                      -100
00037 
00038 /*-------------- Return codes for sym_parse_comand_line() -------------------*/
00039 #define ERROR__OPENING_PARAM_FILE        -110
00040 #define ERROR__PARSING_PARAM_FILE        -111
00041 
00042 /*----------------- Return codes for sym_load_problem() ---------------------*/
00043 #define ERROR__READING_GMPL_FILE         -120
00044 #define ERROR__READING_WARM_START_FILE   -121
00045 #define ERROR__READING_MPS_FILE          -122
00046 #define ERROR__READING_LP_FILE           -123
00047 
00048 /*-------------------- Return codes for sym_solve() -------------------------*/
00049 #define TM_NO_PROBLEM                     225
00050 #define TM_NO_SOLUTION                    226
00051 #define TM_OPTIMAL_SOLUTION_FOUND         227
00052 #define TM_TIME_LIMIT_EXCEEDED            228
00053 #define TM_NODE_LIMIT_EXCEEDED            229
00054 #define TM_TARGET_GAP_ACHIEVED            230
00055 #define TM_FOUND_FIRST_FEASIBLE           231
00056 #define TM_FINISHED                       232
00057 #define TM_UNFINISHED                     233
00058 #define TM_FEASIBLE_SOLUTION_FOUND        234
00059 #define TM_SIGNAL_CAUGHT                  235
00060 #define TM_ERROR__NO_BRANCHING_CANDIDATE -250
00061 #define TM_ERROR__ILLEGAL_RETURN_CODE    -251
00062 #define TM_ERROR__NUMERICAL_INSTABILITY  -252
00063 #define TM_ERROR__COMM_ERROR             -253
00064 #define TM_ERROR__USER                   -275
00065 
00066 /*****************************************************************************
00067  *****************************************************************************
00068  *************                                                      **********
00069  *************                  General Constants                   **********
00070  *************                                                      **********
00071  *****************************************************************************
00072  *****************************************************************************/
00073 
00074 #ifndef TRUE
00075 #define TRUE  1
00076 #endif
00077 #ifndef FALSE
00078 #define FALSE 0
00079 #endif
00080 
00081 #ifndef ANYONE
00082 #define ANYONE   -1
00083 #endif
00084 #ifndef ANYTHING
00085 #define ANYTHING -1
00086 #endif
00087 
00088 #define DSIZE sizeof(double)
00089 #define ISIZE sizeof(int)
00090 #define CSIZE sizeof(char)
00091 
00092 #ifndef BITSPERBYTE
00093 #define BITSPERBYTE 8
00094 #endif
00095 #ifndef BITS
00096 #define BITS(type) (BITSPERBYTE * (int)sizeof (type))
00097 #endif
00098 
00099 #ifdef  HIBITI
00100 #undef  HIBITI
00101 #endif
00102 #define HIBITI (1U << (BITS(int) - 1))
00103 #ifdef  MAXINT
00104 #undef  MAXINT
00105 #endif
00106 #define MAXINT ((int)(~(HIBITI)))
00107 #ifdef MAXDOUBLE
00108 #undef MAXDOUBLE
00109 #endif
00110 #define MAXDOUBLE 1.79769313486231570e+308
00111 
00112 #define SYM_INFINITY                 100000000
00113 
00114 #define BIG_DBL                      1e40
00115 
00116 #define SYM_MINIMIZE                 0
00117 #define SYM_MAXIMIZE                 1 
00118 
00119 /*--------------------- return values for user-written functions ------------*/
00120 #define USER_ERROR              -5
00121 #define USER_SUCCESS            -4
00122 #define USER_NO_PP              -3
00123 #define USER_AND_PP             -2
00124 #define USER_DEFAULT            -1
00125 
00126 typedef struct MIPDESC MIPdesc;
00127 typedef struct WARM_START_DESC warm_start_desc;
00128 typedef struct SYM_ENVIRONMENT sym_environment;
00129 
00130 /*===========================================================================*/
00131 /*===================== Interface functions (master.c) ======================*/
00132 /*===========================================================================*/
00133 
00134 sym_environment *sym_open_environment PROTO((void));
00135 int sym_set_defaults PROTO((sym_environment *env));
00136 int sym_parse_command_line PROTO((sym_environment *env, int argc, 
00137                                   char **argv));
00138 int sym_set_user_data PROTO((sym_environment *env, void *user));
00139 int sym_get_user_data PROTO((sym_environment *env, void **user));
00140 int sym_read_mps PROTO((sym_environment *env, char *infile));
00141 int sym_read_lp PROTO((sym_environment *env, char *infile));
00142 int sym_read_gmpl PROTO((sym_environment *env, char *modelfile, 
00143                          char *datafile));
00144 int sym_write_mps PROTO((sym_environment *env, char *infile));
00145 int sym_write_lp PROTO((sym_environment *env, char *infile));
00146 
00147 int sym_load_problem PROTO((sym_environment *env));
00148 int sym_find_initial_bounds PROTO((sym_environment *env));
00149 
00150 int sym_solve PROTO((sym_environment *env));
00151 int sym_warm_solve PROTO((sym_environment *env));
00152 int sym_mc_solve PROTO((sym_environment *env));
00153 
00154 int sym_create_permanent_cut_pools PROTO((sym_environment *env, int *cp_num));
00155 int sym_close_environment PROTO((sym_environment *env));
00156 int sym_explicit_load_problem PROTO((sym_environment *env, int numcols, 
00157                                      int numrows, int *start, int *index, 
00158                                      double *value, double *collb,
00159                                      double *colub, char *is_int, double *obj,
00160                                      double *obj2, char *rowsen,
00161                                      double *rowrhs, double *rowrng,
00162                                      char make_copy));   
00163 
00164 int sym_is_abandoned PROTO((sym_environment *env));
00165 int sym_is_proven_optimal PROTO((sym_environment *env));
00166 int sym_is_proven_primal_infeasible PROTO((sym_environment *env));       
00167 int sym_is_iteration_limit_reached PROTO((sym_environment *env)); 
00168 int sym_is_time_limit_reached PROTO((sym_environment *env));
00169 int sym_is_target_gap_achieved PROTO((sym_environment *env));
00170 
00171 int sym_get_status PROTO((sym_environment *env));
00172 int sym_get_num_cols PROTO((sym_environment *env, int *numcols));
00173 int sym_get_num_rows PROTO((sym_environment *env, int *numrows));
00174 int sym_get_num_elements PROTO((sym_environment *env, int *numelems));
00175 int sym_get_col_lower PROTO((sym_environment *env, double *collb));
00176 int sym_get_col_upper PROTO((sym_environment *env, double *colub));
00177 int sym_get_row_sense PROTO((sym_environment *env, char *rowsen));
00178 int sym_get_rhs PROTO((sym_environment *env, double *rowrhs));
00179 int sym_get_matrix PROTO((sym_environment *env, int *nz, int *matbeg, 
00180                           int *matind, double *matval));
00181 int sym_get_row_range PROTO((sym_environment *env, double *rowrng));
00182 int sym_get_row_lower PROTO((sym_environment *env, double *rowlb));
00183 int sym_get_row_upper PROTO((sym_environment *env, double *rowub));
00184 int sym_get_obj_coeff PROTO((sym_environment *env, double *obj));
00185 int sym_get_obj2_coeff PROTO((sym_environment *env, double *obj2));
00186 int sym_get_obj_sense PROTO((sym_environment *env, int *sense));
00187 
00188 int sym_is_continuous PROTO((sym_environment *env, int index, int *value));
00189 int sym_is_binary PROTO((sym_environment *env, int index, int *value));
00190 int sym_is_integer PROTO((sym_environment *env, int index, char *value));
00191 
00192 double sym_get_infinity PROTO(());
00193 
00194 int sym_get_col_solution PROTO((sym_environment *env, double *colsol));
00195 int sym_get_row_activity PROTO((sym_environment *env, double *rowact));
00196 int sym_get_obj_val PROTO((sym_environment *env, double *objval));
00197 int sym_get_primal_bound PROTO((sym_environment *env, double *ub));
00198 int sym_get_iteration_count PROTO((sym_environment *env, int *numnodes));
00199 
00200 int sym_set_obj_coeff PROTO((sym_environment *env, int index, double value));
00201 int sym_set_obj2_coeff PROTO((sym_environment *env, int index, double value));
00202 int sym_set_col_lower PROTO((sym_environment *env, int index, double value));
00203 int sym_set_col_upper PROTO((sym_environment *env, int index, double value));
00204 int sym_set_row_lower PROTO((sym_environment *env, int index, double value));
00205 int sym_set_row_upper PROTO((sym_environment *env, int index, double value));
00206 int sym_set_row_type PROTO((sym_environment *env, int index, char rowsense, 
00207                              double rowrhs, double rowrng));
00208 int sym_set_obj_sense PROTO((sym_environment *env, int sense));
00209 int sym_set_col_solution PROTO((sym_environment *env, double * colsol));
00210 int sym_set_primal_bound PROTO((sym_environment *env, double bound));
00211 int sym_set_continuous PROTO((sym_environment *env, int index));
00212 int sym_set_integer PROTO((sym_environment *env, int index));
00213 int sym_set_col_names PROTO((sym_environment *env, char **colname));
00214 int sym_add_col PROTO((sym_environment *env, int numelems, int *indices, 
00215                        double *elements, double collb, double colub,
00216                        double obj, char is_int, char *name));
00217 int sym_add_row PROTO((sym_environment *env, int numelems, int *indices, 
00218                        double *elements, char rowsen, double rowrhs,
00219                        double rowrng));
00220 int sym_delete_cols PROTO((sym_environment *env, int num, int * indices));
00221 int sym_delete_rows PROTO((sym_environment *env, int num, int * indices));
00222 
00223 int sym_write_warm_start_desc PROTO((warm_start_desc *ws, char *file));
00224 warm_start_desc *sym_read_warm_start PROTO((char *file));
00225 
00226 void sym_delete_warm_start PROTO((warm_start_desc *ws));
00227 warm_start_desc *sym_get_warm_start PROTO((sym_environment *env, 
00228                                            int copy_warm_start));
00229 
00230 int sym_set_warm_start PROTO((sym_environment *env, warm_start_desc *ws));
00231 
00232 int sym_set_int_param PROTO((sym_environment *env, const char *key, int value));
00233 int sym_set_dbl_param PROTO((sym_environment *env, const char *key, double value));
00234 int sym_set_str_param PROTO((sym_environment *env, const char *key, const char *value));
00235 
00236 int sym_get_int_param PROTO((sym_environment *env, const char *key, int *value));
00237 int sym_get_dbl_param PROTO((sym_environment *env, const char *key, double *value));
00238 int sym_get_str_param PROTO((sym_environment *env, const char *key, char **value));
00239 
00240 int sym_get_lb_for_new_rhs PROTO((sym_environment *env, int cnt, 
00241                                   int *new_rhs_ind, double *new_rhs_val,
00242                                   double *lb_for_new_rhs));
00243 int sym_get_ub_for_new_rhs PROTO((sym_environment *env, int cnt, 
00244                                   int *new_rhs_ind, double *new_rhs_val,
00245                                   double *ub_for_new_rhs));
00246 #if 0
00247 int sym_get_lb_for_new_obj PROTO((sym_environment *env, int cnt, 
00248                                   int *new_obj_ind, double *new_obj_val,
00249                                   double *lb_for_new_obj));
00250 #endif
00251 int sym_get_ub_for_new_obj PROTO((sym_environment *env, int cnt, 
00252                                   int *new_obj_ind, double *new_obj_val,
00253                                   double *ub_for_new_obj));
00254                                      
00255 warm_start_desc *sym_create_copy_warm_start PROTO((warm_start_desc * ws));
00256 MIPdesc *sym_create_copy_mip_desc PROTO((sym_environment *env));
00257 sym_environment * sym_create_copy_environment PROTO((sym_environment *env));
00258 
00259 int sym_test PROTO((sym_environment *env, int *test_status));
00260 
00261 #endif

Generated on Sun Nov 14 14:06:42 2010 for Coin-All by  doxygen 1.4.7