ROL
function/test_11.cpp
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 #include "ROL_ColemanLiModel.hpp"
50 #include "ROL_HS2.hpp"
51 #include "ROL_StdVector.hpp"
52 #include "ROL_RandomVector.hpp"
53 #include "Teuchos_oblackholestream.hpp"
54 #include "Teuchos_GlobalMPISession.hpp"
55 //#include <fenv.h>
56 
57 typedef double RealT;
58 
59 int main(int argc, char *argv[]) {
60 // feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
61 
62  typedef ROL::Vector<RealT> V;
63  typedef ROL::Objective<RealT> OBJ;
64  typedef ROL::BoundConstraint<RealT> CON;
65  using Teuchos::RCP;
66 
67  Teuchos::GlobalMPISession mpiSession(&argc, &argv);
68 
69  // This little trick lets us print to std::cout only if a (dummy) command-line argument is provided.
70  int iprint = argc - 1;
71  Teuchos::RCP<std::ostream> outStream;
72  Teuchos::oblackholestream bhs; // outputs nothing
73  if (iprint > 0)
74  outStream = Teuchos::rcp(&std::cout, false);
75  else
76  outStream = Teuchos::rcp(&bhs, false);
77 
78  // Save the format state of the original std::cout.
79  Teuchos::oblackholestream oldFormatState;
80  oldFormatState.copyfmt(std::cout);
81 
82  RealT zero(0);
83 
84  RCP<V> x0;
85  RCP<V> x;
86  RCP<V> g;
87  RCP<OBJ> obj;
88  RCP<CON> con;
89  RCP<OBJ> model;
90 
91  ROL::ZOO::getHS2(obj,con,x0,x);
92 
93  g = x->dual().clone();
94 
95  // Need to evaluate the gradient to construct the model
96  obj->gradient(*g,*x,zero);
97 
98  model = Teuchos::rcp(new ROL::ColemanLiModel<RealT>(*obj,*con,*x,*g));
99 
100  RCP<V> s = x->clone();
101  RCP<V> v = x->clone();
102  RCP<V> u = x->clone();
103 
104  ROL::RandomizeVector(*s,-1.0,1.0);
105  ROL::RandomizeVector(*u,-1.0,1.0);
106  ROL::RandomizeVector(*v,-1.0,1.0);
107 
108  model->checkGradient(*s,*v);
109  model->checkHessVec(*s,*v);
110  model->checkHessSym(*s,*u,*v);
111 
112  return 0;
113 }
114 
115 
Provides the interface to evaluate objective functions.
void RandomizeVector(Vector< Real > &x, const Real &lower=0.0, const Real &upper=1.0)
Fill a ROL::Vector with uniformly-distributed random numbers in the interval [lower,upper].
Defines the linear algebra or vector space interface.
Definition: ROL_Vector.hpp:74
void getHS2(Teuchos::RCP< Objective< Real > > &obj, Teuchos::RCP< BoundConstraint< Real > > &con, Teuchos::RCP< Vector< Real > > &x0, Teuchos::RCP< Vector< Real > > &x)
Definition: ROL_HS2.hpp:148
Provides the interface to evaluate interior trust-region model functions from the Coleman-Li bound co...
Provides the interface to apply upper and lower bound constraints.
double RealT
double RealT
Contains definitions for W. Hock and K. Schittkowski 2nd test function.
int main(int argc, char *argv[])