Scippy

SoPlex

Sequential object-oriented simPlex

spxgeometsc.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-2017 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 spxgeometsc.h
17  * @brief LP geometric mean scaling.
18  */
19 #ifndef _SPXGEOMETSC_H_
20 #define _SPXGEOMETSC_H_
21 
22 #include <assert.h>
23 
24 #include "spxdefines.h"
25 #include "spxscaler.h"
26 
27 namespace soplex
28 {
29 /**@brief Geometric mean row/column scaling.
30  @ingroup Algo
31 
32  This SPxScaler implementation performs geometric mean scaling of the
33  LPs rows and columns.
34 */
35 class SPxGeometSC : public SPxScaler
36 {
37 protected:
38 
39  //-------------------------------------
40  /**@name Data */
41  //@{
42  const bool postequilibration; ///< equilibrate after geometric scaling?
43  const int m_maxIterations; ///< maximum number of scaling iterations.
44  const Real m_minImprovement; ///< improvement necessary to carry on. (Bixby said Fourer said in MP 23, 274 ff. that 0.9 is a good value)
45  const Real m_goodEnoughRatio; ///< no scaling needed if ratio is less than this.
46  //@}
47 
48 public:
49 
50  //-------------------------------------
51  /**@name Construction / destruction */
52  //@{
53  /// default constructor (this scaler makes no use of inherited members m_colFirst and m_doBoth)
54  explicit SPxGeometSC(bool equilibrate = false, int maxIters = 8, Real minImpr = 0.85, Real goodEnough = 1e3);
55  /// copy constructor
56  SPxGeometSC(const SPxGeometSC& old);
57  /// assignment operator
59  /// destructor
60  virtual ~SPxGeometSC()
61  {}
62  /// clone function for polymorphism
63  inline virtual SPxScaler* clone() const override
64  {
65  return new SPxGeometSC(*this);
66  }
67  //@}
68 
69  //-------------------------------------
70  /**@name Scaling */
71  //@{
72  /// Scale the loaded SPxLP.
73  virtual void scale(SPxLPBase<Real>& lp, bool persistent = true) override;
74  //@}
75 
76 };
77 } // namespace soplex
78 #endif // _SPXGEOMETSC_H_
const Real m_goodEnoughRatio
no scaling needed if ratio is less than this.
Definition: spxgeometsc.h:45
const int m_maxIterations
maximum number of scaling iterations.
Definition: spxgeometsc.h:43
virtual void scale(SPxLPBase< Real > &lp, bool persistent=true) override
Scale the loaded SPxLP.
Geometric mean row/column scaling.This SPxScaler implementation performs geometric mean scaling of th...
Definition: spxgeometsc.h:35
virtual SPxScaler * clone() const override
clone function for polymorphism
Definition: spxgeometsc.h:63
double Real
Definition: spxdefines.h:218
SPxGeometSC & operator=(const SPxGeometSC &)
assignment operator
SPxGeometSC(bool equilibrate=false, int maxIters=8, Real minImpr=0.85, Real goodEnough=1e3)
default constructor (this scaler makes no use of inherited members m_colFirst and m_doBoth) ...
Definition: spxgeometsc.cpp:77
Debugging, floating point type and parameter definitions.
Everything should be within this namespace.
LP scaling base class.
LP scaler abstract base class.Instances of classes derived from SPxScaler may be loaded to SoPlex in ...
Definition: spxscaler.h:76
const bool postequilibration
equilibrate after geometric scaling?
Definition: spxgeometsc.h:42
const Real m_minImprovement
improvement necessary to carry on. (Bixby said Fourer said in MP 23, 274 ff. that 0...
Definition: spxgeometsc.h:44
virtual ~SPxGeometSC()
destructor
Definition: spxgeometsc.h:60