SoPlex Doxygen Documentation
spxparmultpr.h
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of the class library */
4 /* SoPlex --- the Sequential object-oriented simPlex. */
5 /* */
6 /* Copyright (C) 1996-2012 Konrad-Zuse-Zentrum */
7 /* fuer Informationstechnik Berlin */
8 /* */
9 /* SoPlex is distributed under the terms of the ZIB Academic Licence. */
10 /* */
11 /* You should have received a copy of the ZIB Academic License */
12 /* along with SoPlex; see the file COPYING. If not email to soplex@zib.de. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file spxparmultpr.h
17  * @brief Partial multiple pricing.
18  */
19 #ifndef _SPXPARMULTPR_H_
20 #define _SPXPARMULTPR_H_
21 
22 #include <assert.h>
23 
24 #include "spxdefines.h"
25 #include "spxpricer.h"
26 #include "dataarray.h"
27 #include "array.h"
28 #include "ssvector.h"
29 
30 namespace soplex
31 {
32 
33 /**@brief Partial multiple pricing.
34  @ingroup Algo
35 
36  Class SPxParMultPr is an implementation class for SPxPricer implementing
37  Dantzig's default pricing strategy with partial multiple pricing.
38  Partial multiple pricing applies to the entering Simplex only. A set of
39  #partialSize eligible pivot indices is selected (partial pricing). In the
40  following Simplex iterations pricing is restricted to these indices
41  (multiple pricing) until no more eliiable pivots are available. Partial
42  multiple pricing significantly reduces the computation time for computing
43  the matrix-vector-product in the Simplex algorithm.
44 
45  See SPxPricer for a class documentation.
46 */
47 class SPxParMultPR : public SPxPricer
48 {
49 private:
50 
51  //-------------------------------------
52  /**@name Private types */
53  //@{
54  /// Helper structure.
56  {
57  ///
59  ///
61  };
62  //@}
63 
64  //-------------------------------------
65  /**@name Helper data */
66  //@{
67  ///
69  ///
71  ///
72  int used;
73  ///
74  int min;
75  ///
76  int last;
77  /// Set size for partial pricing.
78  static int partialSize;
79  //@}
80 
81 public:
82 
83  //-------------------------------------
84  /**@name Construction / destruction */
85  //@{
86  /// default constructor
88  : SPxPricer("ParMult")
89  {}
90  /// copy constructor
92  : SPxPricer(old)
93  , pricSet(old.pricSet)
94  , multiParts(old.multiParts)
95  , used(old.used)
96  , min(old.min)
97  , last(old.last)
98  {
100  }
101  /// assignment operator
103  {
104  if(this != &rhs)
105  {
107  pricSet = rhs.pricSet;
108  multiParts = rhs.multiParts;
109  used = rhs.used;
110  min = rhs.min;
111  last = rhs.last;
112  partialSize = rhs.partialSize;
113  }
114 
115  return *this;
116  }
117  /// destructor
118  virtual ~SPxParMultPR()
119  {}
120  /// clone function for polymorphism
121  inline virtual SPxPricer* clone() const
122  {
123  return new SPxParMultPR(*this);
124  }
125  //@}
126 
127  //-------------------------------------
128  /**@name Interface */
129  //@{
130  /// set the solver
131  virtual void load(SPxSolver* solver);
132  /// set entering or leaving algorithm
133  virtual void setType(SPxSolver::Type tp);
134  ///
135  virtual int selectLeave();
136  ///
137  virtual SPxId selectEnter();
138  //@}
139 
140 };
141 
142 
143 } // namespace soplex
144 #endif // _SPXPARMULTPRR_H_
145 
146 //-----------------------------------------------------------------------------
147 //Emacs Local Variables:
148 //Emacs mode:c++
149 //Emacs c-basic-offset:3
150 //Emacs tab-width:8
151 //Emacs indent-tabs-mode:nil
152 //Emacs End:
153 //-----------------------------------------------------------------------------