22 #include "ROL_ParameterList.hpp"
25 #include "Teuchos_GlobalMPISession.hpp"
31 int main(
int argc,
char *argv[]) {
33 using namespace Teuchos;
35 typedef std::vector<RealT> vector;
39 GlobalMPISession mpiSession(&argc, &argv);
52 std::string paramfile =
"parameters.xml";
53 auto parlist = ROL::getParametersFromXmlFile( paramfile );
56 ROL::Ptr<ROL::Step<RealT>>
57 step = ROL::makePtr<ROL::TrustRegionStep<RealT>>(*parlist);
58 ROL::Ptr<ROL::StatusTest<RealT>>
59 status = ROL::makePtr<ROL::StatusTest<RealT>>(*parlist);
63 ROL::Ptr<vector> x_ptr = ROL::makePtr<vector>(
dim, 0.0);
66 ROL::Ptr<vector> k_ptr = ROL::makePtr<vector>(
dim, 0.0);
69 ROL::Ptr<vector> xtest_ptr = ROL::makePtr<vector>(
dim, 0.0);
70 ROL::Ptr<vector> d_ptr = ROL::makePtr<vector>(
dim, 0.0);
71 ROL::Ptr<vector> v_ptr = ROL::makePtr<vector>(
dim, 0.0);
72 ROL::Ptr<vector> hv_ptr = ROL::makePtr<vector>(
dim, 0.0);
73 ROL::Ptr<vector> ihhv_ptr = ROL::makePtr<vector>(
dim, 0.0);
76 RealT left = -1e0, right = 1e0;
77 for (
int i=0; i<
dim; i++) {
82 ROL::Ptr<V> k = ROL::makePtr<SV>(k_ptr);
98 obj.
checkGradient(xtest, d,
true, *outStream); *outStream <<
"\n";
99 obj.
checkHessVec(xtest, v,
true, *outStream); *outStream <<
"\n";
100 obj.
checkHessSym(xtest, d, v,
true, *outStream); *outStream <<
"\n";
107 *outStream <<
"Checking inverse Hessian" << std::endl;
108 *outStream <<
"||H^{-1}Hv-v|| = " << ihhv.norm() << std::endl;
112 algo.
run(x, obj,
true, *outStream);
115 ROL::Ptr<vector> xtrue_ptr = ROL::makePtr<vector>(
dim, 0.0);
121 RealT abserr = x.norm();
122 *outStream << std::scientific <<
"\n Absolute Error: " << abserr << std::endl;
123 if ( abserr > sqrt(ROL::ROL_EPSILON<RealT>()) ) {
127 catch (std::logic_error& err) {
128 *outStream << err.what() <<
"\n";
133 std::cout <<
"End Result: TEST FAILED\n";
135 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].
Ptr< std::ostream > makeStreamPtr(std::ostream &os, bool noSuppressOutput=true)
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...
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.