00001 #ifndef MCF1_lp_hpp
00002 #define MCF1_lp_hpp
00003
00004 #include "OsiSolverInterface.hpp"
00005 #include "BCP_buffer.hpp"
00006 #include "BCP_lp_user.hpp"
00007 #include "BCP_parameters.hpp"
00008 #include "MCF1_par.hpp"
00009 #include "MCF1_var.hpp"
00010 #include "MCF1_data.hpp"
00011
00012 class MCF1_lp : public BCP_lp_user
00013 {
00014 OsiSolverInterface* cg_lp;
00015 BCP_parameter_set<MCF1_par> par;
00016 MCF1_data data;
00017 std::vector<MCF1_branch_decision>* branch_history;
00018
00019 std::map<int,double>* flows;
00020
00021 BCP_vec<BCP_var*> gen_vars;
00022 bool generated_vars;
00023
00024 public:
00025 MCF1_lp() {}
00026 virtual ~MCF1_lp() {
00027 delete[] branch_history;
00028 delete[] flows;
00029 purge_ptr_vector(gen_vars);
00030 delete cg_lp;
00031 }
00032
00033 virtual void unpack_module_data(BCP_buffer& buf);
00034 virtual void pack_var_algo(const BCP_var_algo* var, BCP_buffer& buf) {
00035 MCF1_pack_var(var, buf);
00036 }
00037 virtual BCP_var_algo* unpack_var_algo(BCP_buffer& buf) {
00038 return MCF1_unpack_var(buf);
00039 }
00040
00041 virtual OsiSolverInterface* initialize_solver_interface();
00042
00043 virtual void
00044 initialize_new_search_tree_node(const BCP_vec<BCP_var*>& vars,
00045 const BCP_vec<BCP_cut*>& cuts,
00046 const BCP_vec<BCP_obj_status>& var_status,
00047 const BCP_vec<BCP_obj_status>& cut_status,
00048 BCP_vec<int>& var_changed_pos,
00049 BCP_vec<double>& var_new_bd,
00050 BCP_vec<int>& cut_changed_pos,
00051 BCP_vec<double>& cut_new_bd);
00052 virtual BCP_solution*
00053 test_feasibility(const BCP_lp_result& lp_result,
00054 const BCP_vec<BCP_var*>& vars,
00055 const BCP_vec<BCP_cut*>& cuts);
00056 virtual double
00057 compute_lower_bound(const double old_lower_bound,
00058 const BCP_lp_result& lpres,
00059 const BCP_vec<BCP_var*>& vars,
00060 const BCP_vec<BCP_cut*>& cuts);
00061 virtual void
00062 generate_vars_in_lp(const BCP_lp_result& lpres,
00063 const BCP_vec<BCP_var*>& vars,
00064 const BCP_vec<BCP_cut*>& cuts,
00065 const bool before_fathom,
00066 BCP_vec<BCP_var*>& new_vars,
00067 BCP_vec<BCP_col*>& new_cols);
00068 virtual void
00069 vars_to_cols(const BCP_vec<BCP_cut*>& cuts,
00070 BCP_vec<BCP_var*>& vars,
00071 BCP_vec<BCP_col*>& cols,
00072 const BCP_lp_result& lpres,
00073 BCP_object_origin origin, bool allow_multiple);
00074 virtual BCP_branching_decision
00075 select_branching_candidates(const BCP_lp_result& lpres,
00076 const BCP_vec<BCP_var*>& vars,
00077 const BCP_vec<BCP_cut*>& cuts,
00078 const BCP_lp_var_pool& local_var_pool,
00079 const BCP_lp_cut_pool& local_cut_pool,
00080 BCP_vec<BCP_lp_branching_object*>& cands);
00081 };
00082
00083 #endif