56 #include "ROL_ParameterList.hpp"
59 #include "Teuchos_GlobalMPISession.hpp"
65 int main(
int argc,
char *argv[]) {
67 using namespace Teuchos;
69 typedef std::vector<RealT> vector;
73 GlobalMPISession mpiSession(&argc, &argv);
86 std::string paramfile =
"parameters.xml";
87 auto parlist = ROL::getParametersFromXmlFile( paramfile );
93 ROL::Ptr<vector> x_ptr = ROL::makePtr<vector>(dim, 0.0);
96 ROL::Ptr<vector> k_ptr = ROL::makePtr<vector>(dim, 0.0);
99 ROL::Ptr<vector> xtest_ptr = ROL::makePtr<vector>(dim, 0.0);
100 ROL::Ptr<vector> d_ptr = ROL::makePtr<vector>(dim, 0.0);
101 ROL::Ptr<vector> v_ptr = ROL::makePtr<vector>(dim, 0.0);
102 ROL::Ptr<vector> hv_ptr = ROL::makePtr<vector>(dim, 0.0);
103 ROL::Ptr<vector> ihhv_ptr = ROL::makePtr<vector>(dim, 0.0);
106 RealT left = -1e0, right = 1e0;
107 for (
int i=0; i<dim; i++) {
112 ROL::Ptr<V> k = ROL::makePtr<SV>(k_ptr);
128 obj.
checkGradient(xtest, d,
true, *outStream); *outStream <<
"\n";
129 obj.
checkHessVec(xtest, v,
true, *outStream); *outStream <<
"\n";
130 obj.
checkHessSym(xtest, d, v,
true, *outStream); *outStream <<
"\n";
137 *outStream <<
"Checking inverse Hessian" << std::endl;
138 *outStream <<
"||H^{-1}Hv-v|| = " << ihhv.norm() << std::endl;
142 algo.
run(x, obj,
true, *outStream);
145 ROL::Ptr<vector> xtrue_ptr = ROL::makePtr<vector>(dim, 0.0);
151 RealT abserr = x.norm();
152 *outStream << std::scientific <<
"\n Absolute Error: " << abserr << std::endl;
153 if ( abserr > sqrt(ROL::ROL_EPSILON<RealT>()) ) {
157 catch (std::logic_error err) {
158 *outStream << err.what() <<
"\n";
163 std::cout <<
"End Result: TEST FAILED\n";
165 std::cout <<
"End Result: TEST PASSED\n";
void invHessVec(Vector< Real > &ihv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Apply inverse Hessian approximation to vector.
virtual void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Apply Hessian approximation to vector.
virtual std::vector< std::string > run(Vector< Real > &x, Objective< Real > &obj, bool print=false, std::ostream &outStream=std::cout, bool printVectors=false, std::ostream &vectorStream=std::cout)
Run algorithm on unconstrained problems (Type-U). This is the primary Type-U interface.
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.
Defines a no-output stream class ROL::NullStream and a function makeStreamPtr which either wraps a re...
Ptr< ostream > makeStreamPtr(ostream &os, bool noSuppressOutput=true)
virtual std::vector< std::vector< Real > > checkGradient(const Vector< Real > &x, const Vector< Real > &d, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
Finite-difference gradient check.
Provides the ROL::Vector interface for scalar values, to be used, for example, with scalar constraint...
Provides an interface to run optimization algorithms.
Contains definitions for the Zakharov function as evaluated using only the ROL::Vector interface...
int main(int argc, char *argv[])
virtual std::vector< std::vector< Real > > checkHessVec(const Vector< Real > &x, const Vector< Real > &v, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
Finite-difference Hessian-applied-to-vector check.
virtual std::vector< Real > checkHessSym(const Vector< Real > &x, const Vector< Real > &v, const Vector< Real > &w, const bool printToStream=true, std::ostream &outStream=std::cout)
Hessian symmetry check.