/home/coin/SVN-release/OS-2.1.1/OS/examples/branchCutPriceTSP/include/OS_lp.hpp

Go to the documentation of this file.
00001 // Last edit: 2/10/05
00002 //
00003 // Name:     OS_lp.hpp
00004 // Author:   Francois Margot
00005 //           Tepper School of Business
00006 //           Carnegie Mellon University, Pittsburgh, PA 15213
00007 //           email: fmargot@andrew.cmu.edu
00008 // Date:     12/28/03
00009 //-----------------------------------------------------------------------------
00010 // Copyright (C) 2003, Francois Margot, International Business Machines
00011 // Corporation and others.  All Rights Reserved.
00012 
00013 #ifndef _OS_LP_H
00014 #define _OS_LP_H
00015 
00016 
00017 #include "OS.hpp"
00018 #include "BCP_lp_user.hpp"
00019 #include "BCP_buffer.hpp"
00020 #include "BCP_parameters.hpp"
00021 #include "OS_var.hpp"
00022 #include "OS_user_data.hpp"
00023 #include "OS_packer.hpp"
00024 
00027 class OS_lp : public BCP_lp_user {
00028 
00029     OsiSolverInterface* cg_lp;
00030     //BCP_parameter_set<MCF1_par> par;
00031    // OS_user_data data;
00032 
00034   OS_prob *os_prob;     
00035 
00037   MY_user_data *p_ud;  
00038   
00040   int in_strong;       
00041 
00043   double EPS;          
00044 
00046   BCP_vec<BCP_cut*> algo_cuts;    
00047   
00049   BCP_vec<BCP_var*> algo_vars;   
00050   
00051 
00052  bool generated_vars; 
00053  bool generated_cuts; 
00054   
00055 
00057   std::vector<int> violated_cuts; 
00058 
00059 public:
00060 
00061 
00062 
00063 
00064 
00067 
00068   OS_lp(){}
00069   
00071   virtual ~OS_lp() {}
00073 
00076 
00077   virtual void unpack_module_data(BCP_buffer & buf);
00078 
00080  // virtual void pack_cut_algo(const BCP_cut_algo* cut, BCP_buffer& buf);
00081 
00083 //  virtual BCP_cut_algo* unpack_cut_algo(BCP_buffer& buf);
00084   
00085   
00086 //      virtual void pack_var_algo(const BCP_var_algo* var, BCP_buffer& buf) {
00087                 
00088 //              OS_pack_var(var, buf);
00089 //    }
00090         
00091  //   virtual BCP_var_algo* unpack_var_algo(BCP_buffer& buf) {
00092 //                      return OS_unpack_var(buf);
00093  //   } 
00094 
00096   //virtual void pack_user_data(const BCP_user_data* ud, BCP_buffer& buf);
00097 
00099   //virtual MY_user_data* unpack_user_data(BCP_buffer& buf);
00101 
00102   // Tell Bcp which solver to use and set parameters of solver.
00104   virtual OsiSolverInterface *initialize_solver_interface();
00105   
00107   virtual void initialize_new_search_tree_node(
00108                                  const BCP_vec<BCP_var*>& vars,
00109                                  const BCP_vec<BCP_cut*>& cuts,
00110                                  const BCP_vec<BCP_obj_status>& var_status,
00111                                  const BCP_vec<BCP_obj_status>& cut_status,
00112                                  BCP_vec<int>& var_changed_pos,
00113                                  BCP_vec<double>& var_new_bd,
00114                                  BCP_vec<int>& cut_changed_pos,
00115                                  BCP_vec<double>& cut_new_bd);
00116   
00120   virtual void modify_lp_parameters(OsiSolverInterface* lp, 
00121                                     bool in_strong_branching);
00122   
00127  // virtual BCP_solution* test_feasibility(const BCP_lp_result& lp_result,
00128 //                                       const BCP_vec<BCP_var*>& vars,
00129 //                                       const BCP_vec<BCP_cut*>& cuts);
00130   
00131 
00132   
00137 
00138 
00139   //virtual void generate_cuts_in_lp(const BCP_lp_result& lpres,
00140 //                    const BCP_vec<BCP_var*>& vars,
00141 //                    const BCP_vec<BCP_cut*>& cuts,
00142 //                    BCP_vec<BCP_cut*>& new_cuts,
00143 //                    BCP_vec<BCP_row*>& new_rows);
00144 
00145   
00146  virtual  void display_lp_solution(const BCP_lp_result& lpres,
00147                                  const BCP_vec<BCP_var*>& vars,
00148                                  const BCP_vec<BCP_cut*>& cuts,
00149                                  const bool final_lp_solution);
00150 
00152   virtual BCP_solution* generate_heuristic_solution(
00153                                const BCP_lp_result& lpres,
00154                                const BCP_vec<BCP_var*>& vars,
00155                                const BCP_vec<BCP_cut*>& cuts);
00156 
00160   virtual void
00161   cuts_to_rows(const BCP_vec<BCP_var*>& vars, // on what to expand
00162                BCP_vec<BCP_cut*>& cuts,       // what to expand
00163                BCP_vec<BCP_row*>& rows,       // the expanded rows
00164                const BCP_lp_result& lpres,
00165                BCP_object_origin origin, bool allow_multiple);
00166 
00173 
00174 
00175   virtual BCP_branching_decision
00176   select_branching_candidates(const BCP_lp_result& lpres,
00177                               const BCP_vec<BCP_var*>& vars,
00178                               const BCP_vec<BCP_cut*>& cuts,
00179                               const BCP_lp_var_pool& local_var_pool,
00180                               const BCP_lp_cut_pool& local_cut_pool,
00181                               BCP_vec<BCP_lp_branching_object*>& cands,
00182                               bool force_branch = false);
00183 
00186   virtual void set_user_data_for_children(BCP_presolved_lp_brobj* best, 
00187                                           const int selected);
00188                                           
00189 
00190 
00191 
00192 //      virtual double  compute_lower_bound(const double old_lower_bound,
00193 //              const BCP_lp_result& lpres, const BCP_vec<BCP_var*>& vars,
00194 //              const BCP_vec<BCP_cut*>& cuts);
00195                         
00196                         
00197 //      virtual void generate_vars_in_lp(const BCP_lp_result& lpres,
00198 //              const BCP_vec<BCP_var*>& vars, const BCP_vec<BCP_cut*>& cuts,
00199 //              const bool before_fathom, BCP_vec<BCP_var*>& new_vars,
00200 //              BCP_vec<BCP_col*>& new_cols);
00201                         
00202                         
00203  virtual void vars_to_cols(const BCP_vec<BCP_cut*>& cuts,
00204                  BCP_vec<BCP_var*>& vars, BCP_vec<BCP_col*>& cols,
00205                 const BCP_lp_result& lpres,
00206                 BCP_object_origin origin, bool allow_multiple);
00207     
00208     
00209     //===========================================================================
00236     virtual void process_lp_result(const BCP_lp_result& lpres,
00237                       const BCP_vec<BCP_var*>& vars,
00238                       const BCP_vec<BCP_cut*>& cuts,
00239                       const double old_lower_bound,
00240                       double& true_lower_bound, 
00241                       BCP_solution*& sol,
00242                       BCP_vec<BCP_cut*>& new_cuts,
00243                       BCP_vec<BCP_row*>& new_rows,
00244                       BCP_vec<BCP_var*>& new_vars,
00245                       BCP_vec<BCP_col*>& new_cols);
00246         
00247    void createcutsforbearcat(const BCP_lp_result& lpres,BCP_vec<BCP_cut*>& new_cuts, double tol1, double tol2, bool isInt);
00248 
00249         void createCglCuts(const BCP_lp_result& lpres,BCP_vec<BCP_cut*>& new_cuts);
00250                                                   
00251    bool isIntSolution(const double *x, const BCP_vec<BCP_var*>& vars, const double intTol);
00252 };
00253 
00254 #endif

Generated on Mon May 3 03:05:22 2010 by  doxygen 1.4.7