00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef LP_U_H
00016 #define LP_U_H
00017
00018 #include "sym_proto.h"
00019 #include "sym_types.h"
00020 #include "sym_lp_solver.h"
00021
00022
00023
00024 void branch_close_to_half PROTO((int max_cand_num, int *cand_num,
00025 branch_obj ***candidates));
00026 void branch_close_to_half_and_expensive PROTO((int max_cand_num, int *cand_num,
00027 branch_obj ***candidates));
00028 void branch_close_to_one_and_cheap PROTO((int max_cand_num, int *cand_num,
00029 branch_obj ***candidates));
00030
00031
00032
00033
00034
00035 int user_receive_lp_data PROTO((void **user));
00036 int user_free_lp PROTO((void **user));
00037 int user_create_subproblem PROTO((void *user, int *indices, MIPdesc *mip,
00038 int *maxn, int *maxm, int *maxnz));
00039 int user_is_feasible PROTO((void *user, double lpetol, int varnum,
00040 int *indices, double *values, int *feasible,
00041 double *true_objval, char branching,
00042 double *heur_solution));
00043 int user_send_feasible_solution PROTO((void *user, double lpetol, int varnum,
00044 int *indices, double *values));
00045 int user_display_lp_solution PROTO((void *user, int which_sol, int varnum,
00046 int *indices, double *values));
00047 int user_shall_we_branch PROTO((void *user, double lpetol, int cutnum,
00048 int slacks_in_matrix_num,
00049 cut_data **slacks_im_matrix, int slack_cut_num,
00050 cut_data **slack_cuts, int varnum,
00051 var_desc **vars, double *x, char *status,
00052 int *cand_num, branch_obj ***candidates,
00053 int *action));
00054 int user_select_candidates PROTO((void *user, double lpetol, int cutnum,
00055 int slacks_in_matrix_num,
00056 cut_data **slacks_im_matrix,
00057 int slack_cut_num, cut_data **slack_cuts,
00058 int varnum, var_desc **vars, double *x,
00059 char *status, int *cand_num,
00060 branch_obj ***candidates, int *action,
00061 int bc_level));
00062 int user_compare_candidates PROTO((void *user, branch_obj *can1,
00063 branch_obj *can2, double ub,
00064 double granularity, int *which_is_better));
00065 int user_select_child PROTO((void *user, double ub, branch_obj *can,
00066 char *action));
00067 int user_print_branch_stat PROTO((void *user, branch_obj *can, cut_data *cut,
00068 int varnum, var_desc **vars, char *action));
00069 int user_add_to_desc PROTO((void *user, int *desc_size, char **desc));
00070 int user_same_cuts PROTO((void *user, cut_data *cut1, cut_data *cut2,
00071 int *same_cuts));
00072 int user_unpack_cuts PROTO((void *user, int from, int type, int varnum,
00073 var_desc **vars, int cutnum, cut_data **cuts,
00074 int *new_row_num, waiting_row ***new_rows));
00075 int user_send_lp_solution PROTO((void *user, int varnum, var_desc **vars,
00076 double *x, int where));
00077 int user_logical_fixing PROTO((void *user, int varnum, var_desc **vars,
00078 double *x, char *status, int *fixed_num));
00079 int user_generate_column PROTO((void *user, int generate_what, int cutnum,
00080 cut_data **cuts, int prevind, int nextind,
00081 int *real_nextind, double *colval, int *colind,
00082 int *collen, double *obj, double *lb,
00083 double *ub));
00084 int user_generate_cuts_in_lp PROTO((void *user, LPdata *lp_data, int varnum,
00085 var_desc **vars,double *x,int *new_cut_num,
00086 cut_data ***new_cuts));
00087 int user_print_stat_on_cuts_added PROTO((void *user, int rownum,
00088 waiting_row **rows));
00089 int user_purge_waiting_rows PROTO((void *user, int rownum,
00090 waiting_row **rows, char *deleten));
00091
00092 #endif