53 #define ROL_VALIDATE( A ) A 55 #define ROL_VALIDATE( A ) 63 #include <Teuchos_getConst.hpp> 64 #include <Teuchos_RCP.hpp> 65 #include <Teuchos_ScalarTraits.hpp> 66 #include <Teuchos_TestForException.hpp> 68 #include <ROL_config.h> 73 #define ROL_NUM_CHECKDERIV_STEPS 13 82 std::ostringstream ss;
108 AlgorithmState(
void) : iter(0), minIter(0), nfval(0), ngrad(0), value(0), minValue(0),
109 gnorm(std::numeric_limits<Real>::max()),
110 cnorm(std::numeric_limits<Real>::max()),
111 snorm(std::numeric_limits<Real>::max()),
112 aggregateGradientNorm(std::numeric_limits<Real>::max()),
113 aggregateModelError(std::numeric_limits<Real>::max()),
115 iterateVec(Teuchos::null), lagmultVec(Teuchos::null), minIterVec(Teuchos::null) {}
129 descentVec(Teuchos::null),
130 constraintVec(Teuchos::null),
139 inline Real
ROL_EPSILON(
void) {
return std::abs(Teuchos::ScalarTraits<Real>::eps()); }
151 inline Real
ROL_OVERFLOW(
void) {
return std::abs(Teuchos::ScalarTraits<Real>::rmax()); }
155 inline Real
ROL_INF(
void) {
return 0.1*ROL_OVERFLOW<Real>(); }
159 inline Real
ROL_NINF(
void) {
return -ROL_INF<Real>(); }
165 inline Real
ROL_UNDERFLOW(
void) {
return std::abs(Teuchos::ScalarTraits<Real>::rmin()); }
170 return (c ==
' ' || c ==
'-' || c ==
'(' || c ==
')' || c==
'\'' || c==
'\r' || c==
'\n' || c==
'\t');
175 std::string output = s;
177 std::transform( output.begin(), output.end(), output.begin(), ::tolower );
214 std::string retString;
224 case STEP_LAST: retString =
"Last Type (Dummy)";
break;
225 default: retString =
"INVALID EStep";
258 std::string retString;
260 case TYPE_U: retString =
"Type-U";
break;
261 case TYPE_E: retString =
"Type-E";
break;
262 case TYPE_B: retString =
"Type-B";
break;
263 case TYPE_EB: retString =
"Type-EB";
break;
264 case TYPE_LAST: retString =
"Type-Last (Dummy)";
break;
265 default: retString =
"Invalid EProblem";
288 return type =
static_cast<EStep>(type+1);
298 return type =
static_cast<EStep>(type-1);
332 std::string retString;
338 default: retString =
"INVALID EBoundAlgorithm";
405 std::string retString;
412 case DESCENT_LAST: retString =
"Last Type (Dummy)";
break;
413 default: retString =
"INVALID ESecant";
433 return type =
static_cast<EDescent>(type+1);
443 return type =
static_cast<EDescent>(type-1);
480 std::string retString;
482 case SECANT_LBFGS: retString =
"Limited-Memory BFGS";
break;
483 case SECANT_LDFP: retString =
"Limited-Memory DFP";
break;
484 case SECANT_LSR1: retString =
"Limited-Memory SR1";
break;
487 case SECANT_LAST: retString =
"Last Type (Dummy)";
break;
488 default: retString =
"INVALID ESecant";
508 return type =
static_cast<ESecant>(type+1);
518 return type =
static_cast<ESecant>(type-1);
552 std::string retString;
554 case KRYLOV_CG: retString =
"Conjugate Gradients";
break;
555 case KRYLOV_CR: retString =
"Conjugate Residuals";
break;
558 case KRYLOV_LAST: retString =
"Last Type (Dummy)";
break;
559 default: retString =
"INVALID EKrylov";
577 return type =
static_cast<EKrylov>(type+1);
587 return type =
static_cast<EKrylov>(type-1);
634 std::string retString;
647 default: retString =
"INVALID ENonlinearCG";
724 std::string retString;
735 default: retString =
"INVALID ELineSearch";
805 std::string retString;
814 default: retString =
"INVALID ECurvatureCondition";
885 std::string retString;
888 retString =
"Residual tolerance met";
891 retString =
"Iteration limit exceeded";
894 retString =
"Negative curvature detected";
897 retString =
"Trust-Region radius exceeded";
900 retString =
"Initial right hand side is zero";
903 retString =
"INVALID ECGFlag";
932 std::string retString;
944 default: retString =
"INVALID ETestObjectives";
1021 std::string retString;
1033 default: retString =
"INVALID ETestOptProblem";
1099 std::string retString;
1104 default: retString =
"INVALID EConstraint";
1150 namespace Finite_Difference_Arrays {
1160 const double weights[4][5] = { { -1.0, 1.0, 0.0, 0.0, 0.0 },
1161 { 0.0, -1.0/2.0, 1.0/2.0, 0.0, 0.0 },
1162 { -1.0/2.0, -1.0/3.0, 1.0, -1.0/6.0, 0.0 },
1163 { 0.0, -2.0/3.0, 1.0/12.0, 2.0/3.0, -1.0/12.0 }
1170 template<
class Real,
class Element>
1178 template<
class Real>
1189 return static_cast<double>(val);
1194 template<
class Element,
class Real>
1204 namespace Exception {
1209 Teuchos::ExceptionBase(what_arg) {}
std::string ECGFlagToString(ECGFlag cgf)
ETestOptProblem
Enumeration of test optimization problems.
int isValidKrylov(EKrylov d)
Verifies validity of a Secant enum.
EStep StringToEStep(std::string s)
static Real ElementToReal(const Element &val)
int isValidConstraint(EConstraint c)
Verifies validity of a Secant enum.
int isValidSecant(ESecant s)
Verifies validity of a Secant enum.
Real ROL_THRESHOLD(void)
Tolerance for various equality tests.
const double weights[4][5]
ELineSearch StringToELineSearch(std::string s)
EBoundAlgorithm StringToEBoundAlgorithm(std::string s)
EBoundAlgorithm
Enumeration of algorithms to handle bound constraints.
Real aggregateGradientNorm
int isValidBoundAlgorithm(EBoundAlgorithm d)
Verifies validity of a Bound Algorithm enum.
NotImplemented(const std::string &what_arg)
std::string removeStringFormat(std::string s)
ELineSearch
Enumeration of line-search types.
EConstraint StringToEConstraint(std::string s)
ESecant StringToESecant(std::string s)
std::string EDescentToString(EDescent tr)
int isValidTestOptProblem(ETestOptProblem to)
Verifies validity of a TestOptProblem enum.
static Real ElementToReal(const std::complex< Real > &val)
ECGFlag
Enumation of flags used by conjugate gradient methods.
Teuchos::RCP< Vector< Real > > descentVec
EKrylov
Enumeration of Krylov methods.
int isValidTestObjectives(ETestObjectives to)
Verifies validity of a TestObjectives enum.
EKrylov StringToEKrylov(std::string s)
EDescent StringToEDescent(std::string s)
State for algorithm class. Will be used for restarts.
std::string NumberToString(T Number)
ENonlinearCG
Enumeration of nonlinear CG algorithms.
ETestObjectives StringToETestObjectives(std::string s)
std::string ECurvatureConditionToString(ECurvatureCondition ls)
Real rol_cast(const Element &val)
std::string EConstraintToString(EConstraint c)
ESecant
Enumeration of secant update algorithms.
std::string ETestOptProblemToString(ETestOptProblem to)
std::string ENonlinearCGToString(ENonlinearCG tr)
ENonlinearCG StringToENonlinearCG(std::string s)
int isValidDescent(EDescent d)
Verifies validity of a Secant enum.
std::string ELineSearchToString(ELineSearch ls)
ETrustRegion & operator--(ETrustRegion &type)
Real ROL_OVERFLOW(void)
Platform-dependent maximum double.
int isValidLineSearch(ELineSearch ls)
Verifies validity of a LineSearch enum.
State for step class. Will be used for restarts.
std::string EProblemToString(EProblem p)
int isValidStep(EStep ls)
Verifies validity of a TrustRegion enum.
ETestObjectives
Enumeration of test objective functions.
Teuchos::RCP< Vector< Real > > minIterVec
std::string EKrylovToString(EKrylov tr)
static double ElementToReal(const float &val)
int isCompatibleStep(EProblem p, EStep s)
Teuchos::RCP< Vector< Real > > constraintVec
int isValidCurvatureCondition(ECurvatureCondition ls)
Verifies validity of a CurvatureCondition enum.
ECurvatureCondition
Enumeration of line-search curvature conditions.
std::string ETestObjectivesToString(ETestObjectives to)
Teuchos::RCP< Vector< Real > > lagmultVec
Teuchos::RCP< Vector< Real > > iterateVec
ECurvatureCondition StringToECurvatureCondition(std::string s)
Real ROL_EPSILON(void)
Platform-dependent machine epsilon.
ETrustRegion & operator++(ETrustRegion &type)
std::string ESecantToString(ESecant tr)
std::string EStepToString(EStep tr)
EStep
Enumeration of step types.
EConstraint
Enumeration of constraint types.
ETestOptProblem StringToETestOptProblem(std::string s)
Real ROL_UNDERFLOW(void)
Platform-dependent minimum double.
int isValidNonlinearCG(ENonlinearCG s)
Verifies validity of a NonlinearCG enum.
std::string EBoundAlgorithmToString(EBoundAlgorithm tr)
EDescent
Enumeration of descent direction types.
Teuchos::RCP< Vector< Real > > gradientVec