ROL
src
status
ROL_FletcherStatusTest.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ************************************************************************
3
//
4
// Rapid Optimization Library (ROL) Package
5
// Copyright (2014) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact lead developers:
38
// Drew Kouri (dpkouri@sandia.gov) and
39
// Denis Ridzal (dridzal@sandia.gov)
40
//
41
// ************************************************************************
42
// @HEADER
43
44
#ifndef ROL_FletcherStatusTest_H
45
#define ROL_FletcherStatusTest_H
46
47
#include "
ROL_StatusTest.hpp
"
48
55
namespace
ROL
{
56
57
template
<
class
Real>
58
class
FletcherStatusTest
:
public
StatusTest
<Real> {
59
private
:
60
61
Real
gtol_
;
62
Real
ctol_
;
63
Real
stol_
;
64
int
max_iter_
;
65
66
public
:
67
68
virtual
~FletcherStatusTest
() {}
69
70
FletcherStatusTest
( ROL::ParameterList &parlist ) {
71
Real em6(1e-6);
72
gtol_
= parlist.sublist(
"Status Test"
).get(
"Gradient Tolerance"
, em6);
73
ctol_
= parlist.sublist(
"Status Test"
).get(
"Constraint Tolerance"
, em6);
74
stol_
= parlist.sublist(
"Status Test"
).get(
"Step Tolerance"
, em6*
gtol_
);
75
max_iter_
= parlist.sublist(
"Status Test"
).get(
"Iteration Limit"
, 100);
76
}
77
78
FletcherStatusTest
( Real gtol = 1e-6, Real ctol = 1e-6, Real stol = 1e-12,
int
max_iter = 100 ) :
79
gtol_
(gtol),
ctol_
(ctol),
stol_
(stol),
max_iter_
(max_iter) {}
80
83
virtual
bool
check
(
AlgorithmState<Real>
&state ) {
84
if
( ((state.
gnorm
>
gtol_
) || (state.
cnorm
>
ctol_
)) &&
85
(state.
snorm
>
stol_
) && (state.
aggregateGradientNorm
>
gtol_
) &&
86
(state.
iter
<
max_iter_
) && (!state.
flag
)) {
87
return
true
;
88
}
89
else
{
90
state.
statusFlag
= ((state.
gnorm
<=
gtol_
) && (state.
cnorm
<=
ctol_
) ?
EXITSTATUS_CONVERGED
91
: state.
snorm
<=
stol_
?
EXITSTATUS_STEPTOL
92
: state.
aggregateGradientNorm
<=
gtol_
?
EXITSTATUS_CONVERGED
93
: state.
iter
>=
max_iter_
?
EXITSTATUS_MAXITER
94
: state.
flag
==
true
?
EXITSTATUS_CONVERGED
95
:
EXITSTATUS_LAST
);
96
return
false
;
97
}
98
}
99
100
};
// class FletcherStatusTest
101
102
}
// namespace ROL
103
104
#endif
105
ROL::AlgorithmState::snorm
Real snorm
Definition:
ROL_Types.hpp:153
ROL::FletcherStatusTest::~FletcherStatusTest
virtual ~FletcherStatusTest()
Definition:
ROL_FletcherStatusTest.hpp:68
ROL::AlgorithmState::statusFlag
EExitStatus statusFlag
Definition:
ROL_Types.hpp:160
ROL::AlgorithmState
State for algorithm class. Will be used for restarts.
Definition:
ROL_Types.hpp:143
ROL::FletcherStatusTest
Provides an interface to check status of optimization algorithms for problems with equality constrain...
Definition:
ROL_FletcherStatusTest.hpp:58
ROL::AlgorithmState::iter
int iter
Definition:
ROL_Types.hpp:144
ROL::FletcherStatusTest::ctol_
Real ctol_
Definition:
ROL_FletcherStatusTest.hpp:62
ROL::FletcherStatusTest::stol_
Real stol_
Definition:
ROL_FletcherStatusTest.hpp:63
ROL::FletcherStatusTest::max_iter_
int max_iter_
Definition:
ROL_FletcherStatusTest.hpp:64
ROL::AlgorithmState::aggregateGradientNorm
Real aggregateGradientNorm
Definition:
ROL_Types.hpp:154
ROL::EXITSTATUS_LAST
Definition:
ROL_Types.hpp:123
ROL::FletcherStatusTest::check
virtual bool check(AlgorithmState< Real > &state)
Check algorithm status.
Definition:
ROL_FletcherStatusTest.hpp:83
ROL::FletcherStatusTest::FletcherStatusTest
FletcherStatusTest(Real gtol=1e-6, Real ctol=1e-6, Real stol=1e-12, int max_iter=100)
Definition:
ROL_FletcherStatusTest.hpp:78
ROL::EXITSTATUS_MAXITER
Definition:
ROL_Types.hpp:119
ROL::FletcherStatusTest::gtol_
Real gtol_
Definition:
ROL_FletcherStatusTest.hpp:61
ROL_StatusTest.hpp
ROL
Definition:
ROL_ElementwiseVector.hpp:61
ROL::AlgorithmState::flag
bool flag
Definition:
ROL_Types.hpp:156
ROL::AlgorithmState::gnorm
Real gnorm
Definition:
ROL_Types.hpp:151
ROL::AlgorithmState::cnorm
Real cnorm
Definition:
ROL_Types.hpp:152
ROL::EXITSTATUS_STEPTOL
Definition:
ROL_Types.hpp:120
ROL::EXITSTATUS_CONVERGED
Definition:
ROL_Types.hpp:118
ROL::FletcherStatusTest::FletcherStatusTest
FletcherStatusTest(ROL::ParameterList &parlist)
Definition:
ROL_FletcherStatusTest.hpp:70
ROL::StatusTest
Provides an interface to check status of optimization algorithms.
Definition:
ROL_StatusTest.hpp:58
Generated by
1.8.16