00001 // Copyright (C) 2000, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 #ifndef _MKC_TM_H 00004 #define _MKC_TM_H 00005 00006 #include <OsiClpSolverInterface.hpp> 00007 00008 #include "BCP_parameters.hpp" 00009 #include "BCP_tm_user.hpp" 00010 00011 #include "MKC_tm_param.hpp" 00012 #include "MKC_lp_param.hpp" 00013 #include "MKC_knapsack.hpp" 00014 00015 //############################################################################# 00016 00017 class MKC_var; 00018 00019 //############################################################################# 00020 00021 class MKC_tm : public BCP_tm_user { 00022 public: 00023 BCP_parameter_set<MKC_tm_par> tm_par; 00024 BCP_parameter_set<MKC_lp_par> lp_par; 00025 MKC_knapsack_set kss; 00026 BCP_vec<MKC_var*> input_vars; 00027 OsiClpSolverInterface* clp; 00028 public: 00029 MKC_tm() : clp(0) {} 00030 ~MKC_tm() { 00031 if (clp) 00032 delete clp; 00033 purge_ptr_vector(input_vars); 00034 } 00035 //=========================================================================== 00036 // Here are the user defined functions. For each of them a default is given 00037 // which can be overridden when the concrete user class is defined. 00038 //=========================================================================== 00039 //--------------------------------------------------------------------------- 00040 // pack the initial info for the appropriate process 00041 virtual void 00042 pack_module_data(BCP_buffer& buf, BCP_process_t ptype); 00043 //--------------------------------------------------------------------------- 00044 // unpack an MIP feasible solution 00045 virtual BCP_solution* 00046 unpack_feasible_solution(BCP_buffer& buf); 00047 //--------------------------------------------------------------------------- 00048 // setting the base 00049 virtual void 00050 initialize_core(BCP_vec<BCP_var_core*>& vars, 00051 BCP_vec<BCP_cut_core*>& cuts, 00052 BCP_lp_relax*& matrix); 00053 //--------------------------------------------------------------------------- 00054 // create the root node 00055 virtual void 00056 create_root(BCP_vec<BCP_var*>& added_vars, 00057 BCP_vec<BCP_cut*>& added_cuts, 00058 BCP_user_data*& user_data); 00059 //--------------------------------------------------------------------------- 00060 // feasible solution displaying 00061 virtual void 00062 display_feasible_solution(const BCP_solution* soln); 00063 //--------------------------------------------------------------------------- 00064 // various initializations before a new phase (e.g., pricing strategy) 00065 virtual void 00066 init_new_phase(int phase, 00067 BCP_column_generation& colgen, 00068 CoinSearchTreeBase*& candidates); 00069 }; 00070 00071 #endif