00001
00002
00003 #ifndef _BCP_TM_USER_FUN_H
00004 #define _BCP_TM_USER_FUN_H
00005
00006
00007
00008 #include "BCP_math.hpp"
00009 #include "BCP_enum.hpp"
00010 #include "BCP_enum_process_t.hpp"
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 #include "BCP_tm_param.hpp"
00020 #include "BCP_tm_node.hpp"
00021 #include "BCP_enum_tm.hpp"
00022
00023 class BCP_lp_statistics;
00024
00025
00026
00056 class BCP_tm_user {
00057 private:
00058 BCP_tm_prob * p;
00059 public:
00066
00067 void setTmProblemPointer(BCP_tm_prob * ptr) { p = ptr; }
00069 BCP_tm_prob * getTmProblemPointer() { return p; }
00074
00075 double upper_bound() const;
00080
00081 char get_param(const BCP_tm_par::chr_params key) const;
00083 int get_param(const BCP_tm_par::int_params key) const;
00085 double get_param(const BCP_tm_par::dbl_params key) const;
00087 const BCP_string& get_param(const BCP_tm_par::str_params key) const;
00088
00090 void set_param(const BCP_tm_par::chr_params key, const bool val);
00092 void set_param(const BCP_tm_par::chr_params key, const char val);
00094 void set_param(const BCP_tm_par::int_params key, const int val);
00096 void set_param(const BCP_tm_par::dbl_params key, const double val);
00098 void set_param(const BCP_tm_par::str_params key, const char * val);
00101
00104 BCP_tm_user() : p(0) {}
00107 virtual ~BCP_tm_user() {}
00110
00111
00112
00113
00114
00124 virtual void
00125 pack_module_data(BCP_buffer& buf, BCP_process_t ptype);
00126
00134 virtual BCP_solution*
00135 unpack_feasible_solution(BCP_buffer& buf);
00136
00141 virtual bool
00142 replace_solution(const BCP_solution* old_sol, const BCP_solution* new_sol);
00143
00154 virtual void
00155 pack_warmstart(const BCP_warmstart* ws, BCP_buffer& buf);
00157 virtual BCP_warmstart*
00158 unpack_warmstart(BCP_buffer& buf);
00159
00161 virtual void
00162 pack_var_algo(const BCP_var_algo* var, BCP_buffer& buf);
00164 virtual BCP_var_algo*
00165 unpack_var_algo(BCP_buffer& buf);
00166
00168 virtual void
00169 pack_cut_algo(const BCP_cut_algo* cut, BCP_buffer& buf);
00171 virtual BCP_cut_algo*
00172 unpack_cut_algo(BCP_buffer& buf);
00173
00175 virtual void
00176 pack_user_data(const BCP_user_data* ud, BCP_buffer& buf);
00178 virtual BCP_user_data*
00179 unpack_user_data(BCP_buffer& buf);
00182
00183
00185 const BCP_proc_id* process_id() const;
00187 void
00188 send_message(const BCP_proc_id* const target, const BCP_buffer& buf);
00190 void
00191 broadcast_message(const BCP_process_t proc_type, const BCP_buffer& buf);
00194 virtual void
00195 process_message(BCP_buffer& buf);
00196
00208 virtual void
00209 initialize_core(BCP_vec<BCP_var_core*>& vars,
00210 BCP_vec<BCP_cut_core*>& cuts,
00211 BCP_lp_relax*& matrix);
00212
00222 virtual void
00223 create_root(BCP_vec<BCP_var*>& added_vars,
00224 BCP_vec<BCP_cut*>& added_cuts,
00225 BCP_user_data*& user_data,
00226 BCP_pricing_status& pricing_status);
00229
00231 virtual void
00232 display_feasible_solution(const BCP_solution* sol);
00233
00234
00237 virtual void
00238 display_node_information(BCP_tree& search_tree,
00239 const BCP_tm_node& node);
00240
00241
00243 virtual void
00244 display_final_information(const BCP_lp_statistics& lp_stat);
00245
00246
00251 virtual void
00252 init_new_phase(int phase, BCP_column_generation& colgen);
00255
00265 virtual bool compare_tree_nodes(const BCP_tm_node* node0,
00266 const BCP_tm_node* node1);
00268 };
00269
00270
00271
00272 #endif