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 class HeuristicInnerApproximation: public CbcHeuristic { 00021 public: 00022 00024 HeuristicInnerApproximation(BonminSetup * setup); 00025 00027 HeuristicInnerApproximation(const HeuristicInnerApproximation ©); 00028 00030 ~HeuristicInnerApproximation(); 00031 00033 HeuristicInnerApproximation & operator=( 00034 const HeuristicInnerApproximation & rhs); 00035 00037 virtual CbcHeuristic * clone() const { 00038 return new HeuristicInnerApproximation(*this); 00039 } 00040 00042 void Initialize(BonminSetup * setup); 00043 00045 virtual void resetModel(CbcModel * model) { 00046 setModel(model); 00047 } 00048 00050 virtual int solution(double &solutionValue, double *betterSolution); 00051 00053 static void registerOptions( 00054 Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions); 00055 00056 protected: 00058 BonminSetup * setup_; 00059 00060 private: 00062 int howOften_; 00063 00065 SubMipSolver * mip_; 00066 00068 int nbAp_; 00069 00070 void extractInnerApproximation(OsiTMINLPInterface & nlp, OsiSolverInterface &si, 00071 const double * x, bool getObj); 00072 00073 bool getMyInnerApproximation(OsiTMINLPInterface &si, OsiCuts &cs, int ind, 00074 const double * x, const double * x2); 00075 00076 00077 }; 00078 } 00079 00080 #endif