ROL
Toggle main menu visibility
Loading...
Searching...
No Matches
src
function
polyproj
ROL_PolyhedralProjectionFactory.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_POLYHEDRALPROJECTIONFACTORY_H
11
#define ROL_POLYHEDRALPROJECTIONFACTORY_H
12
13
#include "
ROL_DaiFletcherProjection.hpp
"
14
#include "
ROL_DykstraProjection.hpp
"
15
#include "
ROL_DouglasRachfordProjection.hpp
"
16
#include "
ROL_SemismoothNewtonProjection.hpp
"
17
#include "
ROL_RiddersProjection.hpp
"
18
#include "
ROL_BrentsProjection.hpp
"
19
20
namespace
ROL
{
21
30
enum
EPolyProjAlgo
{
31
PPA_DAIFLETCHER
= 0,
32
PPA_DYKSTRA
,
33
PPA_DOUGLASRACHFORD
,
34
PPA_NEWTON
,
35
PPA_RIDDERS
,
36
PPA_BRENTS
,
37
PPA_LAST
38
};
39
40
inline
std::string
EPolyProjAlgoToString
(
EPolyProjAlgo
alg) {
41
std::string retString;
42
switch
(alg) {
43
case
PPA_DAIFLETCHER
: retString =
"Dai-Fletcher"
;
break
;
44
case
PPA_DYKSTRA
: retString =
"Dysktra"
;
break
;
45
case
PPA_DOUGLASRACHFORD
: retString =
"Douglas-Rachford"
;
break
;
46
case
PPA_NEWTON
: retString =
"Semismooth Newton"
;
break
;
47
case
PPA_RIDDERS
: retString =
"Ridders"
;
break
;
48
case
PPA_BRENTS
: retString =
"Brents"
;
break
;
49
case
PPA_LAST
: retString =
"Last Type (Dummy)"
;
break
;
50
default
: retString =
"INVALID EPolyProjAlgo"
;
51
}
52
return
retString;
53
}
54
60
inline
int
isValidPolyProjAlgo
(
EPolyProjAlgo
alg){
61
return
( (alg ==
PPA_DAIFLETCHER
) ||
62
(alg ==
PPA_DYKSTRA
) ||
63
(alg ==
PPA_DOUGLASRACHFORD
) ||
64
(alg ==
PPA_NEWTON
) ||
65
(alg ==
PPA_RIDDERS
) ||
66
(alg ==
PPA_BRENTS
) ||
67
(alg ==
PPA_LAST
)
68
);
69
}
70
71
inline
EPolyProjAlgo
&
operator++
(
EPolyProjAlgo
&type) {
72
return
type =
static_cast<
EPolyProjAlgo
>
(type+1);
73
}
74
75
inline
EPolyProjAlgo
operator++
(
EPolyProjAlgo
&type,
int
) {
76
EPolyProjAlgo
oldval = type;
77
++type;
78
return
oldval;
79
}
80
81
inline
EPolyProjAlgo
&
operator--
(
EPolyProjAlgo
&type) {
82
return
type =
static_cast<
EPolyProjAlgo
>
(type-1);
83
}
84
85
inline
EPolyProjAlgo
operator--
(
EPolyProjAlgo
&type,
int
) {
86
EPolyProjAlgo
oldval = type;
87
--type;
88
return
oldval;
89
}
90
91
inline
EPolyProjAlgo
StringToEPolyProjAlgo
(std::string s) {
92
s =
removeStringFormat
(s);
93
for
(
EPolyProjAlgo
alg =
PPA_DAIFLETCHER
; alg <
PPA_LAST
; alg++ ) {
94
if
( !s.compare(
removeStringFormat
(
EPolyProjAlgoToString
(alg))) ) {
95
return
alg;
96
}
97
}
98
return
PPA_DYKSTRA
;
99
}
100
101
template
<
typename
Real>
102
inline
Ptr<PolyhedralProjection<Real>>
PolyhedralProjectionFactory
(
const
Vector<Real>
&xprim,
103
const
Vector<Real>
&xdual,
104
const
Ptr<
BoundConstraint<Real>
> &bnd,
105
const
Ptr<
Constraint<Real>
> &con,
106
const
Vector<Real>
&mul,
107
const
Vector<Real>
&res,
108
ParameterList &list) {
109
std::string projectionType = list.sublist(
"General"
).sublist(
"Polyhedral Projection"
).get(
"Type"
,
"Dykstra"
);
110
EPolyProjAlgo
ealg =
StringToEPolyProjAlgo
(projectionType);
111
switch
(ealg) {
112
case
PPA_DAIFLETCHER
:
return
makePtr<DaiFletcherProjection<Real>>(xprim,xdual,bnd,con,mul,res,list);
break
;
113
case
PPA_DYKSTRA
:
return
makePtr<DykstraProjection<Real>>(xprim,xdual,bnd,con,mul,res,list);
break
;
114
case
PPA_DOUGLASRACHFORD
:
return
makePtr<DouglasRachfordProjection<Real>>(xprim,xdual,bnd,con,mul,res,list);
break
;
115
case
PPA_NEWTON
:
return
makePtr<SemismoothNewtonProjection<Real>>(xprim,xdual,bnd,con,mul,res,list);
break
;
116
case
PPA_RIDDERS
:
return
makePtr<RiddersProjection<Real>>(xprim,xdual,bnd,con,mul,res,list);
break
;
117
case
PPA_BRENTS
:
return
makePtr<BrentsProjection<Real>>(xprim,xdual,bnd,con,mul,res,list);
break
;
118
default
:
return
nullPtr;
119
}
120
}
121
}
// namespace ROL
122
123
#endif
ROL_BrentsProjection.hpp
ROL_DaiFletcherProjection.hpp
ROL_DouglasRachfordProjection.hpp
ROL_DykstraProjection.hpp
ROL_RiddersProjection.hpp
ROL_SemismoothNewtonProjection.hpp
ROL::BoundConstraint
Provides the interface to apply upper and lower bound constraints.
Definition
ROL_BoundConstraint.hpp:39
ROL::Constraint
Defines the general constraint operator interface.
Definition
ROL_Constraint.hpp:52
ROL::Vector
Defines the linear algebra or vector space interface.
Definition
ROL_Vector.hpp:51
ROL
Definition
ROL_ElementwiseVector.hpp:27
ROL::EPolyProjAlgo
EPolyProjAlgo
Definition
ROL_PolyhedralProjectionFactory.hpp:30
ROL::PPA_LAST
@ PPA_LAST
Definition
ROL_PolyhedralProjectionFactory.hpp:37
ROL::PPA_NEWTON
@ PPA_NEWTON
Definition
ROL_PolyhedralProjectionFactory.hpp:34
ROL::PPA_RIDDERS
@ PPA_RIDDERS
Definition
ROL_PolyhedralProjectionFactory.hpp:35
ROL::PPA_DAIFLETCHER
@ PPA_DAIFLETCHER
Definition
ROL_PolyhedralProjectionFactory.hpp:31
ROL::PPA_BRENTS
@ PPA_BRENTS
Definition
ROL_PolyhedralProjectionFactory.hpp:36
ROL::PPA_DOUGLASRACHFORD
@ PPA_DOUGLASRACHFORD
Definition
ROL_PolyhedralProjectionFactory.hpp:33
ROL::PPA_DYKSTRA
@ PPA_DYKSTRA
Definition
ROL_PolyhedralProjectionFactory.hpp:32
ROL::removeStringFormat
std::string removeStringFormat(std::string s)
Definition
ROL_Types.hpp:215
ROL::EPolyProjAlgoToString
std::string EPolyProjAlgoToString(EPolyProjAlgo alg)
Definition
ROL_PolyhedralProjectionFactory.hpp:40
ROL::PolyhedralProjectionFactory
Ptr< PolyhedralProjection< Real > > PolyhedralProjectionFactory(const Vector< Real > &xprim, const Vector< Real > &xdual, const Ptr< BoundConstraint< Real > > &bnd, const Ptr< Constraint< Real > > &con, const Vector< Real > &mul, const Vector< Real > &res, ParameterList &list)
Definition
ROL_PolyhedralProjectionFactory.hpp:102
ROL::operator--
EPolyProjAlgo & operator--(EPolyProjAlgo &type)
Definition
ROL_PolyhedralProjectionFactory.hpp:81
ROL::StringToEPolyProjAlgo
EPolyProjAlgo StringToEPolyProjAlgo(std::string s)
Definition
ROL_PolyhedralProjectionFactory.hpp:91
ROL::operator++
EPolyProjAlgo & operator++(EPolyProjAlgo &type)
Definition
ROL_PolyhedralProjectionFactory.hpp:71
ROL::isValidPolyProjAlgo
int isValidPolyProjAlgo(EPolyProjAlgo alg)
Verifies validity of a PolyProjAlgo enum.
Definition
ROL_PolyhedralProjectionFactory.hpp:60
Generated by
1.17.0