44 #ifndef GLOBIPACK_BRENTS_LINE_SEARCH_DEF_HPP 45 #define GLOBIPACK_BRENTS_LINE_SEARCH_DEF_HPP 48 #include "GlobiPack_BrentsLineSearch_decl.hpp" 49 #include "Teuchos_TabularOutputter.hpp" 58 template<
typename Scalar>
63 template<
typename Scalar>
71 template<
typename Scalar>
82 template<
class Scalar>
84 RCP<ParameterList>
const& paramList
88 namespace BLSU = BrentsLineSearchUtils;
89 using Teuchos::sublist;
90 paramList->validateParametersAndSetDefaults(*this->getValidParameters());
91 bracket_.setParameterList(sublist(paramList, BLSU::bracket_name,
true));
92 brentsMin_.setParameterList(sublist(paramList, BLSU::minimize_name,
true));
93 setMyParamList(paramList);
97 template<
class Scalar>
98 RCP<const ParameterList>
101 namespace BLSU = BrentsLineSearchUtils;
102 static RCP<const ParameterList> validPL;
103 if (is_null(validPL)) {
104 RCP<Teuchos::ParameterList>
105 pl = Teuchos::rcp(
new Teuchos::ParameterList());
106 pl->sublist(BLSU::bracket_name).setParameters(
107 *bracket_.getValidParameters()
108 ).disableRecursiveValidation();
109 pl->sublist(BLSU::minimize_name).setParameters(
110 *brentsMin_.getValidParameters()
111 ).disableRecursiveValidation();
121 template<
typename Scalar>
128 template<
typename Scalar>
135 template<
typename Scalar>
140 const Ptr<int> &numIters
145 using Teuchos::OSTab;
146 using Teuchos::outArg;
147 using Teuchos::inOutArg;
150 typedef ScalarTraits<Scalar> ST;
153 TEUCHOS_ASSERT_EQUALITY(point_k.
alpha, ST::zero());
154 TEUCHOS_ASSERT_INEQUALITY(point_k.
phi, !=, PE1D::valNotGiven());
155 TEUCHOS_ASSERT_EQUALITY(point_k.
Dphi, PE1D::valNotGiven());
156 TEUCHOS_ASSERT(!is_null(point_kp1));
157 TEUCHOS_ASSERT_INEQUALITY(point_kp1->alpha, >, ST::zero());
158 TEUCHOS_ASSERT_INEQUALITY(point_kp1->phi, !=, PE1D::valNotGiven());
159 TEUCHOS_ASSERT_EQUALITY(point_kp1->Dphi, PE1D::valNotGiven());
162 const RCP<Teuchos::FancyOStream> out = this->getOStream();
163 bracket_.setOStream(out);
164 brentsMin_.setOStream(out);
166 *out <<
"\nStarting bracketing and brents 1D minimization linesearch ...\n";
170 int totalNumIters = 0;
180 int numBracketIters = -1;
182 const bool bracketSuccess = bracket_.bracketMinimum(
183 phi, inOutArg(p_l), inOutArg(p_m), outArg(p_u), outArg(numBracketIters) );
185 if (!bracketSuccess) success =
false;
187 totalNumIters += numBracketIters;
191 if (bracketSuccess) {
193 int numBrentsIters = -1;
195 const bool brentsSuccess = brentsMin_.approxMinimize(
196 phi, p_l, inOutArg(p_m), p_u, outArg(numBrentsIters) );
198 if (!brentsSuccess) success =
false;
200 totalNumIters += numBrentsIters;
206 if (!is_null(numIters))
207 *numIters = totalNumIters;
217 #endif // GLOBIPACK_BRENTS_LINE_SEARCH_DEF_HPP const Brents1DMinimization< Scalar > & brentsMin() const
For unit testing only .
Scalar phi
The value of the merit function phi(alpha).
void setParameterList(RCP< ParameterList > const ¶mList)
Scalar Dphi
The value of the derivative of the merit function Dphi(alpha).
Simple concrete class that implements a 1D algorithm to mimimize a 1D function.
Simple concrete class that implements a 1D algorithm to bracket the minimum of a 1D merit function...
const GoldenQuadInterpBracket< Scalar > & bracket() const
For unit testing only .
virtual bool requiresDerivEvals() const
Returns false.
RCP< const ParameterList > getValidParameters() const
Scalar alpha
The value of the unknown alpha.
Represents the evaluation point of the merit function phi(alpha) and/or is derivative Dphi(alpha)...
virtual bool requiresBaseDeriv() const
Returns true.
Base class for 1D merit fucntions used in globalization methods.
virtual bool doLineSearch(const MeritFunc1DBase< Scalar > &phi, const PointEval1D< Scalar > &point_k, const Ptr< PointEval1D< Scalar > > &point_kp1, const Ptr< int > &numIters) const
BrentsLineSearch()
Construct with default parameters.