10#ifndef ROL_BUNDLE_U_DEF_H
11#define ROL_BUNDLE_U_DEF_H
17template<
typename Real>
20 for (
unsigned j = ind.back()+1; j <
size_; ++j) {
30 for (
unsigned i = ind.size()-1; i > 0; --i) {
31 for (
unsigned j = ind[i-1]+1; j <
size_; ++j) {
41template<
typename Real>
51template<
typename Real>
55 const unsigned remSize)
72template<
typename Real>
76 for (
unsigned i = 0; i <
maxSize_; ++i) {
93template<
typename Real>
98template<
typename Real>
103template<
typename Real>
108template<
typename Real>
113template<
typename Real>
118template<
typename Real>
124template<
typename Real>
133template<
typename Real>
138template<
typename Real>
143template<
typename Real>
145 Real
zero(0), one(1);
147 Real eLE(0), eDM(0), yLE(0), yDM(0), tLE(0), tDM(0);
148 for (
unsigned i = 0; i <
size_; ++i) {
158 tLE = aggLinErr + yLE;
159 eLE = (tLE - aggLinErr) - yLE;
164 tDM = aggDistMeas + yDM;
165 eDM = (tDM - aggDistMeas) - yDM;
170template<
typename Real>
174 unsigned loc =
size_, cnt = 0;
175 std::vector<unsigned> ind(
remSize_,0);
176 for (
unsigned i =
size_; i > 0; --i) {
182 for (
unsigned i = 0; i <
size_; ++i) {
198template<
typename Real>
204 for (
unsigned i = 0; i <
size_; ++i) {
225template<
typename Real>
230template<
typename Real>
235template<
typename Real>
240template<
typename Real>
242 Real one(1), half(0.5);
244 for (
unsigned i = 0; i <
size(); ++i) {
252 Real Hx(0), val(0), err(0), tmp(0), y(0);
253 for (
unsigned i = 0; i <
size(); ++i) {
258 y = x[i]*(half*Hx +
alpha(i)/t) - err;
260 err = (tmp - val) - y;
263 g[i] = Hx +
alpha(i)/t;
268template<
typename Real>
275template<
typename Real>
277 Real diffg =
gx_->dot(*
gx_),
zero(0), one(1), half(0.5);
Objective_SerialSimOpt(const Ptr< Obj > &obj, const V &ui) z0 zero)()
Contains definitions of custom data types in ROL.
void update(const bool flag, const Real linErr, const Real distMeas, const Vector< Real > &g, const Vector< Real > &s)
const Real alpha(const unsigned i) const
Real evaluateObjective(std::vector< Real > &g, const std::vector< Real > &x, const Real t) const
Ptr< Vector< Real > > gx_
const Real getDualVariable(const unsigned i) const
void resetDualVariables(void)
unsigned size(void) const
const Real computeAlpha(const Real dm, const Real le) const
const Vector< Real > & subgradient(const unsigned i) const
unsigned solveDual_dim1(const Real t, const unsigned maxit=1000, const Real tol=1.e-8)
std::vector< Real > dualVariables_
Bundle_U(const unsigned maxSize=10, const Real coeff=0.0, const Real omega=2.0, const unsigned remSize=2)
const Real dotGi(const unsigned i, const Vector< Real > &x) const
const Real GiGj(const unsigned i, const unsigned j) const
std::vector< Real > linearizationErrors_
Ptr< Vector< Real > > yG_
Ptr< Vector< Real > > eG_
std::vector< Real > distanceMeasures_
Ptr< Vector< Real > > ge_
virtual void initialize(const Vector< Real > &g)
void addGi(const unsigned i, const Real a, Vector< Real > &x) const
void aggregate(Vector< Real > &aggSubGrad, Real &aggLinErr, Real &aggDistMeas) const
void add(const Vector< Real > &g, const Real le, const Real dm)
const Real distanceMeasure(const unsigned i) const
unsigned solveDual_dim2(const Real t, const unsigned maxit=1000, const Real tol=1.e-8)
std::vector< Ptr< Vector< Real > > > subgradients_
const Real linearizationError(const unsigned i) const
void reset(const Vector< Real > &g, const Real le, const Real dm)
void remove(const std::vector< unsigned > &ind)
Ptr< Vector< Real > > tG_
void setDualVariable(const unsigned i, const Real val)
Defines the linear algebra or vector space interface.
virtual void set(const Vector &x)
Set where .
virtual void zero()
Set to zero vector.
virtual ROL::Ptr< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
virtual void axpy(const Real alpha, const Vector &x)
Compute where .
virtual Real dot(const Vector &x) const =0
Compute where .
Real ROL_EPSILON(void)
Platform-dependent machine epsilon.
Real ROL_OVERFLOW(void)
Platform-dependent maximum double.