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 virtual void 00049 pack_var_algo(const BCP_var_algo* var, BCP_buffer& buf); 00050 //--------------------------------------------------------------------------- 00051 virtual BCP_var_algo* 00052 unpack_var_algo(BCP_buffer& buf); 00053 //--------------------------------------------------------------------------- 00054 // setting the base 00055 virtual void 00056 initialize_core(BCP_vec<BCP_var_core*>& vars, 00057 BCP_vec<BCP_cut_core*>& cuts, 00058 BCP_lp_relax*& matrix); 00059 //--------------------------------------------------------------------------- 00060 // create the root node 00061 virtual void 00062 create_root(BCP_vec<BCP_var*>& added_vars, 00063 BCP_vec<BCP_cut*>& added_cuts, 00064 BCP_user_data*& user_data, 00065 BCP_pricing_status& pricing_status); 00066 //--------------------------------------------------------------------------- 00067 // feasible solution displaying 00068 virtual void 00069 display_feasible_solution(const BCP_solution* soln); 00070 //--------------------------------------------------------------------------- 00071 // various initializations before a new phase (e.g., pricing strategy) 00072 virtual void 00073 init_new_phase(int phase, BCP_column_generation& colgen); 00074 }; 00075 00076 #endif