ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
zoo
testproblems
ROL_FreudensteinRoth.hpp
Go to the documentation of this file.
1
// @HEADER
2
// *****************************************************************************
3
// Rapid Optimization Library (ROL) Package
4
//
5
// Copyright 2014 NTESS and the ROL contributors.
6
// SPDX-License-Identifier: BSD-3-Clause
7
// *****************************************************************************
8
// @HEADER
9
14
15
#ifndef USE_HESSVEC
16
#define USE_HESSVEC 1
17
#endif
18
19
#ifndef ROL_FREUDENSTEINROTH_HPP
20
#define ROL_FREUDENSTEINROTH_HPP
21
22
#include "
ROL_StdVector.hpp
"
23
#include "
ROL_TestProblem.hpp
"
24
25
namespace
ROL
{
26
namespace
ZOO {
27
30
template
<
class
Real>
31
class
Objective_FreudensteinRoth
:
public
Objective
<Real> {
32
public
:
33
Objective_FreudensteinRoth
() {}
34
35
Real
value
(
const
Vector<Real>
&x, Real &tol ) {
36
Ptr<const std::vector<Real> > ex
37
=
dynamic_cast<
const
StdVector<Real>
&
>
(x).getVector();
38
39
Real f1 = -13.0 + (*ex)[0] + ((5.0-(*ex)[1])*(*ex)[1] - 2.0)*(*ex)[1];
40
Real f2 = -29.0 + (*ex)[0] + (((*ex)[1]+1.0)*(*ex)[1] - 14.0)*(*ex)[1];
41
42
return
f1*f1+f2*f2;
43
}
44
45
void
gradient
(
Vector<Real>
&g,
const
Vector<Real>
&x, Real &tol ) {
46
Ptr<std::vector<Real> > eg
47
=
dynamic_cast<
StdVector<Real>
&
>
(g).getVector();
48
Ptr<const std::vector<Real> > ex
49
=
dynamic_cast<
const
StdVector<Real>
&
>
(x).getVector();
50
51
Real f1 = -13.0 + (*ex)[0] + ((5.0-(*ex)[1])*(*ex)[1] - 2.0)*(*ex)[1];
52
Real f2 = -29.0 + (*ex)[0] + (((*ex)[1]+1.0)*(*ex)[1] - 14.0)*(*ex)[1];
53
54
Real f11 = 1.0;
55
Real f12 = 10.0*(*ex)[1] - 3.0*(*ex)[1]*(*ex)[1] - 2.0;
56
Real f21 = 1.0;
57
Real f22 = 3.0*(*ex)[1]*(*ex)[1] + 2.0*(*ex)[1] - 14.0;
58
59
(*eg)[0] = 2.0*(f11*f1 + f21*f2);
60
(*eg)[1] = 2.0*(f12*f1 + f22*f2);
61
}
62
#if USE_HESSVEC
63
void
hessVec
(
Vector<Real>
&hv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol ) {
64
Ptr<std::vector<Real> > ehv
65
=
dynamic_cast<
StdVector<Real>
&
>
(hv).getVector();
66
Ptr<const std::vector<Real> > ev
67
=
dynamic_cast<
const
StdVector<Real>
&
>
(v).getVector();
68
Ptr<const std::vector<Real> > ex
69
=
dynamic_cast<
const
StdVector<Real>
&
>
(x).getVector();
70
71
Real f1 = -13.0 + (*ex)[0] + ((5.0-(*ex)[1])*(*ex)[1] - 2.0)*(*ex)[1];
72
Real f2 = -29.0 + (*ex)[0] + (((*ex)[1]+1.0)*(*ex)[1] - 14.0)*(*ex)[1];
73
74
Real f11 = 1.0;
75
Real f12 = 10.0*(*ex)[1] - 3.0*(*ex)[1]*(*ex)[1] - 2.0;
76
Real f21 = 1.0;
77
Real f22 = 3.0*(*ex)[1]*(*ex)[1] + 2.0*(*ex)[1] - 14.0;
78
79
Real f122 = 10.0 - 6.0*(*ex)[1];
80
Real f222 = 6.0*(*ex)[1] + 2.0;
81
82
Real h11 = 2.0*(f11*f11) + 2.0*(f21*f21);
83
Real h12 = 2.0*(f12*f11) + 2.0*(f22*f21);
84
Real h22 = 2.0*(f122*f1 + f12*f12) + 2.0*(f222*f2 + f22*f22);
85
86
(*ehv)[0] = h11*(*ev)[0] + h12*(*ev)[1];
87
(*ehv)[1] = h12*(*ev)[0] + h22*(*ev)[1];
88
}
89
#endif
90
void
invHessVec
(
Vector<Real>
&hv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol ) {
91
Ptr<std::vector<Real> > ehv
92
=
dynamic_cast<
StdVector<Real>
&
>
(hv).getVector();
93
Ptr<const std::vector<Real> > ev
94
=
dynamic_cast<
const
StdVector<Real>
&
>
(v).getVector();
95
Ptr<const std::vector<Real> > ex
96
=
dynamic_cast<
const
StdVector<Real>
&
>
(x).getVector();
97
98
Real f1 = -13.0 + (*ex)[0] + ((5.0-(*ex)[1])*(*ex)[1] - 2.0)*(*ex)[1];
99
Real f2 = -29.0 + (*ex)[0] + (((*ex)[1]+1.0)*(*ex)[1] - 14.0)*(*ex)[1];
100
101
Real f11 = 1.0;
102
Real f12 = 10.0*(*ex)[1] - 3.0*(*ex)[1]*(*ex)[1] - 2.0;
103
Real f21 = 1.0;
104
Real f22 = 3.0*(*ex)[1]*(*ex)[1] + 2.0*(*ex)[1] - 14.0;
105
106
Real f122 = 10.0 - 6.0*(*ex)[1];
107
Real f222 = 6.0*(*ex)[1] + 2.0;
108
109
Real h11 = 2.0*(f11*f11) + 2.0*(f21*f21);
110
Real h12 = 2.0*(f12*f11) + 2.0*(f22*f21);
111
Real h22 = 2.0*(f122*f1 + f12*f12) + 2.0*(f222*f2 + f22*f22);
112
113
(*ehv)[0] = (1.0/(h11*h22-h12*h12))*( h22*(*ev)[0] - h12*(*ev)[1]);
114
(*ehv)[1] = (1.0/(h11*h22-h12*h12))*(-h12*(*ev)[0] + h11*(*ev)[1]);
115
}
116
};
117
118
template
<
class
Real>
119
class
getFreudensteinRoth
:
public
TestProblem
<Real> {
120
public
:
121
getFreudensteinRoth
(
void
){}
122
123
Ptr<Objective<Real>>
getObjective
(
void
)
const
{
124
// Instantiate Objective Function
125
return
makePtr<Objective_FreudensteinRoth<Real>>();
126
}
127
128
Ptr<Vector<Real>>
getInitialGuess
(
void
)
const
{
129
// Problem dimension
130
int
n = 2;
131
// Get Initial Guess
132
Ptr<std::vector<Real> > x0p = makePtr<std::vector<Real>>(n,0.0);
133
(*x0p)[0] = 0.5; (*x0p)[1] = -2.0;
134
return
makePtr<StdVector<Real>>(x0p);
135
}
136
137
Ptr<Vector<Real>>
getSolution
(
const
int
i = 0)
const
{
138
// Problem dimension
139
int
n = 2;
140
// Get Solution
141
Ptr<std::vector<Real> > xp = makePtr<std::vector<Real>>(n,0.0);
142
if
(i == 0) {
143
(*xp)[0] = 5.0; (*xp)[1] = 4.0;
144
}
145
else
if
(i == 1) {
146
(*xp)[0] = 11.412779; (*xp)[1] = -0.896805;
147
}
148
else
{
149
throw
Exception::NotImplemented
(
">>> ROL::FreudensteinRoth : The index i must be between 0 and 1!"
);
150
}
151
return
makePtr<StdVector<Real>>(xp);
152
}
153
154
int
getNumSolutions
(
void
)
const
{
155
return
2;
156
}
157
};
158
159
160
}
// End ZOO Namespace
161
}
// End ROL Namespace
162
163
#endif
ROL_StdVector.hpp
ROL_TestProblem.hpp
Contains definitions of test objective functions.
ROL::Exception::NotImplemented
Definition
ROL_Types.hpp:884
ROL::ROL::Objective::hessVec
virtual void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Apply Hessian approximation to vector.
Definition
ROL_ObjectiveDef.hpp:61
ROL::ROL::Objective::Objective
Objective()
Definition
ROL_Constraint_SerialSimOpt.hpp:53
ROL::StdVector
Provides the ROL::Vector interface for scalar values, to be used, for example, with scalar constraint...
Definition
ROL_StdVector.hpp:27
ROL::TestProblem::TestProblem
TestProblem(void)
Definition
ROL_TestProblem.hpp:28
ROL::Vector
Defines the linear algebra or vector space interface.
Definition
ROL_Vector.hpp:51
ROL::ZOO::Objective_FreudensteinRoth::value
Real value(const Vector< Real > &x, Real &tol)
Definition
ROL_FreudensteinRoth.hpp:35
ROL::ZOO::Objective_FreudensteinRoth::invHessVec
void invHessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Definition
ROL_FreudensteinRoth.hpp:90
ROL::ZOO::Objective_FreudensteinRoth::Objective_FreudensteinRoth
Objective_FreudensteinRoth()
Definition
ROL_FreudensteinRoth.hpp:33
ROL::ZOO::Objective_FreudensteinRoth::gradient
void gradient(Vector< Real > &g, const Vector< Real > &x, Real &tol)
Definition
ROL_FreudensteinRoth.hpp:45
ROL::ZOO::getFreudensteinRoth::getObjective
Ptr< Objective< Real > > getObjective(void) const
Definition
ROL_FreudensteinRoth.hpp:123
ROL::ZOO::getFreudensteinRoth::getInitialGuess
Ptr< Vector< Real > > getInitialGuess(void) const
Definition
ROL_FreudensteinRoth.hpp:128
ROL::ZOO::getFreudensteinRoth::getSolution
Ptr< Vector< Real > > getSolution(const int i=0) const
Definition
ROL_FreudensteinRoth.hpp:137
ROL::ZOO::getFreudensteinRoth::getFreudensteinRoth
getFreudensteinRoth(void)
Definition
ROL_FreudensteinRoth.hpp:121
ROL::ZOO::getFreudensteinRoth::getNumSolutions
int getNumSolutions(void) const
Definition
ROL_FreudensteinRoth.hpp:154
ROL
Definition
ROL_ElementwiseVector.hpp:27
Generated by
1.17.0