summaryrefslogtreecommitdiff
path: root/build/Bonmin/include/coin/OsiCuts.hpp
diff options
context:
space:
mode:
authorHarpreet2016-09-03 00:34:27 +0530
committerHarpreet2016-09-03 00:34:27 +0530
commit4b64cf486f5c999fd8167758cae27839f3b50848 (patch)
treed9d06639fb7fa61aef59be0363655e4747105ec7 /build/Bonmin/include/coin/OsiCuts.hpp
parentd19794fb80a271a4c885ed90f97cfc12baa012f2 (diff)
downloadFOSSEE-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/OsiCuts.hpp')
-rw-r--r--build/Bonmin/include/coin/OsiCuts.hpp474
1 files changed, 0 insertions, 474 deletions
diff --git a/build/Bonmin/include/coin/OsiCuts.hpp b/build/Bonmin/include/coin/OsiCuts.hpp
deleted file mode 100644
index 5eea264..0000000
--- a/build/Bonmin/include/coin/OsiCuts.hpp
+++ /dev/null
@@ -1,474 +0,0 @@
-// Copyright (C) 2000, International Business Machines
-// Corporation and others. All Rights Reserved.
-// This code is licensed under the terms of the Eclipse Public License (EPL).
-
-#ifndef OsiCuts_H
-#define OsiCuts_H
-
-#include "CoinPragma.hpp"
-
-#include <cmath>
-#include <cfloat>
-#include "OsiCollections.hpp"
-#include "OsiRowCut.hpp"
-#include "OsiColCut.hpp"
-#include "CoinFloatEqual.hpp"
-
-/** Collections of row cuts and column cuts
-*/
-class OsiCuts {
- friend void OsiCutsUnitTest();
-
-public:
- /**@name Iterator classes
- */
- //@{
- /** Iterator
-
- This is a class for iterating over the collection of cuts.
- */
- class iterator {
- friend class OsiCuts;
- public:
- iterator(OsiCuts& cuts);
- iterator(const iterator & src);
- iterator & operator=( const iterator& rhs);
- ~iterator ();
- OsiCut* operator*() const { return cutP_; }
- iterator operator++();
-
- iterator operator++(int)
- {
- iterator temp = *this;
- ++*this;
- return temp;
- }
-
- bool operator==(const iterator& it) const {
- return (colCutIndex_+rowCutIndex_)==(it.colCutIndex_+it.rowCutIndex_);
- }
-
- bool operator!=(const iterator& it) const {
- return !((*this)==it);
- }
-
- bool operator<(const iterator& it) const {
- return (colCutIndex_+rowCutIndex_)<(it.colCutIndex_+it.rowCutIndex_);
- }
-
- private:
- iterator();
- // *THINK* : how to inline these without sticking the code here (ugly...)
- iterator begin();
- iterator end();
- OsiCuts& cuts_;
- int rowCutIndex_;
- int colCutIndex_;
- OsiCut * cutP_;
- };
-
- /** Const Iterator
-
- This is a class for iterating over the collection of cuts.
- */
- class const_iterator {
- friend class OsiCuts;
- public:
- typedef std::forward_iterator_tag iterator_category;
- typedef OsiCut* value_type;
- typedef size_t difference_type;
- typedef OsiCut ** pointer;
- typedef OsiCut *& reference;
-
- public:
- const_iterator(const OsiCuts& cuts);
- const_iterator(const const_iterator & src);
- const_iterator & operator=( const const_iterator& rhs);
- ~const_iterator ();
- const OsiCut* operator*() const { return cutP_; }
-
- const_iterator operator++();
-
- const_iterator operator++(int)
- {
- const_iterator temp = *this;
- ++*this;
- return temp;
- }
-
- bool operator==(const const_iterator& it) const {
- return (colCutIndex_+rowCutIndex_)==(it.colCutIndex_+it.rowCutIndex_);
- }
-
- bool operator!=(const const_iterator& it) const {
- return !((*this)==it);
- }
-
- bool operator<(const const_iterator& it) const {
- return (colCutIndex_+rowCutIndex_)<(it.colCutIndex_+it.rowCutIndex_);
- }
- private:
- inline const_iterator();
- // *THINK* : how to inline these without sticking the code here (ugly...)
- const_iterator begin();
- const_iterator end();
- const OsiCuts * cutsPtr_;
- int rowCutIndex_;
- int colCutIndex_;
- const OsiCut * cutP_;
- };
- //@}
-
- //-------------------------------------------------------------------
- //
- // Cuts class definition begins here:
- //
- //-------------------------------------------------------------------
-
- /** \name Inserting a cut into collection */
- //@{
- /** \brief Insert a row cut */
- inline void insert( const OsiRowCut & rc );
- /** \brief Insert a row cut unless it is a duplicate - cut may get sorted.
- Duplicate is defined as CoinAbsFltEq says same*/
- void insertIfNotDuplicate( OsiRowCut & rc , CoinAbsFltEq treatAsSame=CoinAbsFltEq(1.0e-12) );
- /** \brief Insert a row cut unless it is a duplicate - cut may get sorted.
- Duplicate is defined as CoinRelFltEq says same*/
- void insertIfNotDuplicate( OsiRowCut & rc , CoinRelFltEq treatAsSame );
- /** \brief Insert a column cut */
- inline void insert( const OsiColCut & cc );
-
- /** \brief Insert a row cut.
-
- The OsiCuts object takes control of the cut object.
- On return, \c rcPtr is NULL.
- */
- inline void insert( OsiRowCut * & rcPtr );
- /** \brief Insert a column cut.
-
- The OsiCuts object takes control of the cut object.
- On return \c ccPtr is NULL.
- */
- inline void insert( OsiColCut * & ccPtr );
-#if 0
- inline void insert( OsiCut * & cPtr );
-#endif
-
- /** \brief Insert a set of cuts */
- inline void insert(const OsiCuts & cs);
-
- //@}
-
- /**@name Number of cuts in collection */
- //@{
- /// Number of row cuts in collection
- inline int sizeRowCuts() const;
- /// Number of column cuts in collection
- inline int sizeColCuts() const;
- /// Number of cuts in collection
- inline int sizeCuts() const;
- //@}
-
- /**@name Debug stuff */
- //@{
- /// Print cuts in collection
- inline void printCuts() const;
- //@}
-
- /**@name Get a cut from collection */
- //@{
- /// Get pointer to i'th row cut
- inline OsiRowCut * rowCutPtr(int i);
- /// Get const pointer to i'th row cut
- inline const OsiRowCut * rowCutPtr(int i) const;
- /// Get pointer to i'th column cut
- inline OsiColCut * colCutPtr(int i);
- /// Get const pointer to i'th column cut
- inline const OsiColCut * colCutPtr(int i) const;
-
- /// Get reference to i'th row cut
- inline OsiRowCut & rowCut(int i);
- /// Get const reference to i'th row cut
- inline const OsiRowCut & rowCut(int i) const;
- /// Get reference to i'th column cut
- inline OsiColCut & colCut(int i);
- /// Get const reference to i'th column cut
- inline const OsiColCut & colCut(int i) const;
-
- /// Get const pointer to the most effective cut
- inline const OsiCut * mostEffectiveCutPtr() const;
- /// Get pointer to the most effective cut
- inline OsiCut * mostEffectiveCutPtr();
- //@}
-
- /**@name Deleting cut from collection */
- //@{
- /// Remove i'th row cut from collection
- inline void eraseRowCut(int i);
- /// Remove i'th column cut from collection
- inline void eraseColCut(int i);
- /// Get pointer to i'th row cut and remove ptr from collection
- inline OsiRowCut * rowCutPtrAndZap(int i);
- /*! \brief Clear all row cuts without deleting them
-
- Handy in case one wants to use CGL without managing cuts in one of
- the OSI containers. Client is ultimately responsible for deleting the
- data structures holding the row cuts.
- */
- inline void dumpCuts() ;
- /*! \brief Selective delete and clear for row cuts.
-
- Deletes the cuts specified in \p to_erase then clears remaining cuts
- without deleting them. A hybrid of eraseRowCut(int) and dumpCuts().
- Client is ultimately responsible for deleting the data structures
- for row cuts not specified in \p to_erase.
- */
- inline void eraseAndDumpCuts(const std::vector<int> to_erase) ;
- //@}
-
- /**@name Sorting collection */
- //@{
- /// Cuts with greatest effectiveness are first.
- inline void sort();
- //@}
-
-
- /**@name Iterators
- Example of using an iterator to sum effectiveness
- of all cuts in the collection.
- <pre>
- double sumEff=0.0;
- for ( OsiCuts::iterator it=cuts.begin(); it!=cuts.end(); ++it )
- sumEff+= (*it)->effectiveness();
- </pre>
- */
- //@{
- /// Get iterator to beginning of collection
- inline iterator begin() { iterator it(*this); it.begin(); return it; }
- /// Get const iterator to beginning of collection
- inline const_iterator begin() const { const_iterator it(*this); it.begin(); return it; }
- /// Get iterator to end of collection
- inline iterator end() { iterator it(*this); it.end(); return it; }
- /// Get const iterator to end of collection
- inline const_iterator end() const { const_iterator it(*this); it.end(); return it; }
- //@}
-
-
- /**@name Constructors and destructors */
- //@{
- /// Default constructor
- OsiCuts ();
-
- /// Copy constructor
- OsiCuts ( const OsiCuts &);
-
- /// Assignment operator
- OsiCuts & operator=( const OsiCuts& rhs);
-
- /// Destructor
- virtual ~OsiCuts ();
- //@}
-
-private:
- //*@name Function operator for sorting cuts by efectiveness */
- //@{
- class OsiCutCompare
- {
- public:
- /// Function for sorting cuts by effectiveness
- inline bool operator()(const OsiCut * c1P,const OsiCut * c2P)
- { return c1P->effectiveness() > c2P->effectiveness(); }
- };
- //@}
-
- /**@name Private methods */
- //@{
- /// Copy internal data
- void gutsOfCopy( const OsiCuts & source );
- /// Delete internal data
- void gutsOfDestructor();
- //@}
-
- /**@name Private member data */
- //@{
- /// Vector of row cuts pointers
- OsiVectorRowCutPtr rowCutPtrs_;
- /// Vector of column cuts pointers
- OsiVectorColCutPtr colCutPtrs_;
- //@}
-
-};
-
-
-//-------------------------------------------------------------------
-// insert cuts into collection
-//-------------------------------------------------------------------
-void OsiCuts::insert( const OsiRowCut & rc )
-{
- OsiRowCut * newCutPtr = rc.clone();
- //assert(dynamic_cast<OsiRowCut*>(newCutPtr) != NULL );
- rowCutPtrs_.push_back(static_cast<OsiRowCut*>(newCutPtr));
-}
-void OsiCuts::insert( const OsiColCut & cc )
-{
- OsiColCut * newCutPtr = cc.clone();
- //assert(dynamic_cast<OsiColCut*>(newCutPtr) != NULL );
- colCutPtrs_.push_back(static_cast<OsiColCut*>(newCutPtr));
-}
-
-void OsiCuts::insert( OsiRowCut* & rcPtr )
-{
- rowCutPtrs_.push_back(rcPtr);
- rcPtr = NULL;
-}
-void OsiCuts::insert( OsiColCut* &ccPtr )
-{
- colCutPtrs_.push_back(ccPtr);
- ccPtr = NULL;
-}
-#if 0
-void OsiCuts::insert( OsiCut* & cPtr )
-{
- OsiRowCut * rcPtr = dynamic_cast<OsiRowCut*>(cPtr);
- if ( rcPtr != NULL ) {
- insert( rcPtr );
- cPtr = rcPtr;
- }
- else {
- OsiColCut * ccPtr = dynamic_cast<OsiColCut*>(cPtr);
- assert( ccPtr != NULL );
- insert( ccPtr );
- cPtr = ccPtr;
- }
-}
-#endif
-
-// LANNEZ SEBASTIEN added Thu May 25 01:22:51 EDT 2006
-void OsiCuts::insert(const OsiCuts & cs)
-{
- for (OsiCuts::const_iterator it = cs.begin (); it != cs.end (); it++)
- {
- const OsiRowCut * rCut = dynamic_cast <const OsiRowCut * >(*it);
- const OsiColCut * cCut = dynamic_cast <const OsiColCut * >(*it);
- assert (rCut || cCut);
- if (rCut)
- insert (*rCut);
- else
- insert (*cCut);
- }
-}
-
-//-------------------------------------------------------------------
-// sort
-//-------------------------------------------------------------------
-void OsiCuts::sort()
-{
- std::sort(colCutPtrs_.begin(),colCutPtrs_.end(),OsiCutCompare());
- std::sort(rowCutPtrs_.begin(),rowCutPtrs_.end(),OsiCutCompare());
-}
-
-
-//-------------------------------------------------------------------
-// Get number of in collections
-//-------------------------------------------------------------------
-int OsiCuts::sizeRowCuts() const {
- return static_cast<int>(rowCutPtrs_.size()); }
-int OsiCuts::sizeColCuts() const {
- return static_cast<int>(colCutPtrs_.size()); }
-int OsiCuts::sizeCuts() const {
- return static_cast<int>(sizeRowCuts()+sizeColCuts()); }
-
-//----------------------------------------------------------------
-// Get i'th cut from the collection
-//----------------------------------------------------------------
-const OsiRowCut * OsiCuts::rowCutPtr(int i) const { return rowCutPtrs_[i]; }
-const OsiColCut * OsiCuts::colCutPtr(int i) const { return colCutPtrs_[i]; }
-OsiRowCut * OsiCuts::rowCutPtr(int i) { return rowCutPtrs_[i]; }
-OsiColCut * OsiCuts::colCutPtr(int i) { return colCutPtrs_[i]; }
-
-const OsiRowCut & OsiCuts::rowCut(int i) const { return *rowCutPtr(i); }
-const OsiColCut & OsiCuts::colCut(int i) const { return *colCutPtr(i); }
-OsiRowCut & OsiCuts::rowCut(int i) { return *rowCutPtr(i); }
-OsiColCut & OsiCuts::colCut(int i) { return *colCutPtr(i); }
-
-//----------------------------------------------------------------
-// Get most effective cut from collection
-//----------------------------------------------------------------
-const OsiCut * OsiCuts::mostEffectiveCutPtr() const
-{
- const_iterator b=begin();
- const_iterator e=end();
- return *(std::min_element(b,e,OsiCutCompare()));
-}
-OsiCut * OsiCuts::mostEffectiveCutPtr()
-{
- iterator b=begin();
- iterator e=end();
- //return *(std::min_element(b,e,OsiCutCompare()));
- OsiCut * retVal = NULL;
- double maxEff = COIN_DBL_MIN;
- for ( OsiCuts::iterator it=b; it!=e; ++it ) {
- if (maxEff < (*it)->effectiveness() ) {
- maxEff = (*it)->effectiveness();
- retVal = *it;
- }
- }
- return retVal;
-}
-
-//----------------------------------------------------------------
-// Print all cuts
-//----------------------------------------------------------------
-void
-OsiCuts::printCuts() const
-{
- // do all column cuts first
- int i;
- int numberColCuts=sizeColCuts();
- for (i=0;i<numberColCuts;i++) {
- const OsiColCut * cut = colCutPtr(i);
- cut->print();
- }
- int numberRowCuts=sizeRowCuts();
- for (i=0;i<numberRowCuts;i++) {
- const OsiRowCut * cut = rowCutPtr(i);
- cut->print();
- }
-}
-
-//----------------------------------------------------------------
-// Erase i'th cut from the collection
-//----------------------------------------------------------------
-void OsiCuts::eraseRowCut(int i)
-{
- delete rowCutPtrs_[i];
- rowCutPtrs_.erase( rowCutPtrs_.begin()+i );
-}
-void OsiCuts::eraseColCut(int i)
-{
- delete colCutPtrs_[i];
- colCutPtrs_.erase( colCutPtrs_.begin()+i );
-}
-/// Get pointer to i'th row cut and remove ptr from collection
-OsiRowCut *
-OsiCuts::rowCutPtrAndZap(int i)
-{
- OsiRowCut * cut = rowCutPtrs_[i];
- rowCutPtrs_[i]=NULL;
- rowCutPtrs_.erase( rowCutPtrs_.begin()+i );
- return cut;
-}
-void OsiCuts::dumpCuts()
-{
- rowCutPtrs_.clear() ;
-}
-void OsiCuts::eraseAndDumpCuts(const std::vector<int> to_erase)
-{
- for (unsigned i=0; i<to_erase.size(); i++) {
- delete rowCutPtrs_[to_erase[i]];
- }
- rowCutPtrs_.clear();
-}
-
-
-#endif