00001 #ifndef MCF2_lp_hpp
00002 #define MCF2_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 "MCF2_par.hpp"
00009 #include "MCF2_var.hpp"
00010 #include "MCF2_data.hpp"
00011
00012 class MCF2_lp : public BCP_lp_user
00013 {
00014 OsiSolverInterface* cg_lp;
00015 BCP_parameter_set<MCF2_par> par;
00016 MCF2_data data;
00017 std::vector<MCF2_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 MCF2_lp() {}
00026 virtual ~MCF2_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
00035 virtual OsiSolverInterface* initialize_solver_interface();
00036
00037 virtual void
00038 initialize_new_search_tree_node(const BCP_vec<BCP_var*>& vars,
00039 const BCP_vec<BCP_cut*>& cuts,
00040 const BCP_vec<BCP_obj_status>& var_status,
00041 const BCP_vec<BCP_obj_status>& cut_status,
00042 BCP_vec<int>& var_changed_pos,
00043 BCP_vec<double>& var_new_bd,
00044 BCP_vec<int>& cut_changed_pos,
00045 BCP_vec<double>& cut_new_bd);
00046 virtual BCP_solution*
00047 test_feasibility(const BCP_lp_result& lp_result,
00048 const BCP_vec<BCP_var*>& vars,
00049 const BCP_vec<BCP_cut*>& cuts);
00050 virtual double
00051 compute_lower_bound(const double old_lower_bound,
00052 const BCP_lp_result& lpres,
00053 const BCP_vec<BCP_var*>& vars,
00054 const BCP_vec<BCP_cut*>& cuts);
00055 virtual void
00056 generate_vars_in_lp(const BCP_lp_result& lpres,
00057 const BCP_vec<BCP_var*>& vars,
00058 const BCP_vec<BCP_cut*>& cuts,
00059 const bool before_fathom,
00060 BCP_vec<BCP_var*>& new_vars,
00061 BCP_vec<BCP_col*>& new_cols);
00062 virtual void
00063 vars_to_cols(const BCP_vec<BCP_cut*>& cuts,
00064 BCP_vec<BCP_var*>& vars,
00065 BCP_vec<BCP_col*>& cols,
00066 const BCP_lp_result& lpres,
00067 BCP_object_origin origin, bool allow_multiple);
00068 virtual BCP_branching_decision
00069 select_branching_candidates(const BCP_lp_result& lpres,
00070 const BCP_vec<BCP_var*>& vars,
00071 const BCP_vec<BCP_cut*>& cuts,
00072 const BCP_lp_var_pool& local_var_pool,
00073 const BCP_lp_cut_pool& local_cut_pool,
00074 BCP_vec<BCP_lp_branching_object*>& cands,
00075 bool force_branch = false);
00076 };
00077
00078 #endif