ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
sol
function
progressivehedging
ROL_PH_ErrorObjective.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
10
#ifndef PH_ERROROBJECTIVE_H
11
#define PH_ERROROBJECTIVE_H
12
13
#include "
ROL_Objective.hpp
"
14
#include "
ROL_ErrorMeasureFactory.hpp
"
15
22
namespace
ROL
{
23
24
template
<
class
Real>
25
class
PH_ErrorObjective
:
public
Objective
<Real> {
26
private
:
27
const
Ptr<Objective<Real>>
obj_
;
28
Ptr<ExpectationQuad<Real>>
quad_
;
29
30
bool
isValueComputed_
;
31
Real
val_
;
32
33
bool
isGradientInitialized_
;
34
bool
isGradientComputed_
;
35
Ptr<Vector<Real>>
g_
;
36
37
void
getValue
(
const
Vector<Real>
&x, Real &tol) {
38
if
(!
isValueComputed_
) {
39
val_
=
obj_
->value(x,tol);
40
isValueComputed_
=
true
;
41
}
42
}
43
44
void
getGradient
(
const
Vector<Real>
&x, Real &tol) {
45
if
(!
isGradientInitialized_
) {
46
g_
= x.
dual
().
clone
();
47
isGradientInitialized_
=
true
;
48
}
49
if
(!
isGradientComputed_
) {
50
obj_
->gradient(*
g_
,x,tol);
51
isGradientComputed_
=
true
;
52
}
53
}
54
55
public
:
56
57
PH_ErrorObjective
(
const
Ptr<
Objective<Real>
> &obj,
58
ParameterList &parlist)
59
:
obj_
(obj),
60
isValueComputed_
(false),
61
isGradientInitialized_
(false),
62
isGradientComputed_
(false) {
63
std::string risk = parlist.sublist(
"SOL"
).sublist(
"Error Measure"
).get(
"Name"
,
"Least Squares"
);
64
EErrorMeasure
ed =
StringToEErrorMeasure
(risk);
65
switch
(ed) {
66
case
ERRORMEASURE_MEANVARIANCEQUADRANGLE
:
67
quad_
= makePtr<MeanVarianceQuadrangle<Real>>(parlist);
break
;
68
case
ERRORMEASURE_TRUNCATEDMEANQUADRANGLE
:
69
quad_
= makePtr<TruncatedMeanQuadrangle<Real>>(parlist);
break
;
70
case
ERRORMEASURE_QUANTILEQUADRANGLE
:
71
quad_
= makePtr<QuantileQuadrangle<Real>>(parlist);
break
;
72
case
ERRORMEASURE_MOREAUYOSIDACVAR
:
73
quad_
= makePtr<MoreauYosidaCVaR<Real>>(parlist);
break
;
74
case
ERRORMEASURE_GENMOREAUYOSIDACVAR
:
75
quad_
= makePtr<GenMoreauYosidaCVaR<Real>>(parlist);
break
;
76
case
ERRORMEASURE_LOGEXPONENTIALQUADRANGLE
:
77
quad_
= makePtr<LogExponentialQuadrangle<Real>>(parlist);
break
;
78
case
ERRORMEASURE_LOGQUANTILEQUADRANGLE
:
79
quad_
= makePtr<LogQuantileQuadrangle<Real>>(parlist);
break
;
80
case
ERRORMEASURE_SMOOTHEDWORSTCASEQUADRANGLE
:
81
quad_
= makePtr<SmoothedWorstCaseQuadrangle<Real>>(parlist);
break
;
82
default
:
83
ROL_TEST_FOR_EXCEPTION(
true
,std::invalid_argument,
84
"Invalid error measure type "
<< risk <<
"!"
);
85
}
86
}
87
88
void
update
(
const
Vector<Real>
&x,
bool
flag =
true
,
int
iter = -1 ) {
89
obj_
->update(x,flag,iter);
90
isValueComputed_
=
false
;
91
isGradientComputed_
=
false
;
92
}
93
94
Real
value
(
const
Vector<Real>
&x, Real &tol ) {
95
getValue
(x,tol);
96
Real err =
quad_
->error(
val_
,0);
97
return
err;
98
}
99
100
void
gradient
(
Vector<Real>
&g,
const
Vector<Real>
&x, Real &tol ) {
101
getValue
(x,tol);
102
Real err =
quad_
->error(
val_
,1);
103
getGradient
(x,tol);
104
g.
set
(*
g_
); g.
scale
(err);
105
}
106
107
void
hessVec
(
Vector<Real>
&hv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol ) {
108
getValue
(x,tol);
109
Real err1 =
quad_
->error(
val_
,1);
110
Real err2 =
quad_
->error(
val_
,2);
111
getGradient
(x,tol);
112
//Real gv = v.dot(g_->dual());
113
Real gv = v.
apply
(*
g_
);
114
obj_
->hessVec(hv,v,x,tol);
115
hv.
scale
(err1); hv.
axpy
(err2*gv,*
g_
);
116
}
117
118
void
setParameter
(
const
std::vector<Real> ¶m) {
119
obj_
->setParameter(param);
120
Objective<Real>::setParameter
(param);
121
}
122
123
};
124
125
}
126
#endif
ROL_ErrorMeasureFactory.hpp
ROL_Objective.hpp
ROL::Objective::setParameter
virtual void setParameter(const std::vector< Real > ¶m)
Definition
ROL_Objective.hpp:509
ROL::PH_ErrorObjective::quad_
Ptr< ExpectationQuad< Real > > quad_
Definition
ROL_PH_ErrorObjective.hpp:28
ROL::PH_ErrorObjective::isGradientInitialized_
bool isGradientInitialized_
Definition
ROL_PH_ErrorObjective.hpp:33
ROL::PH_ErrorObjective::g_
Ptr< Vector< Real > > g_
Definition
ROL_PH_ErrorObjective.hpp:35
ROL::PH_ErrorObjective::getGradient
void getGradient(const Vector< Real > &x, Real &tol)
Definition
ROL_PH_ErrorObjective.hpp:44
ROL::PH_ErrorObjective::value
Real value(const Vector< Real > &x, Real &tol)
Definition
ROL_PH_ErrorObjective.hpp:94
ROL::PH_ErrorObjective::isValueComputed_
bool isValueComputed_
Definition
ROL_PH_ErrorObjective.hpp:30
ROL::PH_ErrorObjective::obj_
const Ptr< Objective< Real > > obj_
Definition
ROL_PH_ErrorObjective.hpp:27
ROL::PH_ErrorObjective::PH_ErrorObjective
PH_ErrorObjective(const Ptr< Objective< Real > > &obj, ParameterList &parlist)
Definition
ROL_PH_ErrorObjective.hpp:57
ROL::PH_ErrorObjective::getValue
void getValue(const Vector< Real > &x, Real &tol)
Definition
ROL_PH_ErrorObjective.hpp:37
ROL::PH_ErrorObjective::setParameter
void setParameter(const std::vector< Real > ¶m)
Definition
ROL_PH_ErrorObjective.hpp:118
ROL::PH_ErrorObjective::hessVec
void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Definition
ROL_PH_ErrorObjective.hpp:107
ROL::PH_ErrorObjective::gradient
void gradient(Vector< Real > &g, const Vector< Real > &x, Real &tol)
Definition
ROL_PH_ErrorObjective.hpp:100
ROL::PH_ErrorObjective::isGradientComputed_
bool isGradientComputed_
Definition
ROL_PH_ErrorObjective.hpp:34
ROL::PH_ErrorObjective::update
void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Definition
ROL_PH_ErrorObjective.hpp:88
ROL::PH_ErrorObjective::val_
Real val_
Definition
ROL_PH_ErrorObjective.hpp:31
ROL::ROL::Objective::Objective
Objective()
Definition
ROL_Constraint_SerialSimOpt.hpp:53
ROL::Vector
Defines the linear algebra or vector space interface.
Definition
ROL_Vector.hpp:51
ROL::Vector::apply
virtual Real apply(const Vector< Real > &x) const
Apply to a dual vector. This is equivalent to the call .
Definition
ROL_Vector.hpp:205
ROL::Vector::set
virtual void set(const Vector &x)
Set where .
Definition
ROL_Vector.hpp:176
ROL::Vector::scale
virtual void scale(const Real alpha)=0
Compute where .
ROL::Vector::dual
virtual const Vector & dual() const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis,...
Definition
ROL_Vector.hpp:193
ROL::Vector::clone
virtual ROL::Ptr< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
ROL::Vector::axpy
virtual void axpy(const Real alpha, const Vector &x)
Compute where .
Definition
ROL_Vector.hpp:120
ROL
Definition
ROL_ElementwiseVector.hpp:27
ROL::StringToEErrorMeasure
EErrorMeasure StringToEErrorMeasure(std::string s)
Definition
ROL_ErrorMeasureFactory.hpp:100
ROL::EErrorMeasure
EErrorMeasure
Definition
ROL_ErrorMeasureFactory.hpp:30
ROL::ERRORMEASURE_QUANTILEQUADRANGLE
@ ERRORMEASURE_QUANTILEQUADRANGLE
Definition
ROL_ErrorMeasureFactory.hpp:33
ROL::ERRORMEASURE_SMOOTHEDWORSTCASEQUADRANGLE
@ ERRORMEASURE_SMOOTHEDWORSTCASEQUADRANGLE
Definition
ROL_ErrorMeasureFactory.hpp:38
ROL::ERRORMEASURE_LOGEXPONENTIALQUADRANGLE
@ ERRORMEASURE_LOGEXPONENTIALQUADRANGLE
Definition
ROL_ErrorMeasureFactory.hpp:36
ROL::ERRORMEASURE_MEANVARIANCEQUADRANGLE
@ ERRORMEASURE_MEANVARIANCEQUADRANGLE
Definition
ROL_ErrorMeasureFactory.hpp:31
ROL::ERRORMEASURE_TRUNCATEDMEANQUADRANGLE
@ ERRORMEASURE_TRUNCATEDMEANQUADRANGLE
Definition
ROL_ErrorMeasureFactory.hpp:32
ROL::ERRORMEASURE_GENMOREAUYOSIDACVAR
@ ERRORMEASURE_GENMOREAUYOSIDACVAR
Definition
ROL_ErrorMeasureFactory.hpp:35
ROL::ERRORMEASURE_MOREAUYOSIDACVAR
@ ERRORMEASURE_MOREAUYOSIDACVAR
Definition
ROL_ErrorMeasureFactory.hpp:34
ROL::ERRORMEASURE_LOGQUANTILEQUADRANGLE
@ ERRORMEASURE_LOGQUANTILEQUADRANGLE
Definition
ROL_ErrorMeasureFactory.hpp:37
Generated by
1.17.0