ROL
ROL_DynamicObjective.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 #pragma once
11 #ifndef ROL_DYNAMICOBJECTIVE_HPP
12 #define ROL_DYNAMICOBJECTIVE_HPP
13 
14 #include "ROL_DynamicFunction.hpp"
15 
16 
35 namespace ROL {
36 
37 template<typename Real>
38 class DynamicObjective : public DynamicFunction<Real> {
39 public:
40 
41  using V = Vector<Real>;
43 
44 
45  DynamicObjective( std::initializer_list<std::string> zero_deriv_terms={} ) :
46  DynamicFunction<Real>( zero_deriv_terms ) {}
47 
48  virtual ~DynamicObjective() {}
49 
50  virtual void update( const V& uo, const V& un, const V& z, const TS& timeStamp ) {
51  update_uo( uo, timeStamp );
52  update_un( un, timeStamp );
53  update_z( z, timeStamp );
54  }
55 
59 
60  virtual Real value( const V& uo, const V& un,
61  const V& z, const TS& timeStamp ) const = 0;
62 
63  //----------------------------------------------------------------------------
64  // Gradient Terms
65  virtual void gradient_uo( V& g, const V& uo, const V& un,
66  const V& z, const TS& timeStamp ) const {}
67 
68  virtual void gradient_un( V& g, const V& uo, const V& un,
69  const V& z, const TS& timeStamp ) const {}
70 
71  virtual void gradient_z( V& g, const V& uo, const V& un,
72  const V& z, const TS& timeStamp ) const {}
73 
74  //----------------------------------------------------------------------------
75  // Hessian-Vector product terms
76  virtual void hessVec_uo_uo( V& hv, const V& v, const V& uo, const V& un,
77  const V& z, const TS& timeStamp ) const {}
78 
79  virtual void hessVec_uo_un( V& hv, const V& v, const V& uo, const V& un,
80  const V& z, const TS& timeStamp ) const {}
81 
82  virtual void hessVec_uo_z( V& hv, const V& v, const V& uo, const V& un,
83  const V& z, const TS& timeStamp ) const {}
84 
85 
86  virtual void hessVec_un_uo( V& hv, const V& v, const V& uo, const V& un,
87  const V& z, const TS& timeStamp ) const {}
88 
89  virtual void hessVec_un_un( V& hv, const V& v, const V& uo, const V& un,
90  const V& z, const TS& timeStamp ) const {}
91 
92  virtual void hessVec_un_z( V& hv, const V& v, const V& uo, const V& un,
93  const V& z, const TS& timeStamp ) const {}
94 
95 
96  virtual void hessVec_z_uo( V& hv, const V& v, const V& uo, const V& un,
97  const V& z, const TS& timeStamp ) const {}
98 
99  virtual void hessVec_z_un( V& hv, const V& v, const V& uo, const V& un,
100  const V& z, const TS& timeStamp ) const {}
101 
102  virtual void hessVec_z_z( V& hv, const V& v, const V& uo, const V& un,
103  const V& z, const TS& timeStamp ) const {}
104 };
105 
106 } // namespace ROL
107 
108 
109 #endif // ROL_DYNAMICOBJECTIVE_HPP
110 
virtual void hessVec_z_un(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
Provides update interface, casting and vector management to DynamicConstraint and DynamicObjective...
Defines the linear algebra or vector space interface.
Definition: ROL_Vector.hpp:46
Defines the time-dependent objective function interface for simulation-based optimization. Computes time-local contributions of value, gradient, Hessian-vector product etc to a larger composite objective defined over the simulation time. In contrast to other objective classes Objective_TimeSimOpt has a default implementation of value which returns zero, as time-dependent simulation based optimization problems may have an objective value which depends only on the final state of the system.
virtual void hessVec_un_z(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
Vector< Real > V
virtual void update_z(const V &x, const TS &ts)
virtual void update_uo(const V &x, const TS &ts)
virtual void hessVec_z_z(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual void hessVec_uo_un(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual void gradient_z(V &g, const V &uo, const V &un, const V &z, const TS &timeStamp) const
DynamicObjective(std::initializer_list< std::string > zero_deriv_terms={})
virtual void hessVec_uo_uo(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual void hessVec_un_un(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual void gradient_un(V &g, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual void update(const V &uo, const V &un, const V &z, const TS &timeStamp)
virtual void update_un(const V &x, const TS &ts)
virtual void hessVec_un_uo(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual void hessVec_z_uo(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual void hessVec_uo_z(V &hv, const V &v, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual void gradient_uo(V &g, const V &uo, const V &un, const V &z, const TS &timeStamp) const
virtual Real value(const V &uo, const V &un, const V &z, const TS &timeStamp) const =0