56 #include "Teuchos_oblackholestream.hpp"
57 #include "Teuchos_GlobalMPISession.hpp"
64 int main(
int argc,
char *argv[]) {
66 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
69 int iprint = argc - 1;
70 Teuchos::RCP<std::ostream> outStream;
71 Teuchos::oblackholestream bhs;
73 outStream = Teuchos::rcp(&std::cout,
false);
75 outStream = Teuchos::rcp(&bhs,
false);
86 Teuchos::ParameterList parlist;
88 parlist.set(
"Trust-Region Subproblem Solver Type",
"Truncated CG");
90 parlist.set(
"Absolute Krylov Tolerance", 1.e-4);
91 parlist.set(
"Relative Krylov Tolerance", 1.e-2);
92 parlist.set(
"Maximum Number of Krylov Iterations", 50);
106 Teuchos::RCP<std::vector<RealT> > x_rcp = Teuchos::rcp(
new std::vector<RealT> (dim, 0.0) );
108 for (
int i=0; i<dim; i++) {
114 std::vector<std::string> output = algo.
run(x, obj,
false);
115 for (
unsigned i = 0; i < output.size(); i++ ) {
116 std::cout << output[i];
121 H = ROL::computeDenseHessian<RealT>(obj, x);
125 std::vector<std::vector<RealT> > eigenvals = ROL::computeEigenvalues<RealT>(H);
127 *outStream <<
"\nEigenvalues:\n";
128 for (
unsigned i=0; i<(eigenvals[0]).size(); i++) {
130 *outStream << std::right
131 << std::setw(28) <<
"Real"
132 << std::setw(28) <<
"Imag"
135 *outStream << std::scientific << std::setprecision(16) << std::right
136 << std::setw(28) << (eigenvals[0])[i]
137 << std::setw(28) << (eigenvals[1])[i]
144 std::vector<std::vector<RealT> > genEigenvals = ROL::computeGenEigenvalues<RealT>(H, M);
146 *outStream <<
"\nGeneralized eigenvalues:\n";
147 for (
unsigned i=0; i<(genEigenvals[0]).size(); i++) {
149 *outStream << std::right
150 << std::setw(28) <<
"Real"
151 << std::setw(28) <<
"Imag"
154 *outStream << std::scientific << std::setprecision(16) << std::right
155 << std::setw(28) << (genEigenvals[0])[i]
156 << std::setw(28) << (genEigenvals[1])[i]
161 std::sort((eigenvals[0]).begin(), (eigenvals[0]).end());
162 std::sort((eigenvals[1]).begin(), (eigenvals[1]).end());
163 std::sort((genEigenvals[0]).begin(), (genEigenvals[0]).end());
164 std::sort((genEigenvals[1]).begin(), (genEigenvals[1]).end());
167 for (
unsigned i=0; i<(eigenvals[0]).size(); i++) {
168 if ( std::abs( (genEigenvals[0])[i] - (eigenvals[0])[i] ) > errtol*((eigenvals[0])[i]+
ROL::ROL_THRESHOLD) ) {
170 *outStream << std::scientific << std::setprecision(20) <<
"Real genEigenvals - eigenvals (" << i <<
") = " << std::abs( (genEigenvals[0])[i] - (eigenvals[0])[i] ) <<
" > " << errtol*((eigenvals[0])[i]+1e4*
ROL::ROL_THRESHOLD) <<
"\n";
172 if ( std::abs( (genEigenvals[1])[i] - (eigenvals[1])[i] ) > errtol*((eigenvals[1])[i]+
ROL::ROL_THRESHOLD) ) {
174 *outStream << std::scientific << std::setprecision(20) <<
"Imag genEigenvals - eigenvals (" << i <<
") = " << std::abs( (genEigenvals[1])[i] - (eigenvals[1])[i] ) <<
" > " << errtol*((eigenvals[1])[i]+
ROL::ROL_THRESHOLD) <<
"\n";
179 Teuchos::SerialDenseMatrix<int, RealT> invH = ROL::computeInverse<RealT>(H);
180 Teuchos::SerialDenseMatrix<int, RealT> HinvH(H);
183 HinvH.multiply(Teuchos::NO_TRANS, Teuchos::NO_TRANS, 1.0, H, invH, 0.0);
186 if (HinvH.normOne() > errtol) {
188 *outStream << std::scientific << std::setprecision(20) <<
"1-norm of H*inv(H) - I = " << HinvH.normOne() <<
" > " << errtol <<
"\n";
192 parlist.set(
"Descent Type",
"Newton's Method");
199 for (
int i=0; i<dim; i++) {
204 output = newton_algo.
run(x, obj,
false);
205 for (
unsigned i = 0; i < output.size(); i++ ) {
206 std::cout << output[i];
209 Teuchos::RCP<const ROL::AlgorithmState<RealT> > new_state = newton_algo.
getState();
210 Teuchos::RCP<const ROL::AlgorithmState<RealT> > old_state = algo.
getState();
211 if ( std::abs(new_state->value - old_state->value) > errtol ) {
213 *outStream << std::scientific << std::setprecision(20) <<
"\nabs(new_optimal_value - old_optimal_value) = " << std::abs(new_state->value - old_state->value) <<
" > " << errtol <<
"\n";
217 catch (std::logic_error err) {
218 *outStream << err.what() <<
"\n";
223 std::cout <<
"End Result: TEST FAILED\n";
225 std::cout <<
"End Result: TEST PASSED\n";
Contains definitions of custom data types in ROL.
Teuchos::RCP< const AlgorithmState< Real > > getState(void) const
static const double ROL_THRESHOLD
Tolerance for various equality tests.
Provides the interface to compute optimization steps with line search.
Contains definitions for Poisson material inversion.
Provides the std::vector implementation of the ROL::Vector interface.
virtual std::vector< std::string > run(Vector< Real > &x, Objective< Real > &obj, bool print=false, std::ostream &outStream=std::cout)
Run algorithm on unconstrained problems (Type-U). This is the primary Type-U interface.
int main(int argc, char *argv[])
Provides an interface to check status of optimization algorithms.
int dimension() const
Return dimension of the vector space.
Teuchos::SerialDenseMatrix< int, Real > computeDotMatrix(const Vector< Real > &x)
Poisson material inversion.
Provides the interface to compute optimization steps with trust regions.
static const double ROL_EPSILON
Platform-dependent machine epsilon.