ROL
Loading...
Searching...
No Matches
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
19
20namespace ROL {
21
39
40inline 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
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
72 return type = static_cast<EPolyProjAlgo>(type+1);
73}
74
76 EPolyProjAlgo oldval = type;
77 ++type;
78 return oldval;
79}
80
82 return type = static_cast<EPolyProjAlgo>(type-1);
83}
84
86 EPolyProjAlgo oldval = type;
87 --type;
88 return oldval;
89}
90
91inline 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
101template<typename Real>
102inline 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;
110 if (list.sublist("General").sublist("Polyhedral Projection").isParameter("Type"))
111 projectionType = list.sublist("General").sublist("Polyhedral Projection").get("Type","Dykstra");
112 else
113 projectionType = (res.dimension() == 1) ? "Dai-Fletcher" : "Dykstra";
114 EPolyProjAlgo ealg = StringToEPolyProjAlgo(projectionType);
115 switch(ealg) {
116 case PPA_DAIFLETCHER: return makePtr<DaiFletcherProjection<Real>>(xprim,xdual,bnd,con,mul,res,list); break;
117 case PPA_DYKSTRA: return makePtr<DykstraProjection<Real>>(xprim,xdual,bnd,con,mul,res,list); break;
118 case PPA_DOUGLASRACHFORD: return makePtr<DouglasRachfordProjection<Real>>(xprim,xdual,bnd,con,mul,res,list); break;
119 case PPA_NEWTON: return makePtr<SemismoothNewtonProjection<Real>>(xprim,xdual,bnd,con,mul,res,list); break;
120 case PPA_RIDDERS: return makePtr<RiddersProjection<Real>>(xprim,xdual,bnd,con,mul,res,list); break;
121 case PPA_BRENTS: return makePtr<BrentsProjection<Real>>(xprim,xdual,bnd,con,mul,res,list); break;
122 default: return nullPtr;
123 }
124}
125} // namespace ROL
126
127#endif
Provides the interface to apply upper and lower bound constraints.
Defines the general constraint operator interface.
Defines the linear algebra or vector space interface.
virtual int dimension() const
Return dimension of the vector space.
std::string removeStringFormat(std::string s)
std::string EPolyProjAlgoToString(EPolyProjAlgo alg)
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)
EPolyProjAlgo & operator--(EPolyProjAlgo &type)
EPolyProjAlgo StringToEPolyProjAlgo(std::string s)
EPolyProjAlgo & operator++(EPolyProjAlgo &type)
int isValidPolyProjAlgo(EPolyProjAlgo alg)
Verifies validity of a PolyProjAlgo enum.