00001 /* $Id: CouenneTwoImplied.hpp 577 2011-05-21 20:38:48Z pbelotti $ 00002 * 00003 * Name: CouenneTwoImplied.hpp 00004 * Author: Pietro Belotti 00005 * Purpose: Bound Tightening using pairs of linear inequalities or equations 00006 * 00007 * (C) Pietro Belotti, 2010. 00008 * This file is licensed under the Eclipse Public License (EPL) 00009 */ 00010 00011 #ifndef COUENNETWOIMPLIED_HPP 00012 #define COUENNETWOIMPLIED_HPP 00013 00014 #include "BonRegisteredOptions.hpp" 00015 00016 #include "CglCutGenerator.hpp" 00017 #include "OsiRowCut.hpp" 00018 #include "CouenneJournalist.hpp" 00019 00020 namespace Ipopt { 00021 template <class T> class SmartPtr; 00022 class OptionsList; 00023 } 00024 00025 namespace Couenne { 00026 00027 class CouenneProblem; 00028 00173 class CouenneTwoImplied: public CglCutGenerator { 00174 00175 public: 00176 00178 CouenneTwoImplied (CouenneProblem *, 00179 JnlstPtr, 00180 const Ipopt::SmartPtr <Ipopt::OptionsList>); 00181 00183 CouenneTwoImplied (const CouenneTwoImplied &); 00184 00186 ~CouenneTwoImplied (); 00187 00189 CouenneTwoImplied *clone () const 00190 {return new CouenneTwoImplied (*this);} 00191 00193 void generateCuts (const OsiSolverInterface &, 00194 OsiCuts &, 00195 const CglTreeInfo = CglTreeInfo ()) const; 00196 00198 static void registerOptions (Ipopt::SmartPtr <Bonmin::RegisteredOptions> roptions); 00199 00200 protected: 00201 00203 CouenneProblem *problem_; 00204 00206 JnlstPtr jnlst_; 00207 00209 int nMaxTrials_; 00210 00212 mutable double totalTime_; 00213 00215 mutable double totalInitTime_; 00216 00218 mutable bool firstCall_; 00219 00221 int depthLevelling_; 00222 00224 int depthStopSeparate_; 00225 }; 00226 } 00227 00228 #endif