ConstrainedOptPack: C++ Tools for Constrained (and Unconstrained) Optimization  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ConstrainedOptPack_QPSolverRelaxedLOQO.hpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
5 // Copyright (2003) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #ifdef CONSTRAINED_OPTIMIZATION_PACK_USE_LOQO
43 
44 #ifndef QP_SOLVER_RELAXED_LOQO_H
45 #define QP_SOLVER_RELAXED_LOQO_H
46 
47 #include <vector>
48 
49 #include "ConstrainedOptPack_QPSolverRelaxed.hpp"
50 #include "DenseLinAlgPack_DVectorClass.hpp"
51 #include "DenseLinAlgPack_DMatrixClass.hpp"
54 
55 namespace ConstrainedOptPack {
56 
63 class QPSolverRelaxedLOQO : public QPSolverRelaxed
64 {
65 public:
66 
74  class InitLOQOHessianJacobian {
75  public:
76 
78  virtual ~InitLOQOHessianJacobian() {}
79 
118  virtual void init_hess_jacob(
119  const MatrixOp& G, const value_type bigM
120  , const MatrixOp* E, BLAS_Cpp::Transp trans_E, const DVectorSlice* b
121  , const int loqo_b_stat[], const size_type num_inequal
122  , const MatrixOp* F, BLAS_Cpp::Transp trans_F, const DVectorSlice* f
123  , void* loqo_lp
124  ) const;
125 
126  }; // end class InitLOQOHessianJacobian
127 
130  STANDARD_COMPOSITION_MEMBERS( InitLOQOHessianJacobian, init_hess_jacob );
131 
134  STANDARD_MEMBER_COMPOSITION_MEMBERS( value_type, bigM );
135 
139  STANDARD_MEMBER_COMPOSITION_MEMBERS( value_type, nonbinding_lag_mult );
140 
142  QPSolverRelaxedLOQO(
143  const init_hess_jacob_ptr_t init_hess_jacob = new InitLOQOHessianJacobian()
144  ,value_type bigM = 1e+10
145  ,value_type nonbinding_lag_mult = 1e-12
146  );
147 
149  ~QPSolverRelaxedLOQO();
150 
151  // /////////////////////////////////
152  // Overridden from QPSolverRelaxed
153 
155  QPSolverStats get_qp_stats() const;
156 
158  void release_memory();
159 
160 protected:
161 
162  // /////////////////////////////////
163  // Overridden from QPSolverRelaxed
164 
166  QPSolverStats::ESolutionType imp_solve_qp(
167  std::ostream* out, EOutputLevel olevel, ERunTests test_what
168  , const DVectorSlice& g, const MatrixOp& G
169  , value_type etaL
170  , const SpVectorSlice& dL, const SpVectorSlice& dU
171  , const MatrixOp* E, BLAS_Cpp::Transp trans_E, const DVectorSlice* b
172  , const SpVectorSlice* eL, const SpVectorSlice* eU
173  , const MatrixOp* F, BLAS_Cpp::Transp trans_F, const DVectorSlice* f
174  , value_type* obj_d
175  , value_type* eta, DVectorSlice* d
176  , SpVector* nu
177  , SpVector* mu, DVectorSlice* Ed
178  , DVectorSlice* lambda, DVectorSlice* Fd
179  );
180 
181 private:
182 
183  // //////////////////////////////////////////////////////////////
184  // Private types
185 
186  // //////////////////////////////////////////////////////////////
187  // Private Data Members.
188 
189  QPSolverStats qp_stats_;
190 
191  // ////////////////////////////
192  // Private member functions
193 
194 }; // end class QPSolverRelaxedLOQO
195 
196 } // end namespace ConstrainedOptimizationPackTypes
197 
198 #endif // QP_SOLVER_RELAXED_QPKWIK_H
199 
200 #endif // CONSTRAINED_OPTIMIZATION_PACK_USE_LOQO
#define STANDARD_COMPOSITION_MEMBERS(TYPE, NAME)
size_t size_type
#define STANDARD_MEMBER_COMPOSITION_MEMBERS(TYPE, NAME)
Transp
ESolutionType
Enumeration for the type of point returned from solve_qp(...).