00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _OS_LP_H
00014 #define _OS_LP_H
00015
00016
00017 #include "OS.hpp"
00018 #include "BCP_lp_user.hpp"
00019 #include "BCP_buffer.hpp"
00020 #include "BCP_parameters.hpp"
00021 #include "OS_var.hpp"
00022 #include "OS_user_data.hpp"
00023 #include "OS_packer.hpp"
00024
00027 class OS_lp : public BCP_lp_user {
00028
00029 OsiSolverInterface* cg_lp;
00030
00031
00032
00034 OS_prob *os_prob;
00035
00037 MY_user_data *p_ud;
00038
00040 int in_strong;
00041
00043 double EPS;
00044
00046 BCP_vec<BCP_cut*> algo_cuts;
00047
00049 BCP_vec<BCP_var*> algo_vars;
00050
00051
00052 bool generated_vars;
00053 bool generated_cuts;
00054
00055
00057 std::vector<int> violated_cuts;
00058
00059 public:
00060
00061
00062
00063
00064
00067
00068 OS_lp(){}
00069
00071 virtual ~OS_lp() {}
00073
00076
00077 virtual void unpack_module_data(BCP_buffer & buf);
00078
00080
00081
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00096
00097
00099
00101
00102
00104 virtual OsiSolverInterface *initialize_solver_interface();
00105
00107 virtual void initialize_new_search_tree_node(
00108 const BCP_vec<BCP_var*>& vars,
00109 const BCP_vec<BCP_cut*>& cuts,
00110 const BCP_vec<BCP_obj_status>& var_status,
00111 const BCP_vec<BCP_obj_status>& cut_status,
00112 BCP_vec<int>& var_changed_pos,
00113 BCP_vec<double>& var_new_bd,
00114 BCP_vec<int>& cut_changed_pos,
00115 BCP_vec<double>& cut_new_bd);
00116
00120 virtual void modify_lp_parameters(OsiSolverInterface* lp,
00121 bool in_strong_branching);
00122
00127
00128
00129
00130
00131
00132
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 virtual void display_lp_solution(const BCP_lp_result& lpres,
00147 const BCP_vec<BCP_var*>& vars,
00148 const BCP_vec<BCP_cut*>& cuts,
00149 const bool final_lp_solution);
00150
00152 virtual BCP_solution* generate_heuristic_solution(
00153 const BCP_lp_result& lpres,
00154 const BCP_vec<BCP_var*>& vars,
00155 const BCP_vec<BCP_cut*>& cuts);
00156
00160 virtual void
00161 cuts_to_rows(const BCP_vec<BCP_var*>& vars,
00162 BCP_vec<BCP_cut*>& cuts,
00163 BCP_vec<BCP_row*>& rows,
00164 const BCP_lp_result& lpres,
00165 BCP_object_origin origin, bool allow_multiple);
00166
00173
00174
00175 virtual BCP_branching_decision
00176 select_branching_candidates(const BCP_lp_result& lpres,
00177 const BCP_vec<BCP_var*>& vars,
00178 const BCP_vec<BCP_cut*>& cuts,
00179 const BCP_lp_var_pool& local_var_pool,
00180 const BCP_lp_cut_pool& local_cut_pool,
00181 BCP_vec<BCP_lp_branching_object*>& cands,
00182 bool force_branch = false);
00183
00186 virtual void set_user_data_for_children(BCP_presolved_lp_brobj* best,
00187 const int selected);
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203 virtual void vars_to_cols(const BCP_vec<BCP_cut*>& cuts,
00204 BCP_vec<BCP_var*>& vars, BCP_vec<BCP_col*>& cols,
00205 const BCP_lp_result& lpres,
00206 BCP_object_origin origin, bool allow_multiple);
00207
00208
00209
00236 virtual void process_lp_result(const BCP_lp_result& lpres,
00237 const BCP_vec<BCP_var*>& vars,
00238 const BCP_vec<BCP_cut*>& cuts,
00239 const double old_lower_bound,
00240 double& true_lower_bound,
00241 BCP_solution*& sol,
00242 BCP_vec<BCP_cut*>& new_cuts,
00243 BCP_vec<BCP_row*>& new_rows,
00244 BCP_vec<BCP_var*>& new_vars,
00245 BCP_vec<BCP_col*>& new_cols);
00246
00247 void createcutsforbearcat(const BCP_lp_result& lpres,BCP_vec<BCP_cut*>& new_cuts, double tol1, double tol2, bool isInt);
00248
00249 void createCglCuts(const BCP_lp_result& lpres,BCP_vec<BCP_cut*>& new_cuts);
00250
00251 bool isIntSolution(const double *x, const BCP_vec<BCP_var*>& vars, const double intTol);
00252 };
00253
00254 #endif