1 # ifndef CPPAD_CORE_AD_FUN_HPP
2 # define CPPAD_CORE_AD_FUN_HPP
149 template <
typename ADvector>
155 template <
class VectorSet>
166 template <
class VectorSet>
168 const std::set<size_t>& set_type ,
178 template <
class VectorSet>
189 template <
class VectorSet>
191 const std::set<size_t>& set_type ,
201 template <
class VectorSet>
210 template <
class VectorSet>
212 const std::set<size_t>& set_type ,
220 template <
class VectorSet>
230 template <
class VectorSet>
232 const std::set<size_t>& set_type ,
241 template <
class VectorBase,
class VectorSet,
class VectorSize>
243 const VectorBase& x ,
244 VectorSet& p_transpose ,
245 const VectorSize& row ,
246 const VectorSize& col ,
252 template <
class VectorBase,
class VectorSet,
class VectorSize>
254 const VectorBase& x ,
256 const VectorSize& row ,
257 const VectorSize& col ,
264 template <
class VectorBase,
class VectorSet,
class VectorSize>
266 const VectorBase& x ,
267 const VectorBase& w ,
268 VectorSet& sparsity ,
269 const VectorSize& row ,
270 const VectorSize& col ,
283 "ADFun(const ADFun& g)",
284 "Attempting to use the ADFun<Base> copy constructor.\n"
285 "Perhaps you are passing an ADFun<Base> object "
286 "by value instead of by reference."
298 template <
typename ADvector>
299 ADFun(
const ADvector &x,
const ADvector &y);
312 template <
typename ADvector>
313 void Dependent(
const ADvector &x,
const ADvector &y);
316 template <
typename VectorBase>
317 VectorBase
Forward(
size_t q,
size_t r,
const VectorBase& x);
320 template <
typename VectorBase>
322 const VectorBase& x, std::ostream& s = std::cout
326 template <
typename VectorBase>
327 VectorBase
Reverse(
size_t p,
const VectorBase &v);
331 template <
typename VectorSet>
333 size_t q,
const VectorSet &r,
bool transpose =
false,
334 bool dependency =
false
336 template <
typename VectorSet>
338 size_t q,
const VectorSet &s,
bool transpose =
false,
339 bool dependency =
false
342 template <
typename VectorBool>
344 const VectorBool& select_domain
346 template <
typename VectorBase,
typename SizeVector>
353 template <
typename SizeVector,
typename BaseVector>
355 const BaseVector& x ,
358 template <
typename BoolVector,
typename SizeVector,
typename BaseVector>
360 const BoolVector& select_domain ,
361 const BoolVector& select_range ,
362 const BaseVector& x ,
365 template <
typename SizeVector,
typename BaseVector>
368 const BaseVector& x ,
371 const std::string& coloring ,
374 template <
typename SizeVector,
typename BaseVector>
376 const BaseVector& x ,
379 const std::string& coloring ,
382 template <
typename SizeVector,
typename BaseVector>
384 const BaseVector& x ,
385 const BaseVector& w ,
388 const std::string& coloring ,
392 template <
typename BoolVector,
typename SizeVector>
394 const BoolVector& select_domain ,
395 const BoolVector& select_range ,
399 template <
typename SizeVector>
407 template <
typename SizeVector>
415 template <
typename BoolVector,
typename SizeVector>
417 const BoolVector& select_range ,
422 template <
typename BoolVector,
typename SizeVector>
424 const BoolVector& select_domain ,
425 const BoolVector& select_range ,
432 template <
typename VectorSet>
434 const VectorSet &r,
const VectorSet &s
445 template <
typename VectorSet>
447 size_t q,
const VectorSet &s,
bool transpose =
false
484 "size_forward_bool: argument not equal to zero"
497 "size_forward_bool: argument not equal to zero"
504 {
return play_.num_op_rec(); }
508 {
return play_.num_op_arg_rec(); }
512 {
return play_.Memory(); }
516 {
return play_.num_par_rec(); }
528 {
return play_.num_text_rec(); }
536 {
return play_.num_vec_ind_rec(); }
559 "Argument to Parameter is >= dimension of range space"
588 template <
typename VectorBase>
589 VectorBase
Jacobian(
const VectorBase &x);
592 template <
typename VectorBase>
593 VectorBase
Hessian(
const VectorBase &x,
const VectorBase &w);
594 template <
typename VectorBase>
595 VectorBase
Hessian(
const VectorBase &x,
size_t i);
598 template <
typename VectorBase>
600 const VectorBase &x ,
604 template <
typename VectorBase>
606 const VectorBase &x ,
610 template <
typename VectorBase,
typename VectorSize_t>
612 const VectorBase &x ,
613 const VectorSize_t &J ,
614 const VectorSize_t &K );
617 template <
typename VectorBase,
typename VectorSize_t>
619 const VectorBase &x ,
620 const VectorSize_t &I ,
621 const VectorSize_t &J );
624 template <
typename VectorBase>
628 template <
typename VectorBase,
typename VectorSet>
630 const VectorBase &x ,
633 template <
class VectorBase,
class VectorSet,
class VectorSize>
635 const VectorBase& x ,
637 const VectorSize& r ,
638 const VectorSize& c ,
642 template <
class VectorBase,
class VectorSet,
class VectorSize>
644 const VectorBase& x ,
646 const VectorSize& r ,
647 const VectorSize& c ,
653 template <
typename VectorBase>
655 const VectorBase& x ,
658 template <
typename VectorBase,
typename VectorBool>
660 const VectorBase& x ,
661 const VectorBase& w ,
664 template <
class VectorBase,
class VectorSet,
class VectorSize>
666 const VectorBase& x ,
667 const VectorBase& w ,
669 const VectorSize& r ,
670 const VectorSize& c ,
677 void optimize(
const std::string& options =
"" );
684 template <
typename ADvector>
715 {
return play_.num_vec_ind_rec() > 0; }
void ForSparseHesCheckpoint(vector< bool > &r, vector< bool > &s, local::sparse_list &h)
void rev_hes_sparsity(const BoolVector &select_range, bool transpose, bool internal_bool, sparse_rc< SizeVector > &pattern_out)
Reverse Hessian sparsity patterns.
Compute Reverse mode Hessian sparsity patterns.
size_t size_op(void) const
number of operators in the operation sequence
class used by SparseHessian to hold information so it does not need to be recomputed.
#define CPPAD_ASSERT_KNOWN(exp, msg)
Check that exp is true, if not print msg and terminate execution.
local::sparse_list for_jac_sparse_set_
Set results of the forward mode Jacobian sparsity calculations for_jac_sparse_set_.n_set() != 0 implies for_sparse_pack_ is empty.
size_t size_par(void) const
number of parameters in the operation sequence
Vector of sets of positive integers, each set stored as a singly linked list.
size_t SparseJacobianReverse(const VectorBase &x, const VectorSet &p, const VectorSize &r, const VectorSize &c, VectorBase &jac, sparse_jacobian_work &work)
Compute user specified subset of a sparse Jacobian using forward mode.
bool has_been_optimized_
Has this ADFun object been optmized.
Compute derivatives of arbitrary order Taylor coefficients.
size_t Range(void) const
number of dependent variables
size_t compare_change_op_index(void) const
operator index for the count-th comparison change
Class used to hold function objects.
size_t num_order_taylor_
number of orders stored in taylor_
void for_hes_sparsity(const BoolVector &select_domain, const BoolVector &select_range, bool internal_bool, sparse_rc< SizeVector > &pattern_out)
Forward Hessian sparsity patterns.
size_t compare_change_number(void) const
number of comparison operations that changed
bool use_VecAD(void) const
Deprecated: Does this AD operation sequence use VecAD<Base>::reference operands.
Declare the independent variables.
VectorBase ForTwo(const VectorBase &x, const VectorSize_t &J, const VectorSize_t &K)
forward mode calculation of a subset of second order partials
size_t cap_order_taylor_
maximum number of orders that will fit in taylor_
void RevSparseHesCheckpoint(size_t q, vector< bool > &s, bool transpose, local::sparse_list &h)
Hessian sparsity patterns calculation used by checkpoint functions.
subgraph information attached to a operation sequence
void subgraph_sparsity(const BoolVector &select_domain, const BoolVector &select_range, bool transpose, sparse_rc< SizeVector > &pattern_out)
Subgraph sparsity patterns.
local::pod_vector< Base > subgraph_partial_
Memory used for subgraph reverse mode calculations. Declared here to avoid reallocation for each call...
void size_forward_bool(size_t zero)
free memory used for Jacobain sparsity pattern
void capacity_order(size_t c)
set number of orders currently allocated (user API)
local::sparse_pack for_jac_sparse_pack_
Packed results of the forward mode Jacobian sparsity calculations. for_jac_sparse_pack_.n_set() != 0 implies other sparsity results are empty.
void abs_normal_fun(ADFun &g, ADFun &a) const
void capacity_taylor(size_t per_var)
Deprecated: set number of orders currently allocated (per variable,direction)
Compute Reverse mode Jacobian sparsity patterns.
void subgraph_jac_rev(const BaseVector &x, sparse_rcv< SizeVector, BaseVector > &subset)
Subgraph sparsity patterns.
VectorBase SparseJacobian(const VectorBase &x)
calculate sparse Jacobians
VectorBase RevOne(const VectorBase &x, size_t i)
reverse mode calculation of derivative of one range component
Class used to store and play back an operation sequence recording.
Compute Forward mode Hessian sparsity patterns.
Sparse matrices with elements of type Scalar.
bool check_for_nan(void) const
get check_for_nan
void for_jac_sparsity(const sparse_rc< SizeVector > &pattern_in, bool transpose, bool dependency, bool internal_bool, sparse_rc< SizeVector > &pattern_out)
Forward Jacobian sparsity patterns.
VectorBase RevTwo(const VectorBase &x, const VectorSize_t &I, const VectorSize_t &J)
reverse mode calculation of a subset of second order partials
size_t SparseJacobianForward(const VectorBase &x, const VectorSet &p, const VectorSize &r, const VectorSize &c, VectorBase &jac, sparse_jacobian_work &work)
Compute user specified subset of a sparse Jacobian using forward mode.
size_t memory(void) const
Amount of memory used by this vector of sets.
void ForSparseJacCheckpoint(size_t q, const local::sparse_list &r, bool transpose, bool dependency, local::sparse_list &s)
Forward mode Jacobian sparsity calculation used by checkpoint functions.
CppAD::vector< size_t > ind_taddr_
tape address for the independent variables
size_t size_taylor(void) const
Deprecated: # taylor_ coefficient orders calculated (per variable,direction)
VectorBase Jacobian(const VectorBase &x)
calculate entire Jacobian
Compute Forward mode Jacobian sparsity patterns.
size_t size_var(void) const
number of variables in opertion sequence
void RevSparseJacCase(bool set_type, bool transpose, bool dependency, size_t p, const VectorSet &s, VectorSet &r)
Private helper function for RevSparseJac(q, r, transpose) boolean sparsity.
size_t size_op_seq(void) const
amount of memory required for the operation sequence
local::player< Base > play_
the operation sequence corresponding to this object
size_t size(void) const
number of elements currently in this vector.
size_t memory(void) const
Amount of memory used by this vector of sets.
VectorSet RevSparseJac(size_t q, const VectorSet &s, bool transpose=false, bool dependency=false)
User API for Jacobian sparsity patterns using reverse mode.
void ForSparseJacCase(bool set_type, bool transpose, bool dependency, size_t q, const VectorSet &r, VectorSet &s)
Private helper function for ForSparseJac(q, r) boolean sparsity patterns.
Vector of sets of postivie integers, each set stored as a packed boolean array.
VectorSet RevSparseHes(size_t q, const VectorSet &s, bool transpose=false)
User API for Hessian sparsity patterns using reverse mode.
static void Call(bool known, int line, const char *file, const char *exp, const char *msg)
Different versions of Dependent function.
Compute one Taylor coefficient for each direction requested.
size_t CompareChange(void) const
Deprecated: number of comparison operations that changed for the previous zero order forward (than wh...
sparsity pattern for a matrix with indices of type size_t
size_t num_var_tape_
number of variables in the recording (play_)
void RevSparseJacCheckpoint(size_t q, const local::sparse_list &r, bool transpose, bool dependency, local::sparse_list &s)
Reverse mode Jacobian sparsity calculation used by checkpoint functions.
void ForSparseHesCase(bool set_type, const VectorSet &r, const VectorSet &s, VectorSet &h)
Private helper function for ForSparseHes(q, s) bool sparsity.
size_t size_forward_set(void) const
amount of memory used for vector of set Jacobain sparsity pattern
void Dependent(local::ADTape< Base > *tape, const ADvector &y)
change the operation sequence corresponding to this object
size_t SparseJacobianFor(const VectorBase &x, VectorSet &p_transpose, const VectorSize &row, const VectorSize &col, VectorBase &jac, sparse_jacobian_work &work)
Private helper function forward mode cases.
VectorBase ForOne(const VectorBase &x, size_t j)
forward mode calculation of partial w.r.t one domain component
Compute zero order forward mode Taylor coefficients.
size_t sparse_jac_for(size_t group_max, const BaseVector &x, sparse_rcv< SizeVector, BaseVector > &subset, const sparse_rc< SizeVector > &pattern, const std::string &coloring, sparse_jac_work &work)
Calculate sparse Jacobains using forward mode.
size_t taylor_size(void) const
Deprecated: # taylor_ coefficient orderss stored (per variable,direction)
class used by SparseJacobian to hold information so it does not need to be recomputed.
size_t Order(void) const
Deprecated: # taylor_ coefficients currently stored (per variable,direction)
Class used to hold information used by Sparse Hessian routine in this file, so it does not need to be...
size_t sparse_hes(const BaseVector &x, const BaseVector &w, sparse_rcv< SizeVector, BaseVector > &subset, const sparse_rc< SizeVector > &pattern, const std::string &coloring, sparse_hes_work &work)
Calculate sparse Hessians using forward mode.
local::pod_vector< bool > cskip_op_
which operations can be conditionally skipped Set during forward pass of order zero ...
VectorSet ForSparseHes(const VectorSet &r, const VectorSet &s)
User API for Hessian sparsity patterns using reverse mode.
ADFun(const ADFun &g)
copy constructor
void size_forward_set(size_t zero)
free memory used for Jacobain sparsity pattern
bool check_for_nan_
Check for nan's and report message to user (default value is true).
void optimize(const std::string &options="")
Optimize a player object operation sequence.
bool Parameter(size_t i)
is variable a parameter
VectorBase Forward(size_t q, size_t r, const VectorBase &x)
forward mode user API, one order multiple directions.
void compare_change_count(size_t count)
count as which to store operator index
void operator=(const ADFun &f)
ADFun assignment operator.
size_t SparseJacobianRev(const VectorBase &x, VectorSet &p, const VectorSize &row, const VectorSize &col, VectorBase &jac, sparse_jacobian_work &work)
Private helper function for reverse mode cases.
VectorSet ForSparseJac(size_t q, const VectorSet &r, bool transpose=false, bool dependency=false)
User API for Jacobian sparsity patterns using forward mode.
void resize(size_t n_set, size_t end)
Start a new vector of sets.
ADFun(void)
default constructor
size_t number_skip(void)
number of variables in conditional expressions that can be skipped
Class used to hold information used by Sparse Jacobian routines in this file, so they do not need to ...
size_t compare_change_count_
If zero, ignoring comparison operators. Otherwise is the compare change count at which to store the o...
size_t num_direction_taylor_
number of directions stored in taylor_
size_t size_forward_bool(void) const
amount of memory used for boolean Jacobain sparsity pattern
Class used to hold tape that records AD<Base> operations.
size_t Size(void) const
Deprecated: number of variables in opertion sequence.
ADFun function constructors and assignment operator.
size_t Domain(void) const
number of independent variables
size_t Memory(void) const
Deprecated: amount of memory for this object Note that an approximation is used for the std::set<size...
void subgraph_reverse(const VectorBool &select_domain)
Initialize reverse mode derivative computation on subgraphs.
VectorBase SparseHessian(const VectorBase &x, const VectorBase &w)
calculate sparse Hessians
size_t SparseHessianCompute(const VectorBase &x, const VectorBase &w, VectorSet &sparsity, const VectorSize &row, const VectorSize &col, VectorBase &hes, sparse_hessian_work &work)
Private helper function that does computation for all Sparse Hessian cases.
size_t size_VecAD(void) const
number of VecAD indices in the operation sequence
VectorBase Hessian(const VectorBase &x, const VectorBase &w)
calculate Hessian for one component of f
CppAD::vector< bool > dep_parameter_
which dependent variables are actually parameters
size_t size_order(void) const
number taylor coefficient orders calculated
size_t compare_change_op_index_
If compare_change_count is zero, compare_change_op_index_ is also zero. Otherwise it is the operator...
local::pod_vector< addr_t > load_op_
Variable on the tape corresponding to each vecad load operation (if zero, the operation corresponds t...
size_t size_direction(void) const
number taylor coefficient directions calculated
size_t memory(void) const
amount of memory corresonding to this object
CppAD::vector< size_t > dep_taddr_
tape address and parameter flag for the dependent variables
size_t size_text(void) const
number of characters in the operation sequence
Compute one Taylor coefficient for each order requested.
size_t size_op_arg(void) const
number of operator arguments in the operation sequence
size_t sparse_jac_rev(const BaseVector &x, sparse_rcv< SizeVector, BaseVector > &subset, const sparse_rc< SizeVector > &pattern, const std::string &coloring, sparse_jac_work &work)
Calculate sparse Jacobains using reverse mode.
void RevSparseHesCase(bool set_type, bool transpose, size_t q, const VectorSet &s, VectorSet &h)
Private helper function for RevSparseHes(q, s) bool sparsity.
local::pod_vector< Base > taylor_
results of the forward mode calculations
void rev_jac_sparsity(const sparse_rc< SizeVector > &pattern_in, bool transpose, bool dependency, bool internal_bool, sparse_rc< SizeVector > &pattern_out)
Reverse Jacobian sparsity patterns.
local::subgraph::subgraph_info subgraph_info_
subgraph information for this object
class for maintaining subgraph information attached to on ADFun object.
VectorBase Reverse(size_t p, const VectorBase &v)
reverse mode sweep
size_t compare_change_number_
If compare_change_count_ is zero, compare_change_number_ is also zero. Otherwise, it is set to the nu...
void resize(size_t n_set, size_t end)
Change number of sets, set end, and initialize all sets as empty.
Optimize a player object operation sequence.