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 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 _API_H
16 #define _API_H
17 
18 #define COMPILING_FOR_MASTER
19 
20 #include "sym_proto.h"
21 #include "sym_master.h"
22 #include "sym_messages.h"
23 
24 /*===========================================================================*/
25 /*===================== Interface functions (master.c) ======================*/
26 /*===========================================================================*/
27 
28 sym_environment *sym_open_environment PROTO((void));
29 int sym_set_defaults PROTO((sym_environment *env));
30 int sym_parse_command_line PROTO((sym_environment *env, int argc,
31 				  char **argv));
32 int sym_set_user_data PROTO((sym_environment *env, void *user));
33 int sym_get_user_data PROTO((sym_environment *env, void **user));
34 int sym_read_mps PROTO((sym_environment *env, char *infile));
35 int sym_read_gmpl PROTO((sym_environment *env, char *modelfile,
36 			 char *datafile));
37 int sym_load_problem PROTO((sym_environment *env));
38 int sym_find_initial_bounds PROTO((sym_environment *env));
39 
40 int sym_solve PROTO((sym_environment *env));
41 int sym_warm_solve PROTO((sym_environment *env));
42 int sym_mc_solve PROTO((sym_environment *env));
43 
44 int sym_create_permanent_cut_pools PROTO((sym_environment *env, int *cp_num));
45 int sym_close_environment PROTO((sym_environment *env));
46 int sym_explicit_load_problem PROTO((sym_environment *env, int numcols,
47 				     int numrows, int *start, int *index,
48 				     double *value, double *collb,
49 				     double *colub, char *is_int, double *obj,
50 				     double *obj2, char *rowsen,
51 				     double *rowrhs, double *rowrng,
52 				     char make_copy));
53 
54 int sym_is_abandoned PROTO((sym_environment *env));
55 int sym_is_proven_optimal PROTO((sym_environment *env));
56 int sym_is_proven_primal_infeasible PROTO((sym_environment *env));
57 int sym_is_iteration_limit_reached PROTO((sym_environment *env));
58 int sym_is_time_limit_reached PROTO((sym_environment *env));
59 int sym_is_target_gap_achieved PROTO((sym_environment *env));
60 
61 int sym_get_status PROTO((sym_environment *env));
62 int sym_get_num_cols PROTO((sym_environment *env, int *numcols));
63 int sym_get_num_rows PROTO((sym_environment *env, int *numrows));
64 int sym_get_num_elements PROTO((sym_environment *env, int *numelems));
65 int sym_get_col_lower PROTO((sym_environment *env, double *collb));
66 int sym_get_col_upper PROTO((sym_environment *env, double *colub));
67 int sym_get_row_sense PROTO((sym_environment *env, char *rowsen));
68 int sym_get_rhs PROTO((sym_environment *env, double *rowrhs));
69 int sym_get_matrix PROTO((sym_environment *env, int *nz, int *matbeg,
70 			  int *matind, double *matval));
71 int sym_get_row_range PROTO((sym_environment *env, double *rowrng));
72 int sym_get_row_lower PROTO((sym_environment *env, double *rowlb));
73 int sym_get_row_upper PROTO((sym_environment *env, double *rowub));
74 int sym_get_obj_coeff PROTO((sym_environment *env, double *obj));
75 int sym_get_obj2_coeff PROTO((sym_environment *env, double *obj2));
76 int sym_get_obj_sense PROTO((sym_environment *env, int *sense));
77 
78 int sym_is_continuous PROTO((sym_environment *env, int index, int *value));
79 int sym_is_binary PROTO((sym_environment *env, int index, int *value));
80 int sym_is_integer PROTO((sym_environment *env, int index, int *value));
81 
82 double sym_get_infinity PROTO(());
83 
84 int sym_get_col_solution PROTO((sym_environment *env, double *colsol));
85 int sym_get_row_activity PROTO((sym_environment *env, double *rowact));
86 int sym_get_obj_val PROTO((sym_environment *env, double *objval));
87 int sym_get_primal_bound PROTO((sym_environment *env, double *ub));
88 int sym_get_iteration_count PROTO((sym_environment *env, int *numnodes));
89 
90 int sym_set_obj_coeff PROTO((sym_environment *env, int index, double value));
91 int sym_set_obj2_coeff PROTO((sym_environment *env, int index, double value));
92 int sym_set_col_lower PROTO((sym_environment *env, int index, double value));
93 int sym_set_col_upper PROTO((sym_environment *env, int index, double value));
94 int sym_set_row_lower PROTO((sym_environment *env, int index, double value));
95 int sym_set_row_upper PROTO((sym_environment *env, int index, double value));
96 int sym_set_row_type PROTO((sym_environment *env, int index, char rowsense,
97 			     double rowrhs, double rowrng));
98 int sym_set_obj_sense PROTO((sym_environment *env, int sense));
99 int sym_set_col_solution PROTO((sym_environment *env, double * colsol));
100 int sym_set_primal_bound PROTO((sym_environment *env, double bound));
101 int sym_set_continuous PROTO((sym_environment *env, int index));
102 int sym_set_integer PROTO((sym_environment *env, int index));
103 int sym_set_col_names PROTO((sym_environment *env, char **colname));
104 int sym_add_col PROTO((sym_environment *env, int numelems, int *indices,
105 		       double *elements, double collb, double colub,
106 		       double obj, char is_int, char *name));
107 int sym_add_row PROTO((sym_environment *env, int numelems, int *indices,
108 		       double *elements, char rowsen, double rowrhs,
109 		       double rowrng));
110 int sym_delete_cols PROTO((sym_environment *env, int num, int * indices));
111 int sym_delete_rows PROTO((sym_environment *env, int num, int * indices));
112 
113 int sym_write_warm_start_desc PROTO((warm_start_desc *ws, char *file));
114 warm_start_desc *sym_read_warm_start PROTO((char *file));
115 
116 void sym_delete_warm_start PROTO((warm_start_desc *ws));
117 warm_start_desc *sym_get_warm_start PROTO((sym_environment *env,
118 					   int copy_warm_start));
119 
120 int sym_set_warm_start PROTO((sym_environment *env, warm_start_desc *ws));
121 
122 int sym_set_int_param PROTO((sym_environment *env, const char *key, int value));
123 int sym_set_dbl_param PROTO((sym_environment *env, const char *key, double value));
124 int sym_set_str_param PROTO((sym_environment *env, const char *key, const char *value));
125 
126 int sym_get_int_param PROTO((sym_environment *env, const char *key, int *value));
127 int sym_get_dbl_param PROTO((sym_environment *env, const char *key, double *value));
128 int sym_get_str_param PROTO((sym_environment *env, const char *key, char **value));
129 
130 int sym_get_lb_for_new_rhs PROTO((sym_environment *env, int cnt,
131 				  int *new_rhs_ind, double *new_rhs_val,
132 				  double *lb_for_new_rhs));
133 int sym_get_ub_for_new_rhs PROTO((sym_environment *env, int cnt,
134 				  int *new_rhs_ind, double *new_rhs_val,
135 				  double *ub_for_new_rhs));
136 #if 0
137 int sym_get_lb_for_new_obj PROTO((sym_environment *env, int cnt,
138 				  int *new_obj_ind, double *new_obj_val,
139 				  double *lb_for_new_obj));
140 #endif
141 int sym_get_ub_for_new_obj PROTO((sym_environment *env, int cnt,
142 				  int *new_obj_ind, double *new_obj_val,
143 				  double *ub_for_new_obj));
144 
145 warm_start_desc *sym_create_copy_warm_start PROTO((warm_start_desc * ws));
146 MIPdesc *sym_create_copy_mip_desc PROTO((sym_environment *env));
147 sym_environment * sym_create_copy_environment PROTO((sym_environment *env));
148 
149 int sym_test PROTO((sym_environment *env));
150 
151 #endif
152