00001 #ifndef MCF3_lp_hpp
00002 #define MCF3_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 "MCF3_par.hpp"
00009 #include "MCF3_var.hpp"
00010 #include "MCF3_data.hpp"
00011
00012 class MCF3_lp : public BCP_lp_user
00013 {
00014 OsiSolverInterface* cg_lp;
00015 BCP_parameter_set<MCF3_par> par;
00016 MCF3_data data;
00017 std::vector<MCF3_branch_decision>* branch_history;
00018 std::vector<MCF3_branch_decision>* new_branch;
00019 std::vector<int> commodities_with_candidate;
00020
00021
00022 std::map<int,double>* flows;
00023
00024 BCP_vec<BCP_var*> gen_vars;
00025 bool generated_vars;
00026
00027 public:
00028 MCF3_lp() {}
00029 virtual ~MCF3_lp() {
00030 delete[] flows;
00031 delete[] new_branch;
00032 purge_ptr_vector(gen_vars);
00033 delete cg_lp;
00034 }
00035
00036 virtual void unpack_module_data(BCP_buffer& buf);
00037
00038 virtual OsiSolverInterface* initialize_solver_interface();
00039
00040 virtual void
00041 initialize_new_search_tree_node(const BCP_vec<BCP_var*>& vars,
00042 const BCP_vec<BCP_cut*>& cuts,
00043 const BCP_vec<BCP_obj_status>& var_status,
00044 const BCP_vec<BCP_obj_status>& cut_status,
00045 BCP_vec<int>& var_changed_pos,
00046 BCP_vec<double>& var_new_bd,
00047 BCP_vec<int>& cut_changed_pos,
00048 BCP_vec<double>& cut_new_bd);
00049 virtual BCP_solution*
00050 test_feasibility(const BCP_lp_result& lp_result,
00051 const BCP_vec<BCP_var*>& vars,
00052 const BCP_vec<BCP_cut*>& cuts);
00053 virtual double
00054 compute_lower_bound(const double old_lower_bound,
00055 const BCP_lp_result& lpres,
00056 const BCP_vec<BCP_var*>& vars,
00057 const BCP_vec<BCP_cut*>& cuts);
00058 virtual void
00059 generate_vars_in_lp(const BCP_lp_result& lpres,
00060 const BCP_vec<BCP_var*>& vars,
00061 const BCP_vec<BCP_cut*>& cuts,
00062 const bool before_fathom,
00063 BCP_vec<BCP_var*>& new_vars,
00064 BCP_vec<BCP_col*>& new_cols);
00065 virtual void
00066 vars_to_cols(const BCP_vec<BCP_cut*>& cuts,
00067 BCP_vec<BCP_var*>& vars,
00068 BCP_vec<BCP_col*>& cols,
00069 const BCP_lp_result& lpres,
00070 BCP_object_origin origin, bool allow_multiple);
00071 virtual BCP_branching_decision
00072 select_branching_candidates(const BCP_lp_result& lpres,
00073 const BCP_vec<BCP_var*>& vars,
00074 const BCP_vec<BCP_cut*>& cuts,
00075 const BCP_lp_var_pool& local_var_pool,
00076 const BCP_lp_cut_pool& local_cut_pool,
00077 BCP_vec<BCP_lp_branching_object*>& cands,
00078 bool force_branch = false);
00079 virtual void
00080 set_user_data_for_children(BCP_presolved_lp_brobj* best,
00081 const int selected);
00082 };
00083
00084 #endif