|
ROL
|
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. More...
#include <ROL_Objective_TimeSimOpt.hpp>
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.
This objective interface inherits from ROL_Objective_SimOpt. Though the interface takes two simulation space vectors from spaces \(\mathcal{U_o}\times\mathcal{U_n}\). The space \(\mathcal{U_o}\) is ``old'' information that accounts for the initial condition on the time interval.
Comments: It may be worthwhile to provide an implementation of OptimizationProblem for TimeSimOpt which recognizes this common use case and avoids unnecessary objective calls.
NOTE: As written, this interface is step agnostic, which needs to be changed if a final-time cost is desire or if the time-distributed cost is to be weighted non-uniformly
*/
namespace ROL {
template<typename Real> class Objective_TimeSimOpt : public Objective_SimOpt<Real> { private:
Get the end point of the time intervals vector template<int I> Vector<Real> & getVector(Vector<Real> & x) const { return *(static_cast<PartitionedVector<Real>&>(x).get(I)); }
template<int I> const Vector<Real> & getVector(const Vector<Real> & x) const { return *(static_cast<const PartitionedVector<Real>&>(x).get(I)); }
mutable VectorWorkspace<Real> workspace_;
protected:
VectorWorkspace<Real>& getVectorWorkspace() const { return workspace_; }
public:
using Objective_SimOpt<Real>::Objective_SimOpt;
Interface functions (to be overloaded)
/** Update constraint functions.
u_old Is the state from the end of the previous time step. u_new Is the state from the end of this time step. z Is the control variable flag = true if optimization variable is changed, iter is the outer algorithm iterations count.