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;
Simple concrete class that implements a 1D algorithm to mimimize a 1D function.
const GoldenQuadInterpBracket< Scalar > & bracket() const
For unit testing only .
const Brents1DMinimization< Scalar > & brentsMin() const
For unit testing only .
RCP< const ParameterList > getValidParameters() const
virtual bool requiresBaseDeriv() const
Returns true.
virtual bool requiresDerivEvals() const
Returns false.
BrentsLineSearch()
Construct with default parameters.
void setParameterList(RCP< ParameterList > const ¶mList)
virtual bool doLineSearch(const MeritFunc1DBase< Scalar > &phi, const PointEval1D< Scalar > &point_k, const Ptr< PointEval1D< Scalar > > &point_kp1, const Ptr< int > &numIters) const
Simple concrete class that implements a 1D algorithm to bracket the minimum of a 1D merit function.
Base class for 1D merit fucntions used in globalization methods.
Represents the evaluation point of the merit function phi(alpha) and/or is derivative Dphi(alpha).
Scalar alpha
The value of the unknown alpha.
Scalar Dphi
The value of the derivative of the merit function Dphi(alpha).
Scalar phi
The value of the merit function phi(alpha).