ROL
ROL_HS4.hpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Rapid Optimization Library (ROL) Package
5// Copyright (2014) 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 lead developers:
38// Drew Kouri (dpkouri@sandia.gov) and
39// Denis Ridzal (dridzal@sandia.gov)
40//
41// ************************************************************************
42// @HEADER
43
49#ifndef USE_HESSVEC
50#define USE_HESSVEC 1
51#endif
52
53#ifndef ROL_HS4_HPP
54#define ROL_HS4_HPP
55
56#include "ROL_StdVector.hpp"
57#include "ROL_TestProblem.hpp"
58#include "ROL_Bounds.hpp"
59#include "ROL_Types.hpp"
60
61namespace ROL {
62namespace ZOO {
63
66 template<class Real>
67 class Objective_HS4 : public Objective<Real> {
68
69 typedef std::vector<Real> vector;
70 typedef Vector<Real> V;
72
73 private:
74
75 ROL::Ptr<const vector> getVector( const V& x ) {
76
77 return dynamic_cast<const SV&>(x).getVector();
78 }
79
80 ROL::Ptr<vector> getVector( V& x ) {
81
82 return dynamic_cast<SV&>(x).getVector();
83 }
84
85 public:
87
88 Real value( const Vector<Real> &x, Real &tol ) {
89
90 ROL::Ptr<const vector> ex = getVector(x);
91
92 return 1.0/3.0 * std::pow((*ex)[0] + 1.0,3.0) + (*ex)[1];
93 }
94
95 void gradient( Vector<Real> &g, const Vector<Real> &x, Real &tol ) {
96
97 ROL::Ptr<const vector> ex = getVector(x);
98 ROL::Ptr<vector> eg = getVector(g);
99
100 (*eg)[0] = std::pow((*ex)[0] + 1.0,2.0);
101 (*eg)[1] = 1.0;
102 }
103#if USE_HESSVEC
104 void hessVec( Vector<Real> &hv, const Vector<Real> &v, const Vector<Real> &x, Real &tol ) {
105
106 ROL::Ptr<const vector> ex = getVector(x);
107 ROL::Ptr<const vector> ev = getVector(v);
108 ROL::Ptr<vector> ehv = getVector(hv);
109
110 Real alpha = 0.0;
111 (*ehv)[0] = 2.0*((*ex)[0] + 1.0)*(*ev)[0] + alpha*(*ev)[0];
112 (*ehv)[1] = 0.0 + alpha*(*ev)[1];
113 }
114#endif
115 };
116
117template<class Real>
118class getHS4 : public TestProblem<Real> {
119public:
120 getHS4(void) {}
121
122 Ptr<Objective<Real>> getObjective(void) const {
123 // Instantiate Objective Function
124 return ROL::makePtr<Objective_HS4<Real>>();
125 }
126
127 Ptr<Vector<Real>> getInitialGuess(void) const {
128 // Problem dimension
129 int n = 2;
130 // Get Initial Guess
131 ROL::Ptr<std::vector<Real> > x0p = ROL::makePtr<std::vector<Real>>(n,0.0);
132 (*x0p)[0] = 1.125; (*x0p)[1] = 0.125;
133 return ROL::makePtr<StdVector<Real>>(x0p);
134 }
135
136 Ptr<Vector<Real>> getSolution(const int i = 0) const {
137 // Problem dimension
138 int n = 2;
139 // Get Solution
140 ROL::Ptr<std::vector<Real> > xp = ROL::makePtr<std::vector<Real>>(n,0.0);
141 (*xp)[0] = 1.0; (*xp)[1] = 0.0;
142 return ROL::makePtr<StdVector<Real>>(xp);
143 }
144
145 Ptr<BoundConstraint<Real>> getBoundConstraint(void) const {
146 // Problem dimension
147 int n = 2;
148 // Instantiate BoundConstraint
149 ROL::Ptr<std::vector<Real> > lp = ROL::makePtr<std::vector<Real>>(n,0.0);
150 (*lp)[0] = 1.0; (*lp)[1] = 0.0;
151 ROL::Ptr<Vector<Real> > l = ROL::makePtr<StdVector<Real>>(lp);
152 ROL::Ptr<std::vector<Real> > up = ROL::makePtr<std::vector<Real>>(n,0.0);
153 (*up)[0] = ROL_INF<Real>(); (*up)[1] = ROL_INF<Real>();
154 ROL::Ptr<Vector<Real> > u = ROL::makePtr<StdVector<Real>>(up);
155 return ROL::makePtr<Bounds<Real>>(l,u);
156 }
157};
158
159} // End ZOO Namespace
160} // End ROL Namespace
161
162#endif
Contains definitions of test objective functions.
Contains definitions of custom data types in ROL.
Provides the interface to evaluate objective functions.
virtual void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Apply Hessian approximation to vector.
Provides the ROL::Vector interface for scalar values, to be used, for example, with scalar constraint...
Defines the linear algebra or vector space interface.
W. Hock and K. Schittkowski 4th test function.
Definition ROL_HS4.hpp:67
Vector< Real > V
Definition ROL_HS4.hpp:70
std::vector< Real > vector
Definition ROL_HS4.hpp:69
ROL::Ptr< vector > getVector(V &x)
Definition ROL_HS4.hpp:80
ROL::Ptr< const vector > getVector(const V &x)
Definition ROL_HS4.hpp:75
StdVector< Real > SV
Definition ROL_HS4.hpp:71
Real value(const Vector< Real > &x, Real &tol)
Compute value.
Definition ROL_HS4.hpp:88
void gradient(Vector< Real > &g, const Vector< Real > &x, Real &tol)
Compute gradient.
Definition ROL_HS4.hpp:95
Ptr< Objective< Real > > getObjective(void) const
Definition ROL_HS4.hpp:122
Ptr< Vector< Real > > getInitialGuess(void) const
Definition ROL_HS4.hpp:127
Ptr< Vector< Real > > getSolution(const int i=0) const
Definition ROL_HS4.hpp:136
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Definition ROL_HS4.hpp:145