ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
algorithm
TypeG
stabilizedlcl
ROL_ElasticObjective_Def.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_ELASTICOBJECTIVEDEF_H
11
#define ROL_ELASTICOBJECTIVEDEF_H
12
13
14
namespace
ROL
{
15
16
template
<
typename
Real>
17
ElasticObjective<Real>::ElasticObjective
(
const
Ptr<
Objective<Real>
> &obj,
18
const
Ptr<
Constraint<Real>
> &con,
19
const
Real penaltyParameter,
20
const
Real sigma,
21
const
Vector<Real>
&dualOptVec,
22
const
Vector<Real>
&primConVec,
23
const
Vector<Real>
&dualConVec,
24
ParameterList &parlist)
25
:
sigma_
(sigma),
cscale_
(1) {
26
alobj_
= makePtr<AugmentedLagrangianObjective<Real>>(obj,con,penaltyParameter,dualOptVec,primConVec,dualConVec,parlist);
27
e_
= primConVec.
clone
();
e_
->setScalar(
static_cast<
Real
>
(1));
28
tmp_
= primConVec.
clone
();
29
}
30
31
template
<
typename
Real>
32
ElasticObjective<Real>::ElasticObjective
(
const
Ptr<
Objective<Real>
> &obj,
33
const
Ptr<
Constraint<Real>
> &con,
34
const
Real penaltyParameter,
35
const
Real sigma,
36
const
Vector<Real>
&dualOptVec,
37
const
Vector<Real>
&primConVec,
38
const
Vector<Real>
&dualConVec,
39
const
bool
scaleLagrangian,
40
const
int
HessianApprox)
41
:
sigma_
(sigma),
cscale_
(1) {
42
alobj_
= makePtr<AugmentedLagrangianObjective<Real>>(obj,con,penaltyParameter,dualOptVec,primConVec,dualConVec,scaleLagrangian,HessianApprox);
43
e_
= primConVec.
clone
();
e_
->setScalar(
static_cast<
Real
>
(1));
44
tmp_
= primConVec.
clone
();
45
}
46
47
template
<
typename
Real>
48
void
ElasticObjective<Real>::update
(
const
Vector<Real>
&x,
UpdateType
type,
int
iter ) {
49
Ptr<const Vector<Real>> xs =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(0);
50
alobj_
->update(*xs,type,iter);
51
}
52
53
template
<
typename
Real>
54
void
ElasticObjective<Real>::setScaling
(
const
Real fscale,
const
Real cscale) {
55
cscale_
= cscale;
56
alobj_
->setScaling(fscale,cscale);
57
}
58
59
template
<
typename
Real>
60
Real
ElasticObjective<Real>::value
(
const
Vector<Real>
&x, Real &tol ) {
61
Ptr<const Vector<Real>> xs =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(0);
62
Ptr<const Vector<Real>> xu =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(1);
63
Ptr<const Vector<Real>> xv =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(2);
64
Real val =
alobj_
->value(*xs,tol);
65
tmp_
->set(*xu);
tmp_
->plus(*xv);
66
Real pen =
sigma_
*
cscale_
*
e_
->dot(*
tmp_
);
67
return
val + pen;
68
}
69
70
template
<
typename
Real>
71
void
ElasticObjective<Real>::gradient
(
Vector<Real>
&g,
const
Vector<Real>
&x, Real &tol ) {
72
Ptr<Vector<Real>> gs =
dynamic_cast<
PartitionedVector<Real>
&
>
(g).get(0);
73
Ptr<Vector<Real>> gu =
dynamic_cast<
PartitionedVector<Real>
&
>
(g).get(1);
74
Ptr<Vector<Real>> gv =
dynamic_cast<
PartitionedVector<Real>
&
>
(g).get(2);
75
Ptr<const Vector<Real>> xs =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(0);
76
alobj_
->gradient(*gs,*xs,tol);
77
gu->set(*
e_
); gu->scale(
sigma_
*
cscale_
);
78
gv->set(*
e_
); gv->scale(
sigma_
*
cscale_
);
79
}
80
81
template
<
typename
Real>
82
void
ElasticObjective<Real>::hessVec
(
Vector<Real>
&hv,
const
Vector<Real>
&v,
const
Vector<Real>
&x, Real &tol ) {
83
Ptr<Vector<Real>> hvs =
dynamic_cast<
PartitionedVector<Real>
&
>
(hv).get(0);
84
Ptr<Vector<Real>> hvu =
dynamic_cast<
PartitionedVector<Real>
&
>
(hv).get(1);
85
Ptr<Vector<Real>> hvv =
dynamic_cast<
PartitionedVector<Real>
&
>
(hv).get(2);
86
Ptr<const Vector<Real>> vs =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(v).get(0);
87
Ptr<const Vector<Real>> xs =
dynamic_cast<
const
PartitionedVector<Real>
&
>
(x).get(0);
88
alobj_
->hessVec(*hvs,*vs,*xs,tol);
89
hvu->zero();
90
hvv->zero();
91
}
92
93
template
<
typename
Real>
94
Real
ElasticObjective<Real>::getObjectiveValue
(
const
Vector<Real>
&x, Real &tol) {
95
return
alobj_
->getObjectiveValue(x,tol);
96
}
97
98
template
<
typename
Real>
99
const
Ptr<const Vector<Real>>
ElasticObjective<Real>::getObjectiveGradient
(
const
Vector<Real>
&x, Real &tol) {
100
return
alobj_
->getObjectiveGradient(x,tol);
101
}
102
103
template
<
typename
Real>
104
const
Ptr<const Vector<Real>>
ElasticObjective<Real>::getConstraintVec
(
const
Vector<Real>
&x, Real &tol) {
105
return
alobj_
->getConstraintVec(x,tol);
106
}
107
108
template
<
typename
Real>
109
int
ElasticObjective<Real>::getNumberConstraintEvaluations
(
void
)
const
{
110
return
alobj_
->getNumberConstraintEvaluations();
111
}
112
113
template
<
typename
Real>
114
int
ElasticObjective<Real>::getNumberFunctionEvaluations
(
void
)
const
{
115
return
alobj_
->getNumberFunctionEvaluations();
116
}
117
118
template
<
typename
Real>
119
int
ElasticObjective<Real>::getNumberGradientEvaluations
(
void
)
const
{
120
return
alobj_
->getNumberGradientEvaluations();
121
}
122
123
template
<
typename
Real>
124
void
ElasticObjective<Real>::reset
(
const
Vector<Real>
&multiplier, Real penaltyParameter, Real sigma) {
125
sigma_
= sigma;
126
alobj_
->reset(multiplier,penaltyParameter);
127
}
128
129
template
<
typename
Real>
130
const
Ptr<AugmentedLagrangianObjective<Real>>
ElasticObjective<Real>::getAugmentedLagrangian
(
void
)
const
{
131
return
alobj_
;
132
}
133
134
}
// namespace ROL
135
136
#endif
ROL::Constraint
Defines the general constraint operator interface.
Definition
ROL_Constraint.hpp:52
ROL::ElasticObjective::cscale_
Real cscale_
Definition
ROL_ElasticObjective.hpp:54
ROL::ElasticObjective::reset
void reset(const Vector< Real > &multiplier, Real penaltyParameter, Real sigma)
Definition
ROL_ElasticObjective_Def.hpp:124
ROL::ElasticObjective::e_
Ptr< Vector< Real > > e_
Definition
ROL_ElasticObjective.hpp:53
ROL::ElasticObjective::getConstraintVec
const Ptr< const Vector< Real > > getConstraintVec(const Vector< Real > &x, Real &tol)
Definition
ROL_ElasticObjective_Def.hpp:104
ROL::ElasticObjective::hessVec
void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Definition
ROL_ElasticObjective_Def.hpp:82
ROL::ElasticObjective::getObjectiveGradient
const Ptr< const Vector< Real > > getObjectiveGradient(const Vector< Real > &x, Real &tol)
Definition
ROL_ElasticObjective_Def.hpp:99
ROL::ElasticObjective::update
void update(const Vector< Real > &x, UpdateType type, int iter=-1) override
Definition
ROL_ElasticObjective_Def.hpp:48
ROL::ElasticObjective::gradient
void gradient(Vector< Real > &g, const Vector< Real > &x, Real &tol) override
Definition
ROL_ElasticObjective_Def.hpp:71
ROL::ElasticObjective::getAugmentedLagrangian
const Ptr< AugmentedLagrangianObjective< Real > > getAugmentedLagrangian(void) const
Definition
ROL_ElasticObjective_Def.hpp:130
ROL::ElasticObjective::getNumberConstraintEvaluations
int getNumberConstraintEvaluations(void) const
Definition
ROL_ElasticObjective_Def.hpp:109
ROL::ElasticObjective::value
Real value(const Vector< Real > &x, Real &tol) override
Definition
ROL_ElasticObjective_Def.hpp:60
ROL::ElasticObjective::getObjectiveValue
Real getObjectiveValue(const Vector< Real > &x, Real &tol)
Definition
ROL_ElasticObjective_Def.hpp:94
ROL::ElasticObjective::setScaling
void setScaling(const Real fscale=1.0, const Real cscale=1.0)
Definition
ROL_ElasticObjective_Def.hpp:54
ROL::ElasticObjective::tmp_
Ptr< Vector< Real > > tmp_
Definition
ROL_ElasticObjective.hpp:53
ROL::ElasticObjective::ElasticObjective
ElasticObjective(const Ptr< Objective< Real > > &obj, const Ptr< Constraint< Real > > &con, const Real penaltyParameter, const Real sigma, const Vector< Real > &dualOptVec, const Vector< Real > &primConVec, const Vector< Real > &dualConVec, ParameterList &parlist)
Definition
ROL_ElasticObjective_Def.hpp:17
ROL::ElasticObjective::getNumberFunctionEvaluations
int getNumberFunctionEvaluations(void) const
Definition
ROL_ElasticObjective_Def.hpp:114
ROL::ElasticObjective::getNumberGradientEvaluations
int getNumberGradientEvaluations(void) const
Definition
ROL_ElasticObjective_Def.hpp:119
ROL::ElasticObjective::alobj_
Ptr< AugmentedLagrangianObjective< Real > > alobj_
Definition
ROL_ElasticObjective.hpp:52
ROL::ElasticObjective::sigma_
Real sigma_
Definition
ROL_ElasticObjective.hpp:54
ROL::PartitionedVector
Defines the linear algebra of vector space on a generic partitioned vector.
Definition
ROL_PartitionedVector.hpp:26
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::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