ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
sol
function
ROL_RiskNeutralConstraint.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 ROL_RISKNEUTRALCONSTRAINT_HPP
11
#define ROL_RISKNEUTRALCONSTRAINT_HPP
12
13
#include "ROL_Ptr.hpp"
14
#include "
ROL_Vector.hpp
"
15
#include "
ROL_Constraint.hpp
"
16
#include "
ROL_SampleGenerator.hpp
"
17
18
namespace
ROL
{
19
20
template
<
class
Real>
21
class
RiskNeutralConstraint
:
public
Constraint
<Real> {
22
private
:
23
const
Ptr<Constraint<Real>>
con_
;
24
const
Ptr<SampleGenerator<Real>>
xsampler_
;
25
const
Ptr<BatchManager<Real>>
cbman_
;
26
27
Ptr<Vector<Real>>
conVec_
;
28
Ptr<Vector<Real>>
optVec_
;
29
30
bool
initialized_
;
31
32
void
init
(
const
Vector<Real>
&c,
const
Vector<Real>
&x) {
33
if
(!
initialized_
) {
34
conVec_
= c.
clone
();
35
optVec_
= x.
dual
().
clone
();
36
initialized_
=
true
;
37
}
38
}
39
40
public
:
41
RiskNeutralConstraint
(
const
Ptr<
Constraint<Real>
> &con,
42
const
Ptr<
SampleGenerator<Real>
> &xsampler,
43
const
Ptr<
BatchManager<Real>
> &cbman)
44
:
con_
(con),
xsampler_
(xsampler),
cbman_
(cbman),
initialized_
(false) {}
45
46
void
update
(
const
Vector<Real>
&x,
bool
flag =
true
,
int
iter = -1 ) {
47
con_
->update(x,flag,iter);
48
}
49
50
void
update
(
const
Vector<Real>
&x,
UpdateType
type,
int
iter = -1 ) {
51
con_
->update(x,type,iter);
52
}
53
54
void
value
(
Vector<Real>
&c,
const
Vector<Real>
&x, Real &tol ) {
55
init
(c,x);
56
conVec_
->zero();
57
for
(
int
i = 0; i <
xsampler_
->numMySamples(); ++i ) {
58
con_
->setParameter(
xsampler_
->getMyPoint(i));
59
con_
->value(c,x,tol);
60
conVec_
->axpy(
xsampler_
->getMyWeight(i),c);
61
}
62
c.
zero
();
63
cbman_
->sumAll(*
conVec_
,c);
64
}
65
66
void
applyJacobian
(
Vector<Real>
&jv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol) {
67
init
(jv,x);
68
conVec_
->zero();
69
for
(
int
i = 0; i <
xsampler_
->numMySamples(); ++i ) {
70
con_
->setParameter(
xsampler_
->getMyPoint(i));
71
con_
->applyJacobian(jv,v,x,tol);
72
conVec_
->axpy(
xsampler_
->getMyWeight(i),jv);
73
}
74
jv.
zero
();
75
cbman_
->sumAll(*
conVec_
,jv);
76
}
77
78
void
applyAdjointJacobian
(
Vector<Real>
&ajv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol) {
79
init
(v.
dual
(),x);
80
optVec_
->zero();
81
for
(
int
i = 0; i <
xsampler_
->numMySamples(); ++i ) {
82
con_
->setParameter(
xsampler_
->getMyPoint(i));
83
con_
->applyAdjointJacobian(ajv,v,x,tol);
84
optVec_
->axpy(
xsampler_
->getMyWeight(i),ajv);
85
}
86
ajv.
zero
();
87
xsampler_
->sumAll(*
optVec_
,ajv);
88
}
89
90
void
applyAdjointHessian
(
Vector<Real>
&ahuv,
const
Vector<Real>
&u,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol) {
91
init
(u.
dual
(),x);
92
optVec_
->zero();
93
for
(
int
i = 0; i <
xsampler_
->numMySamples(); ++i ) {
94
con_
->setParameter(
xsampler_
->getMyPoint(i));
95
con_
->applyAdjointHessian(ahuv,u,v,x,tol);
96
optVec_
->axpy(
xsampler_
->getMyWeight(i),ahuv);
97
}
98
ahuv.
zero
();
99
xsampler_
->sumAll(*
optVec_
,ahuv);
100
}
101
102
};
103
104
}
105
106
#endif
ROL_Constraint.hpp
ROL_SampleGenerator.hpp
ROL_Vector.hpp
ROL::BatchManager
Definition
ROL_BatchManager.hpp:19
ROL::ROL::Constraint::Constraint
Constraint(void)
Definition
ROL_Constraint_SerialSimOpt.hpp:59
ROL::RiskNeutralConstraint::conVec_
Ptr< Vector< Real > > conVec_
Definition
ROL_RiskNeutralConstraint.hpp:27
ROL::RiskNeutralConstraint::RiskNeutralConstraint
RiskNeutralConstraint(const Ptr< Constraint< Real > > &con, const Ptr< SampleGenerator< Real > > &xsampler, const Ptr< BatchManager< Real > > &cbman)
Definition
ROL_RiskNeutralConstraint.hpp:41
ROL::RiskNeutralConstraint::con_
const Ptr< Constraint< Real > > con_
Definition
ROL_RiskNeutralConstraint.hpp:23
ROL::RiskNeutralConstraint::value
void value(Vector< Real > &c, const Vector< Real > &x, Real &tol)
Definition
ROL_RiskNeutralConstraint.hpp:54
ROL::RiskNeutralConstraint::init
void init(const Vector< Real > &c, const Vector< Real > &x)
Definition
ROL_RiskNeutralConstraint.hpp:32
ROL::RiskNeutralConstraint::optVec_
Ptr< Vector< Real > > optVec_
Definition
ROL_RiskNeutralConstraint.hpp:28
ROL::RiskNeutralConstraint::cbman_
const Ptr< BatchManager< Real > > cbman_
Definition
ROL_RiskNeutralConstraint.hpp:25
ROL::RiskNeutralConstraint::update
void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Definition
ROL_RiskNeutralConstraint.hpp:46
ROL::RiskNeutralConstraint::applyJacobian
void applyJacobian(Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Definition
ROL_RiskNeutralConstraint.hpp:66
ROL::RiskNeutralConstraint::update
void update(const Vector< Real > &x, UpdateType type, int iter=-1)
Definition
ROL_RiskNeutralConstraint.hpp:50
ROL::RiskNeutralConstraint::applyAdjointJacobian
void applyAdjointJacobian(Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Definition
ROL_RiskNeutralConstraint.hpp:78
ROL::RiskNeutralConstraint::initialized_
bool initialized_
Definition
ROL_RiskNeutralConstraint.hpp:30
ROL::RiskNeutralConstraint::applyAdjointHessian
void applyAdjointHessian(Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
Definition
ROL_RiskNeutralConstraint.hpp:90
ROL::RiskNeutralConstraint::xsampler_
const Ptr< SampleGenerator< Real > > xsampler_
Definition
ROL_RiskNeutralConstraint.hpp:24
ROL::SampleGenerator
Definition
ROL_SampleGenerator.hpp:20
ROL::Vector
Defines the linear algebra or vector space interface.
Definition
ROL_Vector.hpp:51
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::zero
virtual void zero()
Set to zero vector.
Definition
ROL_Vector.hpp:134
ROL::Vector::clone
virtual ROL::Ptr< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
ROL
Definition
ROL_ElementwiseVector.hpp:27
ROL::UpdateType
UpdateType
Definition
ROL_UpdateType.hpp:18
Generated by
1.17.0