diff options
Diffstat (limited to 'build/Bonmin/include/coin/BonOaDecBase.hpp')
-rw-r--r-- | build/Bonmin/include/coin/BonOaDecBase.hpp | 297 |
1 files changed, 0 insertions, 297 deletions
diff --git a/build/Bonmin/include/coin/BonOaDecBase.hpp b/build/Bonmin/include/coin/BonOaDecBase.hpp deleted file mode 100644 index 61156f7..0000000 --- a/build/Bonmin/include/coin/BonOaDecBase.hpp +++ /dev/null @@ -1,297 +0,0 @@ -// (C) Copyright International Business Machines (IBM) 2006 -// All Rights Reserved. -// This code is published under the Eclipse Public License. -// -// Authors : -// P. Bonami, International Business Machines -// -// Date : 12/07/2006 -#ifndef BonOaDecBase_HPP -#define BonOaDecBase_HPP -#include "BonSubMipSolver.hpp" -#include "CglCutGenerator.hpp" -#include "BonBabSetupBase.hpp" -#include "BonOAMessages.hpp" -#include "CbcModel.hpp" - -#include "CbcStrategy.hpp" - -#include "CoinTime.hpp" -#include "OsiAuxInfo.hpp" -#include "OsiBranchingObject.hpp" -#include <iostream> -#include "BonBabInfos.hpp" -namespace Bonmin -{ - /** Base class for OA algorithms.*/ - class OaDecompositionBase : public CglCutGenerator - { - public: - - - /** Small class to manipulatee various things in an OsiSolverInterface and restore them. - The OsiSolverInterface manipulated may already exist or may be cloned from another one.*/ - class solverManip - { - public: - /** Constructor. */ - solverManip(OsiSolverInterface *si , bool saveNumRows=true, - bool saveBasis=true, bool saveBounds=false, - bool saveCutoff = false, bool resolve=true); - - /** Constructor which clone an other interface. */ - solverManip(const OsiSolverInterface & si); - /** Destructor. */ - ~solverManip(); - /** Restore solver. */ - void restore(); - - /** Get pointer to solver interface. */ - OsiSolverInterface * si() - { - return si_; - } - - /** Set objects.*/ - void setObjects(OsiObject ** objects, int nObjects) - { - objects_ = objects; - nObjects_ = nObjects; - } - - private: - /** Interface saved. */ - OsiSolverInterface * si_; - /** Initial number of rows (-1 if don't save). */ - int initialNumberRows_; - - /** Initial lower bounds. */ - double * colLower_; - - /** Initial Upper bounds.*/ - double * colUpper_; - - /** Inital basis. */ - CoinWarmStart * warm_; - - /** Initial cutoff. */ - double cutoff_; - - /** delete si_ ? */ - bool deleteSolver_; - - /// Some objects the feasiblitiy of which to verify. - OsiObject * * objects_; - /// Number of objects.*/ - int nObjects_; - /** \name Cached info from solver interface.*/ - /** @{ */ - /** Number of columns. */ - int numcols_; - /** Number of rows. */ - int numrows_; - /** Lower bounds on variables.*/ - const double * siColLower_; - /** Upper bounds on variables. */ - const double * siColUpper_; - - void getCached(); - /** @} */ - }; - - /// New usefull constructor - OaDecompositionBase(BabSetupBase &b, bool leaveSiUnchanged, - bool reassignLpsolver); - - /// Copy constructor - OaDecompositionBase(const OaDecompositionBase & copy); - - - /// Destructor - virtual ~OaDecompositionBase(); - - /** Standard cut generation methods. */ - virtual void generateCuts(const OsiSolverInterface &si, OsiCuts & cs, - const CglTreeInfo info = CglTreeInfo()); - - /// Assign an OsiTMINLPInterface - void assignNlpInterface(OsiTMINLPInterface * nlp) - { - nlp_ = nlp; - } - - /// Assign an OsiTMINLPInterface - void assignLpInterface(OsiSolverInterface * si) - { - lp_ = si; - } - - bool reassignLpsolver() - { - return reassignLpsolver_; - } - /** Set objects.*/ - void setObjects(OsiObject ** objects, int nObjects) - { - objects_ = objects; - nObjects_ = nObjects; - } - /// Set whether to leave the solverinterface unchanged - inline void setLeaveSiUnchanged(bool yesno) - { - leaveSiUnchanged_ = yesno; - } - - /** Parameters for algorithm. */ - struct Parameters - { - /// Add cuts as global - bool global_; - /// Add only violated OA inequalities - bool addOnlyViolated_; - /// cutoff min increase (has to be intialized trhough Cbc) - double cbcCutoffIncrement_; - /// integer tolerance (has to be the same as Cbc's) - double cbcIntegerTolerance_; - /** setting for gap tolerance.*/ - double gap_tol_; - ///Total max number of local searches - int maxLocalSearch_; - /// maximum time for local searches - double maxLocalSearchTime_; - /** sub milp log level.*/ - int subMilpLogLevel_; - /** maximum number of solutions*/ - int maxSols_; - /** Frequency of log. */ - double logFrequency_; - - - /** Constructor with default values */ - Parameters(); - - /** Copy constructor */ - Parameters(const Parameters & other); - - /** Destructor */ - ~Parameters() - { - if (strategy_) delete strategy_; - } - - /** Strategy to apply when using Cbc as MILP sub-solver.*/ - void setStrategy(const CbcStrategy & strategy) - { - if (strategy_) delete strategy_; - strategy_ = strategy.clone(); - } - - const CbcStrategy * strategy() const - { - return strategy_; - } - -private: - /** Strategy to apply when using Cbc as MILP sub-solver.*/ - CbcStrategy * strategy_; - - }; - - Parameters& parameter() - { - return parameters_; - } - - const Parameters& parameter()const - { - return parameters_; - } - - void setLogLevel(int level) - { - handler_->setLogLevel(level); - } - - void setReassignLpSolver(bool v){ - reassignLpsolver_ = v; - } - void passInMessageHandler(CoinMessageHandler * handler); - protected: - void setupMipSolver(BabSetupBase &b, const std::string &prefix); - /// \name Protected helper functions - /**@{ */ - - /** Solve the nlp and do output. - \return true if feasible*/ - bool post_nlp_solve(BabInfo * babInfo, double cutoff) const; - /** @} */ - - /// virtual method which performs the OA algorithm by modifying lp and nlp. - virtual double performOa(OsiCuts &cs, solverManip &lpManip, - BabInfo * babInfo, double &, const CglTreeInfo & info) const = 0; - /// virutal method to decide if local search is performed - virtual bool doLocalSearch(BabInfo * babInfo) const = 0; - - /// \name Protected members - /** @{ */ - /// Pointer to nlp interface - mutable OsiTMINLPInterface * nlp_; - /// Pointer to setup - BabSetupBase * s_; - ///Number of nlp solved done - mutable int nSolve_; - /// A linear solver - mutable OsiSolverInterface * lp_; - /// Some objects the feasiblitiy of which to verify. - OsiObject * * objects_; - /// Number of objects.*/ - int nObjects_; - ///number of local searches performed - mutable int nLocalSearch_; - /** messages handler. */ - CoinMessageHandler * handler_; - /** Messages for OA */ - CoinMessages messages_; - /** Wether or not we should remove cuts at the end of the procedure */ - bool leaveSiUnchanged_; - /** Do we need to reassign the lp solver with Cbc.*/ - bool reassignLpsolver_; - /** time of construction*/ - double timeBegin_; - /** number of solutions found by OA_decomposition.*/ - mutable int numSols_; - - /** Parameters.*/ - Parameters parameters_; - - /** Saved cuts: in some cases when using OA to check feasible solution algorithm may loop because Cbc removes inactive cuts. - To overcome this we can impose that no OA cut can be discarded by Cbc but this consumes too much memory in some cases. - Here we do it another way: cuts generated at current node are saved if algorithm seems to enter a loop we impose the needed cuts to be kept.*/ - mutable OsiCuts savedCuts_; - /** Store the current node number.*/ - mutable int currentNodeNumber_; - /** @} */ - -#ifdef OA_DEBUG - class OaDebug - { - public: - bool checkInteger(const OsiSolverInterface&nlp, std::ostream & os) const; - - void printEndOfProcedureDebugMessage(const OsiCuts &cs, - bool foundSolution, - double solValue, - double milpBound, - bool isInteger, - bool feasible, - std::ostream & os) const; - }; - - /** debug object. */ - OaDebug debug_; - -#endif - }; -} -#endif - |