Scippy

SoPlex

Sequential object-oriented simPlex

spxstarter.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-2023 Zuse Institute Berlin (ZIB) */
7 /* */
8 /* Licensed under the Apache License, Version 2.0 (the "License"); */
9 /* you may not use this file except in compliance with the License. */
10 /* You may obtain a copy of the License at */
11 /* */
12 /* http://www.apache.org/licenses/LICENSE-2.0 */
13 /* */
14 /* Unless required by applicable law or agreed to in writing, software */
15 /* distributed under the License is distributed on an "AS IS" BASIS, */
16 /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17 /* See the License for the specific language governing permissions and */
18 /* limitations under the License. */
19 /* */
20 /* You should have received a copy of the Apache-2.0 license */
21 /* along with SoPlex; see the file LICENSE. If not email to soplex@zib.de. */
22 /* */
23 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24 
25 
26 /**@file spxstarter.h
27  * @brief SoPlex start basis generation base class.
28  */
29 #ifndef _SPXDSTARTER_H_
30 #define _SPXDSTARTER_H_
31 
32 #include <assert.h>
33 
34 #include "soplex/spxdefines.h"
35 #include "soplex/spxsolver.h"
36 
37 namespace soplex
38 {
39 
40 /**@brief SoPlex start basis generation base class.
41  @ingroup Algo
42 
43  SPxStarter is the virtual base class for classes generating a starter basis
44  for the Simplex solver SoPlex. When a SPxStarter object has been loaded
45  to a SoPlex solver, the latter will call method #generate() in order to
46  have a start basis generated. Implementations of method #generate() must
47  terminate by \ref soplex::SPxSolver::load() "loading" the generated basis to
48  SoPlex. Loaded bases must be nonsingular.
49 */
50 template <class R>
51 class SPxStarter
52 {
53 protected:
54 
55  //-------------------------------------
56  /**@name Data */
57  ///@{
58  /// name of the starter
59  const char* m_name;
60  /// tolerances for the starter
61  std::shared_ptr<Tolerances> _tolerances;
62  ///@}
63 
64 public:
65 
66  //-------------------------------------
67  /**@name Data */
68  ///@{
69  /// constructor
70  explicit SPxStarter(const char* name)
71  : m_name(name)
72  {}
73  /// copy constructor
74  SPxStarter(const SPxStarter& old)
75  : m_name(old.m_name)
76  {}
77  /// assignment operator
79  {
80  if(this != &rhs)
81  {
82  m_name = rhs.m_name;
83  }
84 
85  return *this;
86  }
87  /// destructor.
88  virtual ~SPxStarter()
89  {
90  m_name = 0;
91  }
92  /// clone function for polymorphism
93  virtual SPxStarter* clone()const = 0;
94  ///@}
95 
96  //-------------------------------------
97  /**@name Access */
98  ///@{
99  /// get name of starter.
100  virtual const char* getName() const
101  {
102  return m_name;
103  }
104  ///@}
105 
106  //-------------------------------------
107  /**@name Starting */
108  ///@{
109  /// generates start basis for loaded basis.
110  virtual void generate(SPxSolverBase<R>& base) = 0;
111  ///@}
112 
113  /// set the tolerances to be used by the starter
114  virtual void setTolerances(const std::shared_ptr<Tolerances>& tolerances)
115  {
116  _tolerances = tolerances;
117  }
118  /// get the toelrances used by the starter
119  virtual const std::shared_ptr<Tolerances>& tolerances() const
120  {
121  return _tolerances;
122  }
123 
124  //-------------------------------------
125  /**@name Misc */
126  ///@{
127  /// checks consistency.
128  virtual bool isConsistent() const;
129  ///@}
130 
131 private:
132 
133  //------------------------------------
134  /**@name Blocked */
135  ///@{
136  /// we have no default constructor.
137  SPxStarter();
138  ///@}
139 
140 };
141 } // namespace soplex
142 
143 // For general templated functions
144 #include "spxstarter.hpp"
145 
146 #endif // _SPXDSTARTER_H_
SPxStarter()
we have no default constructor.
virtual void setTolerances(const std::shared_ptr< Tolerances > &tolerances)
set the tolerances to be used by the starter
Definition: spxstarter.h:114
Sequential object-oriented SimPlex.SPxSolverBase is an LP solver class using the revised Simplex algo...
Definition: spxbasis.h:58
virtual SPxStarter * clone() const =0
clone function for polymorphism
SoPlex start basis generation base class.SPxStarter is the virtual base class for classes generating ...
Definition: spxsolver.h:68
const char * m_name
name of the starter
Definition: spxstarter.h:59
SPxStarter & operator=(const SPxStarter &rhs)
assignment operator
Definition: spxstarter.h:78
virtual void generate(SPxSolverBase< R > &base)=0
generates start basis for loaded basis.
virtual const std::shared_ptr< Tolerances > & tolerances() const
get the toelrances used by the starter
Definition: spxstarter.h:119
main LP solver class
virtual ~SPxStarter()
destructor.
Definition: spxstarter.h:88
Debugging, floating point type and parameter definitions.
Everything should be within this namespace.
SPxStarter(const SPxStarter &old)
copy constructor
Definition: spxstarter.h:74
std::shared_ptr< Tolerances > _tolerances
tolerances for the starter
Definition: spxstarter.h:61
virtual bool isConsistent() const
checks consistency.
virtual const char * getName() const
get name of starter.
Definition: spxstarter.h:100
SPxStarter(const char *name)
constructor
Definition: spxstarter.h:70