53#define ROL_VALIDATE( A ) A
55#define ROL_VALIDATE( A )
65#include <ROL_stacktrace.hpp>
69#include <ROL_config.h>
74#define ROL_NUM_CHECKDERIV_STEPS 13
83 std::ostringstream ss;
105 inline Real
ROL_INF(
void) {
return 0.1*ROL_OVERFLOW<Real>(); }
108 inline Real
ROL_NINF(
void) {
return -ROL_INF<Real>(); }
127 std::string retString;
132 case EXITSTATUS_NAN: retString =
"Step and/or Gradient Returned NaN";
break;
135 default: retString =
"INVALID EExitStatus";
163 gnorm(std::numeric_limits<Real>::max()),
164 cnorm(std::numeric_limits<Real>::max()),
165 snorm(std::numeric_limits<Real>::max()),
180 value = ROL_INF<Real>();
182 gnorm = ROL_INF<Real>();
183 cnorm = ROL_INF<Real>();
184 snorm = ROL_INF<Real>();
224 void reset(
const Real searchSizeInput = 1.0) {
245 return (c ==
' ' || c ==
'-' || c ==
'(' || c ==
')' || c==
'\'' || c==
'\r' || c==
'\n' || c==
'\t');
250 std::string output = s;
252 std::transform( output.begin(), output.end(), output.begin(), ::tolower );
290 std::string retString;
301 case STEP_LAST: retString =
"Last Type (Dummy)";
break;
302 default: retString =
"INVALID EStep";
335 default: comp =
false;
341 std::string retString;
343 case TYPE_U: retString =
"Type-U";
break;
344 case TYPE_E: retString =
"Type-E";
break;
345 case TYPE_B: retString =
"Type-B";
break;
346 case TYPE_EB: retString =
"Type-EB";
break;
347 case TYPE_LAST: retString =
"Type-Last (Dummy)";
break;
348 default: retString =
"Invalid EProblem";
372 return type =
static_cast<EStep>(type+1);
382 return type =
static_cast<EStep>(type-1);
421 std::string retString;
428 case DESCENT_LAST: retString =
"Last Type (Dummy)";
break;
429 default: retString =
"INVALID ESecant";
449 return type =
static_cast<EDescent>(type+1);
459 return type =
static_cast<EDescent>(type-1);
496 std::string retString;
498 case SECANT_LBFGS: retString =
"Limited-Memory BFGS";
break;
499 case SECANT_LDFP: retString =
"Limited-Memory DFP";
break;
500 case SECANT_LSR1: retString =
"Limited-Memory SR1";
break;
503 case SECANT_LAST: retString =
"Last Type (Dummy)";
break;
504 default: retString =
"INVALID ESecant";
524 return type =
static_cast<ESecant>(type+1);
534 return type =
static_cast<ESecant>(type-1);
581 std::string retString;
594 default: retString =
"INVALID ENonlinearCG";
671 std::string retString;
682 default: retString =
"INVALID ELineSearch";
752 std::string retString;
761 default: retString =
"INVALID ECurvatureCondition";
832 std::string retString;
835 retString =
"Residual tolerance met";
838 retString =
"Iteration limit exceeded";
841 retString =
"Negative curvature detected";
844 retString =
"Trust-Region radius exceeded";
847 retString =
"Initial right hand side is zero";
850 retString =
"INVALID ECGFlag";
858 namespace Finite_Difference_Arrays {
861 const int shifts[4][4] = { { 1, 0, 0, 0 },
868 const double weights[4][5] = { { -1.0, 1.0, 0.0, 0.0, 0.0 },
869 { 0.0, -1.0/2.0, 1.0/2.0, 0.0, 0.0 },
870 { -1.0/2.0, -1.0/3.0, 1.0, -1.0/6.0, 0.0 },
871 { 0.0, -2.0/3.0, 1.0/12.0, 2.0/3.0, -1.0/12.0 }
878template<
class Real,
class Element>
897 return static_cast<double>(val);
902template<
class Element,
class Real>
917 std::logic_error(what_arg) {}
923#if __cplusplus >= 201402L
925using std::enable_if_t;
929template<
bool B,
class T=
void>
NotImplemented(const std::string &what_arg)
typename std::enable_if< B, T >::type enable_if_t
const double weights[4][5]
int isValidLineSearch(ELineSearch ls)
Verifies validity of a LineSearch enum.
std::string EStepToString(EStep tr)
int isValidDescent(EDescent d)
Verifies validity of a Secant enum.
EDescent StringToEDescent(std::string s)
std::string NumberToString(T Number)
int isValidStep(EStep ls)
Verifies validity of a TrustRegion enum.
std::string removeStringFormat(std::string s)
Real ROL_EPSILON(void)
Platform-dependent machine epsilon.
@ NONLINEARCG_POLAK_RIBIERE
@ NONLINEARCG_HESTENES_STIEFEL
@ NONLINEARCG_OREN_LUENBERGER
@ NONLINEARCG_FLETCHER_REEVES
@ NONLINEARCG_HAGER_ZHANG
@ NONLINEARCG_FLETCHER_CONJDESC
@ NONLINEARCG_USERDEFINED
@ CURVATURECONDITION_GENERALIZEDWOLFE
@ CURVATURECONDITION_LAST
@ CURVATURECONDITION_APPROXIMATEWOLFE
@ CURVATURECONDITION_WOLFE
@ CURVATURECONDITION_NULL
@ CURVATURECONDITION_STRONGWOLFE
@ CURVATURECONDITION_GOLDSTEIN
ESecant StringToESecant(std::string s)
std::string EDescentToString(EDescent tr)
std::string ECurvatureConditionToString(ECurvatureCondition ls)
@ LINESEARCH_BACKTRACKING
@ LINESEARCH_GOLDENSECTION
@ LINESEARCH_PATHBASEDTARGETLEVEL
@ LINESEARCH_ITERATIONSCALING
int isValidCurvatureCondition(ECurvatureCondition ls)
Verifies validity of a CurvatureCondition enum.
bool isCompatibleStep(EProblem p, EStep s)
ENonlinearCG StringToENonlinearCG(std::string s)
std::string ELineSearchToString(ELineSearch ls)
EPolyProjAlgo & operator--(EPolyProjAlgo &type)
Real ROL_OVERFLOW(void)
Platform-dependent maximum double.
int isValidNonlinearCG(ENonlinearCG s)
Verifies validity of a NonlinearCG enum.
EPolyProjAlgo & operator++(EPolyProjAlgo &type)
std::string ESecantToString(ESecant tr)
std::string EExitStatusToString(EExitStatus tr)
@ STEP_PRIMALDUALACTIVESET
@ STEP_AUGMENTEDLAGRANGIAN
@ STEP_MOREAUYOSIDAPENALTY
std::string EProblemToString(EProblem p)
Real rol_cast(const Element &val)
std::string ECGFlagToString(ECGFlag cgf)
std::string ENonlinearCGToString(ENonlinearCG tr)
EStep StringToEStep(std::string s)
Real ROL_UNDERFLOW(void)
Platform-dependent minimum double.
ELineSearch StringToELineSearch(std::string s)
Real ROL_THRESHOLD(void)
Tolerance for various equality tests.
ECurvatureCondition StringToECurvatureCondition(std::string s)
EExitStatus
Enum for algorithm termination.
int isValidSecant(ESecant s)
Verifies validity of a Secant enum.
State for algorithm class. Will be used for restarts.
Real aggregateGradientNorm
virtual ~AlgorithmState()
ROL::Ptr< Vector< Real > > lagmultVec
ROL::Ptr< Vector< Real > > iterateVec
ROL::Ptr< Vector< Real > > minIterVec
State for step class. Will be used for restarts.
void reset(const Real searchSizeInput=1.0)
ROL::Ptr< Vector< Real > > constraintVec
ROL::Ptr< Vector< Real > > descentVec
ROL::Ptr< Vector< Real > > gradientVec
static Real ElementToReal(const std::complex< Real > &val)
static double ElementToReal(const float &val)
static Real ElementToReal(const Element &val)