00001
00002
00003 #ifndef _BCP_TM_USER_FUN_H
00004 #define _BCP_TM_USER_FUN_H
00005
00006
00007
00008 #include "BCP_enum.hpp"
00009 #include "BCP_enum_process_t.hpp"
00010
00011 #include "BCP_vector.hpp"
00012 #include "BCP_string.hpp"
00013 #include "BCP_buffer.hpp"
00014 #include "BCP_solution.hpp"
00015 #include "BCP_warmstart.hpp"
00016 #include "BCP_var.hpp"
00017 #include "BCP_cut.hpp"
00018 #include "BCP_matrix.hpp"
00019
00020 #include "BCP_tm_param.hpp"
00021 #include "BCP_tm_node.hpp"
00022 #include "BCP_enum_tm.hpp"
00023
00024 class BCP_lp_statistics;
00025
00026
00027
00057 class BCP_tm_user {
00058 private:
00059 BCP_tm_prob * p;
00060 public:
00067
00068 void setTmProblemPointer(BCP_tm_prob * ptr) { p = ptr; }
00070 BCP_tm_prob * getTmProblemPointer() { return p; }
00075
00076 double upper_bound() const;
00081
00082 char get_param(const BCP_tm_par::chr_params key) const;
00084 int get_param(const BCP_tm_par::int_params key) const;
00086 double get_param(const BCP_tm_par::dbl_params key) const;
00088 const BCP_string& get_param(const BCP_tm_par::str_params key) const;
00089
00091 void set_param(const BCP_tm_par::chr_params key, const bool val);
00093 void set_param(const BCP_tm_par::chr_params key, const char val);
00095 void set_param(const BCP_tm_par::int_params key, const int val);
00097 void set_param(const BCP_tm_par::dbl_params key, const double val);
00099 void set_param(const BCP_tm_par::str_params key, const char * val);
00102
00105 BCP_tm_user() : p(0) {}
00108 virtual ~BCP_tm_user() {}
00111
00112
00113
00114
00115
00125 virtual void
00126 pack_module_data(BCP_buffer& buf, BCP_process_t ptype);
00127
00135 virtual BCP_solution*
00136 unpack_feasible_solution(BCP_buffer& buf);
00137
00142 virtual bool
00143 replace_solution(const BCP_solution* old_sol, const BCP_solution* new_sol);
00144
00155 virtual void
00156 pack_warmstart(const BCP_warmstart* ws, BCP_buffer& buf);
00158 virtual BCP_warmstart*
00159 unpack_warmstart(BCP_buffer& buf);
00160
00162 virtual void
00163 pack_var_algo(const BCP_var_algo* var, BCP_buffer& buf);
00165 virtual BCP_var_algo*
00166 unpack_var_algo(BCP_buffer& buf);
00167
00169 virtual void
00170 pack_cut_algo(const BCP_cut_algo* cut, BCP_buffer& buf);
00172 virtual BCP_cut_algo*
00173 unpack_cut_algo(BCP_buffer& buf);
00174
00176 virtual void
00177 pack_user_data(const BCP_user_data* ud, BCP_buffer& buf);
00179 virtual BCP_user_data*
00180 unpack_user_data(BCP_buffer& buf);
00183
00184
00186 const BCP_proc_id* process_id() const;
00188 void
00189 send_message(const BCP_proc_id* const target, const BCP_buffer& buf);
00191 void
00192 broadcast_message(const BCP_process_t proc_type, const BCP_buffer& buf);
00195 virtual void
00196 process_message(BCP_buffer& buf);
00197
00209 virtual void
00210 initialize_core(BCP_vec<BCP_var_core*>& vars,
00211 BCP_vec<BCP_cut_core*>& cuts,
00212 BCP_lp_relax*& matrix);
00213
00223 virtual void
00224 create_root(BCP_vec<BCP_var*>& added_vars,
00225 BCP_vec<BCP_cut*>& added_cuts,
00226 BCP_user_data*& user_data,
00227 BCP_pricing_status& pricing_status);
00230
00232 virtual void
00233 display_feasible_solution(const BCP_solution* sol);
00234
00235
00238 virtual void
00239 display_node_information(BCP_tree& search_tree,
00240 const BCP_tm_node& node);
00241
00242
00244 virtual void
00245 display_final_information(const BCP_lp_statistics& lp_stat);
00246
00247
00252 virtual void
00253 init_new_phase(int phase, BCP_column_generation& colgen);
00256
00266 virtual bool compare_tree_nodes(const BCP_tm_node* node0,
00267 const BCP_tm_node* node1);
00269 };
00270
00271
00272
00273 #endif