ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
sol
function
progressivehedging
ROL_PH_RegretObjective.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_REGRETOBJECTIVE_H
11
#define PH_REGRETOBJECTIVE_H
12
13
#include "
ROL_Objective.hpp
"
14
#include "
ROL_RegretMeasureFactory.hpp
"
15
22
namespace
ROL
{
23
24
template
<
class
Real>
25
class
PH_RegretObjective
:
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_RegretObjective
(
const
Ptr<
Objective<Real>
> &obj,
58
ParameterList &parlist)
59
:
obj_
(obj),
60
isValueComputed_
(false),
61
isGradientInitialized_
(false),
62
isGradientComputed_
(false) {
63
std::string regret = parlist.sublist(
"SOL"
).sublist(
"Regret Measure"
).get(
"Name"
,
"Mean Absolute Loss"
);
64
ERegretMeasure
ed =
StringToERegretMeasure
(regret);
65
switch
(ed) {
66
case
REGRETMEASURE_MEANABSOLUTELOSS
:
67
quad_
= makePtr<QuantileQuadrangle<Real>>(parlist);
break
;
68
case
REGRETMEASURE_MOREAUYOSIDAMEANABSOLUTELOSS
:
69
quad_
= makePtr<MoreauYosidaCVaR<Real>>(parlist);
break
;
70
case
REGRETMEASURE_GENMOREAUYOSIDAMEANABSOLUTELOSS
:
71
quad_
= makePtr<GenMoreauYosidaCVaR<Real>>(parlist);
break
;
72
case
REGRETMEASURE_EXPONENTIAL
:
73
quad_
= makePtr<LogExponentialQuadrangle<Real>>(parlist);
break
;
74
case
REGRETMEASURE_MEANL2
:
75
quad_
= makePtr<MeanVarianceQuadrangle<Real>>(parlist);
break
;
76
case
REGRETMEASURE_TRUNCATEDMEAN
:
77
quad_
= makePtr<TruncatedMeanQuadrangle<Real>>(parlist);
break
;
78
case
REGRETMEASURE_LOGQUANTILE
:
79
quad_
= makePtr<LogQuantileQuadrangle<Real>>(parlist);
break
;
80
case
REGRETMEASURE_SMOOTHEDWORSTCASE
:
81
quad_
= makePtr<SmoothedWorstCaseQuadrangle<Real>>(parlist);
break
;
82
default
:
83
ROL_TEST_FOR_EXCEPTION(
true
,std::invalid_argument,
84
"Invalid regret measure type "
<< regret <<
"!"
);
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 reg =
quad_
->regret(
val_
,0);
97
return
reg;
98
}
99
100
void
gradient
(
Vector<Real>
&g,
const
Vector<Real>
&x, Real &tol ) {
101
getValue
(x,tol);
102
Real reg =
quad_
->regret(
val_
,1);
103
getGradient
(x,tol);
104
g.
set
(*
g_
); g.
scale
(reg);
105
}
106
107
void
hessVec
(
Vector<Real>
&hv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol ) {
108
getValue
(x,tol);
109
Real reg1 =
quad_
->regret(
val_
,1);
110
Real reg2 =
quad_
->regret(
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
(reg1); hv.
axpy
(reg2*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_Objective.hpp
ROL_RegretMeasureFactory.hpp
ROL::Objective::setParameter
virtual void setParameter(const std::vector< Real > ¶m)
Definition
ROL_Objective.hpp:509
ROL::PH_RegretObjective::getValue
void getValue(const Vector< Real > &x, Real &tol)
Definition
ROL_PH_RegretObjective.hpp:37
ROL::PH_RegretObjective::obj_
const Ptr< Objective< Real > > obj_
Definition
ROL_PH_RegretObjective.hpp:27
ROL::PH_RegretObjective::setParameter
void setParameter(const std::vector< Real > ¶m)
Definition
ROL_PH_RegretObjective.hpp:118
ROL::PH_RegretObjective::isGradientInitialized_
bool isGradientInitialized_
Definition
ROL_PH_RegretObjective.hpp:33
ROL::PH_RegretObjective::isValueComputed_
bool isValueComputed_
Definition
ROL_PH_RegretObjective.hpp:30
ROL::PH_RegretObjective::quad_
Ptr< ExpectationQuad< Real > > quad_
Definition
ROL_PH_RegretObjective.hpp:28
ROL::PH_RegretObjective::update
void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Definition
ROL_PH_RegretObjective.hpp:88
ROL::PH_RegretObjective::gradient
void gradient(Vector< Real > &g, const Vector< Real > &x, Real &tol)
Definition
ROL_PH_RegretObjective.hpp:100
ROL::PH_RegretObjective::val_
Real val_
Definition
ROL_PH_RegretObjective.hpp:31
ROL::PH_RegretObjective::value
Real value(const Vector< Real > &x, Real &tol)
Definition
ROL_PH_RegretObjective.hpp:94
ROL::PH_RegretObjective::g_
Ptr< Vector< Real > > g_
Definition
ROL_PH_RegretObjective.hpp:35
ROL::PH_RegretObjective::isGradientComputed_
bool isGradientComputed_
Definition
ROL_PH_RegretObjective.hpp:34
ROL::PH_RegretObjective::PH_RegretObjective
PH_RegretObjective(const Ptr< Objective< Real > > &obj, ParameterList &parlist)
Definition
ROL_PH_RegretObjective.hpp:57
ROL::PH_RegretObjective::getGradient
void getGradient(const Vector< Real > &x, Real &tol)
Definition
ROL_PH_RegretObjective.hpp:44
ROL::PH_RegretObjective::hessVec
void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Definition
ROL_PH_RegretObjective.hpp:107
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::ERegretMeasure
ERegretMeasure
Definition
ROL_RegretMeasureFactory.hpp:27
ROL::REGRETMEASURE_LOGQUANTILE
@ REGRETMEASURE_LOGQUANTILE
Definition
ROL_RegretMeasureFactory.hpp:34
ROL::REGRETMEASURE_EXPONENTIAL
@ REGRETMEASURE_EXPONENTIAL
Definition
ROL_RegretMeasureFactory.hpp:31
ROL::REGRETMEASURE_GENMOREAUYOSIDAMEANABSOLUTELOSS
@ REGRETMEASURE_GENMOREAUYOSIDAMEANABSOLUTELOSS
Definition
ROL_RegretMeasureFactory.hpp:30
ROL::REGRETMEASURE_MEANABSOLUTELOSS
@ REGRETMEASURE_MEANABSOLUTELOSS
Definition
ROL_RegretMeasureFactory.hpp:28
ROL::REGRETMEASURE_SMOOTHEDWORSTCASE
@ REGRETMEASURE_SMOOTHEDWORSTCASE
Definition
ROL_RegretMeasureFactory.hpp:35
ROL::REGRETMEASURE_MOREAUYOSIDAMEANABSOLUTELOSS
@ REGRETMEASURE_MOREAUYOSIDAMEANABSOLUTELOSS
Definition
ROL_RegretMeasureFactory.hpp:29
ROL::REGRETMEASURE_TRUNCATEDMEAN
@ REGRETMEASURE_TRUNCATEDMEAN
Definition
ROL_RegretMeasureFactory.hpp:33
ROL::REGRETMEASURE_MEANL2
@ REGRETMEASURE_MEANL2
Definition
ROL_RegretMeasureFactory.hpp:32
ROL::StringToERegretMeasure
ERegretMeasure StringToERegretMeasure(std::string s)
Definition
ROL_RegretMeasureFactory.hpp:97
Generated by
1.17.0