diff options
author | Harpreet | 2016-09-03 00:34:27 +0530 |
---|---|---|
committer | Harpreet | 2016-09-03 00:34:27 +0530 |
commit | 4b64cf486f5c999fd8167758cae27839f3b50848 (patch) | |
tree | d9d06639fb7fa61aef59be0363655e4747105ec7 /build/Bonmin/include/coin/BonChooseVariable.hpp | |
parent | d19794fb80a271a4c885ed90f97cfc12baa012f2 (diff) | |
download | FOSSEE-Optim-toolbox-development-4b64cf486f5c999fd8167758cae27839f3b50848.tar.gz FOSSEE-Optim-toolbox-development-4b64cf486f5c999fd8167758cae27839f3b50848.tar.bz2 FOSSEE-Optim-toolbox-development-4b64cf486f5c999fd8167758cae27839f3b50848.zip |
Structure updated and intqpipopt files added
Diffstat (limited to 'build/Bonmin/include/coin/BonChooseVariable.hpp')
-rw-r--r-- | build/Bonmin/include/coin/BonChooseVariable.hpp | 345 |
1 files changed, 0 insertions, 345 deletions
diff --git a/build/Bonmin/include/coin/BonChooseVariable.hpp b/build/Bonmin/include/coin/BonChooseVariable.hpp deleted file mode 100644 index 82e7575..0000000 --- a/build/Bonmin/include/coin/BonChooseVariable.hpp +++ /dev/null @@ -1,345 +0,0 @@ -// Copyright (C) 2006, 2008 International Business Machines -// Corporation and others. All Rights Reserved. -#ifndef BonChooseVariable_H -#define BonChooseVariable_H - -#include "OsiChooseVariable.hpp" -#ifdef BONMIN_CURVATURE_BRANCHING -#include "BonCurvatureEstimator.hpp" -#endif -#include "BonOsiTMINLPInterface.hpp" -#include "CoinMessageHandler.hpp" -#include "BonBabSetupBase.hpp" -// Forward declaration -class CbcModel; - -#define OLD_USEFULLNESS - -namespace Bonmin -{ - - class HotInfo : public OsiHotInfo { - public: - /// Default constructor - HotInfo(); - - /// Constructor from usefull information - HotInfo( OsiSolverInterface * solver, - const OsiBranchingInformation *info, - const OsiObject * const * objects, int whichObject); - - /// Copy constructor - HotInfo(const HotInfo & other); - - /// Assignment operator - HotInfo & operator=(const HotInfo & rhs); - - /// Clone - virtual OsiHotInfo * clone() const; - - /// Destructor - virtual ~HotInfo(); - - /// Fill in some usefull information after a strong branching is done: - int updateInformation( const OsiSolverInterface * solver, const OsiBranchingInformation * info, - OsiChooseVariable * choose); - - /// up infeasibility - double upInfeasibility() const{ - return infeasibilities_[1]; - } - - /// down infeasibility - double downInfeasibility() const{ - return infeasibilities_[0]; - } - - - /// Set the down infeasibility - void setUpInfeasibility(double x){ - assert(branchingObject_->numberBranches()==2); - infeasibilities_[1] = x; - } - - /// Set the down infeasibility - void setDownInfeasibility(double x){ - assert(branchingObject_->numberBranches()==2); - infeasibilities_[0] = x; - } - private: - /// infeasibilities of children - vector<double> infeasibilities_; - }; - - /** This class chooses a variable to branch on - - This is the base class for the branching rules in Bonmin (inherits - from OsiChooseVariable). This class implements a simple strong branching algorithm where the changes in the objective - value induced by branching on a specific object are estimated with the pure virtual function fill_changes. - */ - - class BonChooseVariable : public OsiChooseVariable - { - protected: - /** This is a utility function which does strong branching on - a list of objects and stores the results in OsiHotInfo.objects. - On entry the object sequence is stored in the OsiHotInfo object - and maybe more. - It returns - - -1 - one branch was infeasible both ways - 0 - all inspected - nothing can be fixed - 1 - all inspected - some can be fixed (returnCriterion==0) - 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) - 3 - returning because max time - - */ - virtual int doStrongBranching( OsiSolverInterface * solver, - OsiBranchingInformation *info, - int numberToDo, int returnCriterion); -#ifndef OLD_USEFULLNESS - /** Criterion applied to sort candidates.*/ - enum CandidateSortCriterion { - DecrPs = 0, - IncrPs, - DecrInfeas, - IncrInfeas}; -#endif - - /** Statuses for strong branching candidates.*/ - enum StrongStatus{ - NotDone=-1, - Feasible/** Child is proven feasible.*/, - Infeasible /** Child is proven infeasible.*/, - NotFinished /** Child is not finished.*/}; - public: - /** \name Message handling.*/ - /** @{ */ - enum Messages_Types { - PS_COST_HISTORY = 0, - PS_COST_MULT, - PS_COST_ESTIMATES, - CANDIDATE_LIST, - CANDIDATE_LIST2, - CANDIDATE_LIST3, - SB_START, - SB_HEADER, - SB_RES, - BRANCH_VAR, - CHOSEN_VAR, - UPDATE_PS_COST, - BON_CHOOSE_MESSAGES_DUMMY_END - }; - - class Messages : public CoinMessages - { - public: - Messages(); - }; - - void passInMessageHandler(CoinMessageHandler * handler) { - int logLevel = handler_->logLevel(); - delete handler_; - handler_ = handler->clone(); - handler_->setLogLevel(logLevel); - } - - CoinMessageHandler& message(Messages_Types type) const { - return handler_->message(type, messages_); - } - /** @} */ - - - - enum DoStrongReturnStatuses{ - provenInfeasible = -1 /** One branch has two infeasible children.*/, - doneNoFixing /** All done no variable can be fixed.*/, - doneCanFix /** Several variable can be fixed.*/, - interuptedCanFix /** Interupted and found a variable to fix.*/, - maxTime /** Interupted because of time limit.*/}; - - /** Return statuses for chooseVariable.*/ - enum chooseVariableReturnStatuses{ - infeasibleNode = -1/** Node has been proven infeasible.*/, - hasCandidate /** Normal termination, found a variable to branch on.*/, - feasibleNode /** All variable are feasible, the node is feasible.*/, - canFixAndStrongBranch /** Found variable to fix and also has remaining candidate for strong branching.*/, - canFixAndBranch/** Found variable to fix and also has a (non-strong) branching candidate.*/, - canFixNoCandidate /** Can fix variables but does not have strong branching candidates.*/ - }; - /// Constructor from solver (so we can set up arrays etc) - BonChooseVariable (BabSetupBase& b, const OsiSolverInterface* solver); - - /// Copy constructor - BonChooseVariable (const BonChooseVariable &); - - /// Assignment operator - BonChooseVariable & operator= (const BonChooseVariable& rhs); - - /// Clone - virtual OsiChooseVariable * clone() const; - - /// Destructor - virtual ~BonChooseVariable (); - - static void registerOptions(Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions); - - /** Helper functions for setupList and chooseVariable */ - double maxminCrit(const OsiBranchingInformation* info) const; - void computeMultipliers(double& upMult, double& downMult) const; - double computeUsefulness(const double MAXMIN_CRITERION, - const double upMult, const double dowMult, - const double value, - const OsiObject* object, int i, - double& value2) const; - - /** Sets up strong list and clears all if initialize is true. - Returns number of infeasibilities. */ - virtual int setupList ( OsiBranchingInformation *info, bool initialize); - - /** Choose a variable - Returns - - -1 Node is infeasible - 0 Normal termination - we have a candidate - 1 All looks satisfied - no candidate - 2 We can change the bound on a variable - but we also have a strong branching candidate - 3 We can change the bound on a variable - but we have a non-strong branching candidate - 4 We can change the bound on a variable - no other candidates - We can pick up branch from bestObjectIndex() and bestWhichWay() - We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() - If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() - If fixVariables is true then 2,3,4 are all really same as problem changed - */ - virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables); - /** This is a utility function which does strong branching on - a list of objects and stores the results in OsiHotInfo.objects. - On entry the object sequence is stored in the OsiHotInfo object - and maybe more. - It returns - - -1 - one branch was infeasible both ways - 0 - all inspected - nothing can be fixed - 1 - all inspected - some can be fixed (returnCriterion==0) - 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) - 3 - returning because max time - - */ - - /// Given a candidate fill in useful information e.g. estimates - virtual void updateInformation(const OsiBranchingInformation *info, - int branch, OsiHotInfo * hotInfo); -#if 1 - /// Given a branch fill in useful information e.g. estimates - virtual void updateInformation( int whichObject, int branch, - double changeInObjective, double changeInValue, - int status); -#endif - - /** Method for setting CbcModel, which is used to get statusOfSearch */ - void setCbcModel(CbcModel* cbc_model) - { - cbc_model_ = cbc_model; - } - - void setOnlyPseudoWhenTrusted(bool only_pseudo_when_trusted) - { - only_pseudo_when_trusted_ = only_pseudo_when_trusted; - } - - - /** Access to pseudo costs storage.*/ - const OsiPseudoCosts & pseudoCosts() const{ - return pseudoCosts_;} - - /** Access to pseudo costs storage.*/ - OsiPseudoCosts & pseudoCosts() { - return pseudoCosts_;} - protected: - - /// Holding on the a pointer to the journalist - Ipopt::SmartPtr<Ipopt::Journalist> jnlst_; - - /// verbosity level - int bb_log_level_; - - /** Stores strong branching results.*/ - vector<HotInfo> results_; - - /** Determine status of strong branching solution.*/ - int determineStatus(OsiSolverInterface * solver) const { - if (solver->isProvenOptimal()) - return 0; // optimal - else if (solver->isIterationLimitReached() - &&!solver->isDualObjectiveLimitReached()) - return 2; // unknown - else - return 1; // infeasible - } - - private: - /** Default Constructor, forbiden for some reason.*/ - BonChooseVariable (); - - /** Global time limit for algorithm. */ - double time_limit_; - - /** Starting time of algorithm.*/ - double start_time_; - protected: - /// CbcModel, used to get status of search - CbcModel* cbc_model_; - - /** Flag indicating whether we don't want to mix strong branching - * and pseudo costs during the decision which variable to branch - * on */ - bool only_pseudo_when_trusted_; - - /** Number of variables put into the list because there were not - * trusted */ - int number_not_trusted_; - - /** Message handler.*/ - CoinMessageHandler * handler_; - - /** Messages.*/ - Messages messages_; - // ToDo: Make this options - /** @name Algoirithmic options */ - //@{ - /** maxmin weight in branching decision when no solution has been - * found yet */ - double maxmin_crit_no_sol_; - /** maxmin weight in branching decision when no solution has been - * found yet */ - double maxmin_crit_have_sol_; - /** fraction of branching candidates that are not trusted yet */ - double setup_pseudo_frac_; - /** number of times a branch has to happen so that it is trusted in - * setupList */ - int numberBeforeTrustedList_; - /** number of strong branching points at root node */ - int numberStrongRoot_; - /** backup of numberStrong_ before Root node solve */ - int numberStrongBackup_; - /** number of look-ahead strong-branching steps */ - int numberLookAhead_; -#ifndef OLD_USEFULLNESS - /** Criterion to use in setup list.*/ - CandidateSortCriterion sortCrit_; -#endif - /** Always strong branch that many first candidate in the list regardless of numberTrusted.*/ - int minNumberStrongBranch_; - /** Stores the pseudo costs. */ - OsiPseudoCosts pseudoCosts_; - /** Wether or not to trust strong branching results for updating pseudo costs.*/ - int trustStrongForPseudoCosts_; - - //@} - - /** detecting if this is root node */ - bool isRootNode(const OsiBranchingInformation *info) const; - - /** Stores the class name for throwing errors.*/ - static const std::string CNAME; - }; - -} -#endif |