MPQC  2.3.1
function.h
1 //
2 // function.h
3 //
4 // Copyright (C) 1996 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifdef __GNUC__
29 #pragma interface
30 #endif
31 
32 #ifndef _math_optimize_function_h
33 #define _math_optimize_function_h
34 
35 #include <math.h>
36 #include <float.h>
37 
38 #include <util/state/state.h>
39 #include <math/optimize/transform.h>
40 #include <math/scmat/matrix.h>
41 #include <math/scmat/result.h>
42 
43 namespace sc {
44 
48 class Function: virtual public SavableState, public Compute {
49  protected:
51 
57 
62  virtual void set_value(double);
63  virtual void set_gradient(RefSCVector&);
64  virtual void set_hessian(RefSymmSCMatrix&);
66 
69  virtual void set_matrixkit(const Ref<SCMatrixKit>&);
70  virtual void set_dimension(const RefSCDimension&);
71 
76  virtual void set_actual_value_accuracy(double);
77  virtual void set_actual_gradient_accuracy(double);
78  virtual void set_actual_hessian_accuracy(double);
80 
83 
87  public:
88  Function();
89  Function(StateIn&);
90  Function(const Function&);
91 
108  Function(const Ref<KeyVal>&, double funcacc = DBL_EPSILON,
109  double gradacc = DBL_EPSILON, double hessacc = DBL_EPSILON);
110  virtual ~Function();
111 
112  Function & operator=(const Function&);
113 
116  Ref<SCMatrixKit> matrixkit() const;
118  RefSCDimension dimension() const;
119 
120  virtual void save_data_state(StateOut&);
121 
123  virtual double value();
125  int value_needed() const;
129  int do_value(int);
130  AccResultdouble& value_result() { return value_; }
131 
133  virtual void set_desired_value_accuracy(double);
135  virtual double actual_value_accuracy() const;
137  virtual double desired_value_accuracy() const;
138 
143  virtual RefSCVector gradient();
144  int gradient_needed() const;
145  int do_gradient(int);
146  virtual void set_desired_gradient_accuracy(double);
147  virtual double actual_gradient_accuracy() const;
148  virtual double desired_gradient_accuracy() const;
149  AccResultRefSCVector& gradient_result() { return gradient_; }
151 
156  virtual RefSymmSCMatrix hessian();
157  int hessian_needed() const;
158  int do_hessian(int);
159  virtual void set_desired_hessian_accuracy(double);
160  virtual double actual_hessian_accuracy() const;
161  virtual double desired_hessian_accuracy() const;
162  AccResultRefSymmSCMatrix& hessian_result() { return hessian_; }
164 
165  // hessian by gradients at finite displacements
166  // virtual RefSCMatrix fd1_hessian();
167 
169  virtual void guess_hessian(RefSymmSCMatrix&);
170  virtual RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix&);
171 
174  virtual int value_implemented() const;
175  virtual int gradient_implemented() const;
176  virtual int hessian_implemented() const;
177 
179  virtual void set_x(const RefSCVector&);
180  RefSCVector get_x() const { return x_.copy(); }
181  const RefSCVector& get_x_no_copy() const { return x_; }
182 
189  virtual Ref<NonlinearTransform> change_coordinates();
190 
192  virtual void print(std::ostream& = ExEnv::out0()) const;
193 };
194 
195 }
196 
197 #endif
198 
199 // Local Variables:
200 // mode: c++
201 // c-file-style: "CLJ"
202 // End:
sc::Function::matrixkit_
Ref< SCMatrixKit > matrixkit_
Used to construct new matrices.
Definition: function.h:50
sc::Function::matrixkit
Ref< SCMatrixKit > matrixkit() const
Return the SCMatrixKit used to construct vectors and matrices.
sc::RefSymmSCMatrix
The RefSymmSCMatrix class is a smart pointer to an SCSymmSCMatrix specialization.
Definition: matrix.h:261
sc::Function::dim_
RefSCDimension dim_
The dimension of x_.
Definition: function.h:53
sc::Function::set_desired_value_accuracy
virtual void set_desired_value_accuracy(double)
Set the accuracy to which the value is to be computed.
sc::Ref
A template class that maintains references counts.
Definition: ref.h:332
sc::Function::print
virtual void print(std::ostream &=ExEnv::out0()) const
Print information about the object.
sc::Function::desired_value_accuracy
virtual double desired_value_accuracy() const
Return the accuracy with which the value is to be computed.
sc::Function
The Function class is an abstract base class that, given a set of coordinates, will compute a value a...
Definition: function.h:48
sc::AccResult< RefSCVector >
sc::Function::gradient_
AccResultRefSCVector gradient_
The gradient at x_.
Definition: function.h:55
sc::Function::do_value
int do_value(int)
If passed a nonzero number, compute the value the next time compute() is called.
sc::StateIn
Restores objects that derive from SavableState.
Definition: statein.h:70
sc::RefSCDimension
The RefSCDimension class is a smart pointer to an SCDimension specialization.
Definition: dim.h:156
sc::Function::actual_value_accuracy
virtual double actual_value_accuracy() const
Return the accuracy with which the value has been computed.
sc::Function::hessian_
AccResultRefSymmSCMatrix hessian_
The hessian at x_.
Definition: function.h:56
sc::Compute::obsolete
virtual void obsolete()
Marks all results as being out of date.
sc::Function::set_x
virtual void set_x(const RefSCVector &)
Set and retrieve the coordinate values.
sc::Function::get_x_reference
RefSCVector & get_x_reference()
Get read/write access to the coordinates for modification.
Definition: function.h:82
sc::Function::dimension
RefSCDimension dimension() const
Return the SCDimension of the problem.
sc::Function::save_data_state
virtual void save_data_state(StateOut &)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
sc::Function::guess_hessian
virtual void guess_hessian(RefSymmSCMatrix &)
Compute a quick, approximate hessian.
sc::RefSCVector
The RefSCVector class is a smart pointer to an SCVector specialization.
Definition: matrix.h:55
sc::StateOut
Serializes objects that derive from SavableState.
Definition: stateout.h:61
sc::Compute
The Compute class provides a means of keeping results up to date.
Definition: compute.h:55
sc::Function::value_
AccResultdouble value_
The value of the function at x_.
Definition: function.h:54
sc::NCAccResult< double >
sc::Function::value_implemented
virtual int value_implemented() const
Information about the availability of values, gradients, and hessians.
sc::Function::value
virtual double value()
Return the value of the function.
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.
sc::Function::x_
RefSCVector x_
The variables.
Definition: function.h:52
sc::SavableState
Base class for objects that can save/restore state.
Definition: state.h:46
sc::Function::change_coordinates
virtual Ref< NonlinearTransform > change_coordinates()
An optimizer can call change coordinates periodically to give the function an opportunity to change i...
sc::Function::value_needed
int value_needed() const
Returns nonzero if the current value is not up-to-date.
sc::Function::set_matrixkit
virtual void set_matrixkit(const Ref< SCMatrixKit > &)
Set the SCMatrixKit that should be used to construct the requisite vectors and matrices.
sc::Function::do_change_coordinates
void do_change_coordinates(const Ref< NonlinearTransform > &)
Change the coordinate system and apply the given transform to intermediates matrices and vectors.

Generated at Sun Jan 26 2020 23:33:03 for MPQC 2.3.1 using the documentation package Doxygen 1.8.16.