00001 // (C) Copyright CNRS and others 2010 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // Authors : 00006 // Pierre Bonami, Université de la Méditérannée 00007 // Hassan Hijazi, Orange Labs 00008 // 00009 // Date : 05/22/2010 00010 00011 #ifndef BonHeuristicInnerApproximation_HPP 00012 #define BonHeuristicInnerApproximation_HPP 00013 #include "BonOsiTMINLPInterface.hpp" 00014 #include "BonBonminSetup.hpp" 00015 #include "CbcHeuristic.hpp" 00016 #include "CbcStrategy.hpp" 00017 00018 namespace Bonmin { 00019 class SubMipSolver; 00020 } 00021 00022 namespace Sepa{ 00023 class HeuristicInnerApproximation: public CbcHeuristic { 00024 public: 00025 00027 HeuristicInnerApproximation(Bonmin::BonminSetup * setup); 00028 00030 HeuristicInnerApproximation(const HeuristicInnerApproximation ©); 00031 00033 ~HeuristicInnerApproximation(); 00034 00036 HeuristicInnerApproximation & operator=( 00037 const HeuristicInnerApproximation & rhs); 00038 00040 virtual CbcHeuristic * clone() const { 00041 return new HeuristicInnerApproximation(*this); 00042 } 00043 00045 void Initialize(Bonmin::BonminSetup * setup); 00046 00048 virtual void resetModel(CbcModel * model) { 00049 setModel(model); 00050 } 00051 00053 virtual int solution(double &solutionValue, double *betterSolution); 00054 00056 static void registerOptions( 00057 Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions); 00058 00059 protected: 00061 Bonmin::BonminSetup * setup_; 00062 00063 private: 00065 int howOften_; 00066 00068 Bonmin::SubMipSolver * mip_; 00069 00071 int nbAp_; 00072 00074 double time_limit_; 00075 00076 void extractInnerApproximation(Bonmin::OsiTMINLPInterface & nlp, OsiSolverInterface &si, 00077 const double * x, bool getObj); 00078 00079 bool getMyInnerApproximation(Bonmin::OsiTMINLPInterface &si, OsiCuts &cs, int ind, 00080 const double * x, const double * x2); 00081 00082 00083 }; 00084 } 00085 00086 #endif