CppAD: A C++ Algorithmic Differentiation Package  20171217
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ad_fun.hpp
Go to the documentation of this file.
1 # ifndef CPPAD_CORE_AD_FUN_HPP
2 # define CPPAD_CORE_AD_FUN_HPP
3 
4 /* --------------------------------------------------------------------------
5 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-17 Bradley M. Bell
6 
7 CppAD is distributed under multiple licenses. This distribution is under
8 the terms of the
9  Eclipse Public License Version 1.0.
10 
11 A copy of this license is included in the COPYING file of this distribution.
12 Please visit http://www.coin-or.org/CppAD/ for information on other licenses.
13 -------------------------------------------------------------------------- */
14 /*
15 $begin ADFun$$
16 $spell
17  xk
18  Ind
19  bool
20  taylor_
21  sizeof
22  const
23  std
24  ind_taddr_
25  dep_taddr_
26 $$
27 
28 $spell
29 $$
30 
31 $section ADFun Objects$$
32 
33 
34 $head Purpose$$
35 An AD of $icode Base$$
36 $cref/operation sequence/glossary/Operation/Sequence/$$
37 is stored in an $code ADFun$$ object by its $cref FunConstruct$$.
38 The $code ADFun$$ object can then be used to calculate function values,
39 derivative values, and other values related to the corresponding function.
40 
41 $childtable%
42  omh/adfun.omh%
43  cppad/core/optimize.hpp%
44  example/abs_normal/abs_normal.omh%
45  cppad/core/fun_check.hpp%
46  cppad/core/check_for_nan.hpp
47 %$$
48 
49 $end
50 */
52 
53 namespace CppAD { // BEGIN_CPPAD_NAMESPACE
54 /*!
55 \file ad_fun.hpp
56 File used to define the ADFun<Base> class.
57 */
58 
59 /*!
60 Class used to hold function objects
61 
62 \tparam Base
63 A function object has a recording of <tt>AD<Base></tt> operations.
64 It does it calculations using \c Base operations.
65 */
66 
67 
68 template <class Base>
69 class ADFun {
70 // ------------------------------------------------------------
71 // Private member variables
72 private:
73  /// Has this ADFun object been optmized
75 
76  /// Check for nan's and report message to user (default value is true).
78 
79  /// If zero, ignoring comparison operators. Otherwise is the
80  /// compare change count at which to store the operator index.
82 
83  /// If compare_change_count_ is zero, compare_change_number_ is also zero.
84  /// Otherwise, it is set to the number of comparison operations that had a
85  /// different result during the subsequent zero order forward.
87 
88  /// If compare_change_count is zero, compare_change_op_index_ is also
89  /// zero. Otherwise it is the operator index for the comparison operator
90  //// that corresponded to the number changing from count-1 to count.
92 
93  /// number of orders stored in taylor_
95 
96  /// maximum number of orders that will fit in taylor_
98 
99  /// number of directions stored in taylor_
101 
102  /// number of variables in the recording (play_)
104 
105  /// tape address for the independent variables
107 
108  /// tape address and parameter flag for the dependent variables
110 
111  /// which dependent variables are actually parameters
113 
114  /// results of the forward mode calculations
116 
117  /// Memory used for subgraph reverse mode calculations.
118  /// Declared here to avoid reallocation for each call to subgraph_reverse.
119  /// Not in subgraph_info_ because it depends on Base.
121 
122  /// which operations can be conditionally skipped
123  /// Set during forward pass of order zero
125 
126  /// Variable on the tape corresponding to each vecad load operation
127  /// (if zero, the operation corresponds to a parameter).
129 
130  /// the operation sequence corresponding to this object
132 
133  /// Packed results of the forward mode Jacobian sparsity calculations.
134  /// for_jac_sparse_pack_.n_set() != 0 implies other sparsity results
135  /// are empty
137 
138  /// Set results of the forward mode Jacobian sparsity calculations
139  /// for_jac_sparse_set_.n_set() != 0 implies for_sparse_pack_ is empty.
141 
142  /// subgraph information for this object
144 
145 // ------------------------------------------------------------
146 // Private member functions
147 
148  /// change the operation sequence corresponding to this object
149  template <typename ADvector>
150  void Dependent(local::ADTape<Base> *tape, const ADvector &y);
151 
152  // ------------------------------------------------------------
153  // vector of bool version of ForSparseJac
154  // (see doxygen in for_sparse_jac.hpp)
155  template <class VectorSet>
156  void ForSparseJacCase(
157  bool set_type ,
158  bool transpose ,
159  bool dependency,
160  size_t q ,
161  const VectorSet& r ,
162  VectorSet& s
163  );
164  // vector of std::set<size_t> version of ForSparseJac
165  // (see doxygen in for_sparse_jac.hpp)
166  template <class VectorSet>
167  void ForSparseJacCase(
168  const std::set<size_t>& set_type ,
169  bool transpose ,
170  bool dependency,
171  size_t q ,
172  const VectorSet& r ,
173  VectorSet& s
174  );
175  // ------------------------------------------------------------
176  // vector of bool version of RevSparseJac
177  // (see doxygen in rev_sparse_jac.hpp)
178  template <class VectorSet>
179  void RevSparseJacCase(
180  bool set_type ,
181  bool transpose ,
182  bool dependency,
183  size_t p ,
184  const VectorSet& s ,
185  VectorSet& r
186  );
187  // vector of std::set<size_t> version of RevSparseJac
188  // (see doxygen in rev_sparse_jac.hpp)
189  template <class VectorSet>
190  void RevSparseJacCase(
191  const std::set<size_t>& set_type ,
192  bool transpose ,
193  bool dependency,
194  size_t p ,
195  const VectorSet& s ,
196  VectorSet& r
197  );
198  // ------------------------------------------------------------
199  // vector of bool version of ForSparseHes
200  // (see doxygen in for_sparse_hes.hpp)
201  template <class VectorSet>
202  void ForSparseHesCase(
203  bool set_type ,
204  const VectorSet& r ,
205  const VectorSet& s ,
206  VectorSet& h
207  );
208  // vector of std::set<size_t> version of ForSparseHes
209  // (see doxygen in for_sparse_hes.hpp)
210  template <class VectorSet>
211  void ForSparseHesCase(
212  const std::set<size_t>& set_type ,
213  const VectorSet& r ,
214  const VectorSet& s ,
215  VectorSet& h
216  );
217  // ------------------------------------------------------------
218  // vector of bool version of RevSparseHes
219  // (see doxygen in rev_sparse_hes.hpp)
220  template <class VectorSet>
221  void RevSparseHesCase(
222  bool set_type ,
223  bool transpose ,
224  size_t q ,
225  const VectorSet& s ,
226  VectorSet& h
227  );
228  // vector of std::set<size_t> version of RevSparseHes
229  // (see doxygen in rev_sparse_hes.hpp)
230  template <class VectorSet>
231  void RevSparseHesCase(
232  const std::set<size_t>& set_type ,
233  bool transpose ,
234  size_t q ,
235  const VectorSet& s ,
236  VectorSet& h
237  );
238  // ------------------------------------------------------------
239  // Forward mode version of SparseJacobian
240  // (see doxygen in sparse_jacobian.hpp)
241  template <class VectorBase, class VectorSet, class VectorSize>
242  size_t SparseJacobianFor(
243  const VectorBase& x ,
244  VectorSet& p_transpose ,
245  const VectorSize& row ,
246  const VectorSize& col ,
247  VectorBase& jac ,
249  );
250  // Reverse mode version of SparseJacobian
251  // (see doxygen in sparse_jacobian.hpp)
252  template <class VectorBase, class VectorSet, class VectorSize>
253  size_t SparseJacobianRev(
254  const VectorBase& x ,
255  VectorSet& p ,
256  const VectorSize& row ,
257  const VectorSize& col ,
258  VectorBase& jac ,
260  );
261  // ------------------------------------------------------------
262  // combined sparse_list and sparse_pack version of
263  // SparseHessian (see doxygen in sparse_hessian.hpp)
264  template <class VectorBase, class VectorSet, class VectorSize>
265  size_t SparseHessianCompute(
266  const VectorBase& x ,
267  const VectorBase& w ,
268  VectorSet& sparsity ,
269  const VectorSize& row ,
270  const VectorSize& col ,
271  VectorBase& hes ,
272  sparse_hessian_work& work
273  );
274 // ------------------------------------------------------------
275 public:
276  /// copy constructor
277  ADFun(const ADFun& g)
278  : num_var_tape_(0)
280  true,
281  __LINE__,
282  __FILE__,
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."
287  );
288  }
289 
290  /// default constructor
291  ADFun(void);
292 
293  // assignment operator
294  // (see doxygen in fun_construct.hpp)
295  void operator=(const ADFun& f);
296 
297  /// sequence constructor
298  template <typename ADvector>
299  ADFun(const ADvector &x, const ADvector &y);
300 
301  /// destructor
302  ~ADFun(void)
303  { }
304 
305  /// set check_for_nan
306  void check_for_nan(bool value);
307 
308  /// get check_for_nan
309  bool check_for_nan(void) const;
310 
311  /// assign a new operation sequence
312  template <typename ADvector>
313  void Dependent(const ADvector &x, const ADvector &y);
314 
315  /// forward mode user API, one order multiple directions.
316  template <typename VectorBase>
317  VectorBase Forward(size_t q, size_t r, const VectorBase& x);
318 
319  /// forward mode user API, multiple directions one order.
320  template <typename VectorBase>
321  VectorBase Forward(size_t q,
322  const VectorBase& x, std::ostream& s = std::cout
323  );
324 
325  /// reverse mode sweep
326  template <typename VectorBase>
327  VectorBase Reverse(size_t p, const VectorBase &v);
328 
329  // ---------------------------------------------------------------------
330  // Jacobian sparsity
331  template <typename VectorSet>
332  VectorSet ForSparseJac(
333  size_t q, const VectorSet &r, bool transpose = false,
334  bool dependency = false
335  );
336  template <typename VectorSet>
337  VectorSet RevSparseJac(
338  size_t q, const VectorSet &s, bool transpose = false,
339  bool dependency = false
340  );
341  // ---------------------------------------------------------------------
342  template <typename VectorBool>
343  void subgraph_reverse(
344  const VectorBool& select_domain
345  );
346  template <typename VectorBase, typename SizeVector>
347  void subgraph_reverse(
348  size_t q ,
349  size_t ell ,
350  SizeVector& col ,
351  VectorBase& dw
352  );
353  template <typename SizeVector, typename BaseVector>
354  void subgraph_jac_rev(
355  const BaseVector& x ,
357  );
358  template <typename BoolVector, typename SizeVector, typename BaseVector>
359  void subgraph_jac_rev(
360  const BoolVector& select_domain ,
361  const BoolVector& select_range ,
362  const BaseVector& x ,
364  );
365  template <typename SizeVector, typename BaseVector>
366  size_t sparse_jac_for(
367  size_t group_max ,
368  const BaseVector& x ,
370  const sparse_rc<SizeVector>& pattern ,
371  const std::string& coloring ,
372  sparse_jac_work& work
373  );
374  template <typename SizeVector, typename BaseVector>
375  size_t sparse_jac_rev(
376  const BaseVector& x ,
378  const sparse_rc<SizeVector>& pattern ,
379  const std::string& coloring ,
380  sparse_jac_work& work
381  );
382  template <typename SizeVector, typename BaseVector>
383  size_t sparse_hes(
384  const BaseVector& x ,
385  const BaseVector& w ,
387  const sparse_rc<SizeVector>& pattern ,
388  const std::string& coloring ,
389  sparse_hes_work& work
390  );
391  // ---------------------------------------------------------------------
392  template <typename BoolVector, typename SizeVector>
393  void subgraph_sparsity(
394  const BoolVector& select_domain ,
395  const BoolVector& select_range ,
396  bool transpose ,
397  sparse_rc<SizeVector>& pattern_out
398  );
399  template <typename SizeVector>
400  void for_jac_sparsity(
401  const sparse_rc<SizeVector>& pattern_in ,
402  bool transpose ,
403  bool dependency ,
404  bool internal_bool ,
405  sparse_rc<SizeVector>& pattern_out
406  );
407  template <typename SizeVector>
408  void rev_jac_sparsity(
409  const sparse_rc<SizeVector>& pattern_in ,
410  bool transpose ,
411  bool dependency ,
412  bool internal_bool ,
413  sparse_rc<SizeVector>& pattern_out
414  );
415  template <typename BoolVector, typename SizeVector>
416  void rev_hes_sparsity(
417  const BoolVector& select_range ,
418  bool transpose ,
419  bool internal_bool ,
420  sparse_rc<SizeVector>& pattern_out
421  );
422  template <typename BoolVector, typename SizeVector>
423  void for_hes_sparsity(
424  const BoolVector& select_domain ,
425  const BoolVector& select_range ,
426  bool internal_bool ,
427  sparse_rc<SizeVector>& pattern_out
428  );
429  // ---------------------------------------------------------------------
430  // forward mode Hessian sparsity
431  // (see doxygen documentation in for_sparse_hes.hpp)
432  template <typename VectorSet>
433  VectorSet ForSparseHes(
434  const VectorSet &r, const VectorSet &s
435  );
436  // internal set sparsity version of ForSparseHes
437  // (used by checkpoint functions only)
439  vector<bool>& r ,
440  vector<bool>& s ,
442  );
443  // reverse mode Hessian sparsity
444  // (see doxygen documentation in rev_sparse_hes.hpp)
445  template <typename VectorSet>
446  VectorSet RevSparseHes(
447  size_t q, const VectorSet &s, bool transpose = false
448  );
449  // internal set sparsity version of RevSparseHes
450  // (used by checkpoint functions only)
452  size_t q ,
453  vector<bool>& s ,
454  bool transpose ,
456  );
457  // internal set sparsity version of RevSparseJac
458  // (used by checkpoint functions only)
460  size_t q ,
461  const local::sparse_list& r ,
462  bool transpose ,
463  bool dependency ,
465  );
466  // internal set sparsity version of RevSparseJac
467  // (used by checkpoint functions only)
469  size_t q ,
470  const local::sparse_list& r ,
471  bool transpose ,
472  bool dependency ,
474  );
475 
476  /// amount of memory used for boolean Jacobain sparsity pattern
477  size_t size_forward_bool(void) const
478  { return for_jac_sparse_pack_.memory(); }
479 
480  /// free memory used for Jacobain sparsity pattern
481  void size_forward_bool(size_t zero)
483  zero == 0,
484  "size_forward_bool: argument not equal to zero"
485  );
487  }
488 
489  /// amount of memory used for vector of set Jacobain sparsity pattern
490  size_t size_forward_set(void) const
491  { return for_jac_sparse_set_.memory(); }
492 
493  /// free memory used for Jacobain sparsity pattern
494  void size_forward_set(size_t zero)
496  zero == 0,
497  "size_forward_bool: argument not equal to zero"
498  );
500  }
501 
502  /// number of operators in the operation sequence
503  size_t size_op(void) const
504  { return play_.num_op_rec(); }
505 
506  /// number of operator arguments in the operation sequence
507  size_t size_op_arg(void) const
508  { return play_.num_op_arg_rec(); }
509 
510  /// amount of memory required for the operation sequence
511  size_t size_op_seq(void) const
512  { return play_.Memory(); }
513 
514  /// number of parameters in the operation sequence
515  size_t size_par(void) const
516  { return play_.num_par_rec(); }
517 
518  /// number taylor coefficient orders calculated
519  size_t size_order(void) const
520  { return num_order_taylor_; }
521 
522  /// number taylor coefficient directions calculated
523  size_t size_direction(void) const
524  { return num_direction_taylor_; }
525 
526  /// number of characters in the operation sequence
527  size_t size_text(void) const
528  { return play_.num_text_rec(); }
529 
530  /// number of variables in opertion sequence
531  size_t size_var(void) const
532  { return num_var_tape_; }
533 
534  /// number of VecAD indices in the operation sequence
535  size_t size_VecAD(void) const
536  { return play_.num_vec_ind_rec(); }
537 
538  /// set number of orders currently allocated (user API)
539  void capacity_order(size_t c);
540 
541  /// set number of orders and directions currently allocated
542  void capacity_order(size_t c, size_t r);
543 
544  /// number of variables in conditional expressions that can be skipped
545  size_t number_skip(void);
546 
547  /// number of independent variables
548  size_t Domain(void) const
549  { return ind_taddr_.size(); }
550 
551  /// number of dependent variables
552  size_t Range(void) const
553  { return dep_taddr_.size(); }
554 
555  /// is variable a parameter
556  bool Parameter(size_t i)
558  i < dep_taddr_.size(),
559  "Argument to Parameter is >= dimension of range space"
560  );
561  return dep_parameter_[i];
562  }
563 
564  /// Deprecated: number of comparison operations that changed
565  /// for the previous zero order forward (than when function was recorded)
566  size_t CompareChange(void) const
567  { return compare_change_number_; }
568 
569  /// count as which to store operator index
570  void compare_change_count(size_t count)
571  { compare_change_count_ = count;
574  }
575 
576  /// number of comparison operations that changed
577  size_t compare_change_number(void) const
578  { return compare_change_number_; }
579 
580  /// operator index for the count-th comparison change
581  size_t compare_change_op_index(void) const
582  { if( has_been_optimized_ )
583  return 0;
585  }
586 
587  /// calculate entire Jacobian
588  template <typename VectorBase>
589  VectorBase Jacobian(const VectorBase &x);
590 
591  /// calculate Hessian for one component of f
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);
596 
597  /// forward mode calculation of partial w.r.t one domain component
598  template <typename VectorBase>
599  VectorBase ForOne(
600  const VectorBase &x ,
601  size_t j );
602 
603  /// reverse mode calculation of derivative of one range component
604  template <typename VectorBase>
605  VectorBase RevOne(
606  const VectorBase &x ,
607  size_t i );
608 
609  /// forward mode calculation of a subset of second order partials
610  template <typename VectorBase, typename VectorSize_t>
611  VectorBase ForTwo(
612  const VectorBase &x ,
613  const VectorSize_t &J ,
614  const VectorSize_t &K );
615 
616  /// reverse mode calculation of a subset of second order partials
617  template <typename VectorBase, typename VectorSize_t>
618  VectorBase RevTwo(
619  const VectorBase &x ,
620  const VectorSize_t &I ,
621  const VectorSize_t &J );
622 
623  /// calculate sparse Jacobians
624  template <typename VectorBase>
625  VectorBase SparseJacobian(
626  const VectorBase &x
627  );
628  template <typename VectorBase, typename VectorSet>
629  VectorBase SparseJacobian(
630  const VectorBase &x ,
631  const VectorSet &p
632  );
633  template <class VectorBase, class VectorSet, class VectorSize>
634  size_t SparseJacobianForward(
635  const VectorBase& x ,
636  const VectorSet& p ,
637  const VectorSize& r ,
638  const VectorSize& c ,
639  VectorBase& jac ,
641  );
642  template <class VectorBase, class VectorSet, class VectorSize>
643  size_t SparseJacobianReverse(
644  const VectorBase& x ,
645  const VectorSet& p ,
646  const VectorSize& r ,
647  const VectorSize& c ,
648  VectorBase& jac ,
650  );
651 
652  /// calculate sparse Hessians
653  template <typename VectorBase>
654  VectorBase SparseHessian(
655  const VectorBase& x ,
656  const VectorBase& w
657  );
658  template <typename VectorBase, typename VectorBool>
659  VectorBase SparseHessian(
660  const VectorBase& x ,
661  const VectorBase& w ,
662  const VectorBool& p
663  );
664  template <class VectorBase, class VectorSet, class VectorSize>
665  size_t SparseHessian(
666  const VectorBase& x ,
667  const VectorBase& w ,
668  const VectorSet& p ,
669  const VectorSize& r ,
670  const VectorSize& c ,
671  VectorBase& hes ,
672  sparse_hessian_work& work
673  );
674 
675  // Optimize the tape
676  // (see doxygen documentation in optimize.hpp)
677  void optimize( const std::string& options = "" );
678 
679  // create abs-normal representation of the function f(x)
680  void abs_normal_fun( ADFun& g, ADFun& a ) const;
681  // ------------------- Deprecated -----------------------------
682 
683  /// deprecated: assign a new operation sequence
684  template <typename ADvector>
685  void Dependent(const ADvector &y);
686 
687  /// Deprecated: number of variables in opertion sequence
688  size_t Size(void) const
689  { return num_var_tape_; }
690 
691  /// Deprecated: # taylor_ coefficients currently stored
692  /// (per variable,direction)
693  size_t Order(void) const
694  { return num_order_taylor_ - 1; }
695 
696  /// Deprecated: amount of memory for this object
697  /// Note that an approximation is used for the std::set<size_t> memory
698  size_t Memory(void) const
699  { size_t pervar = cap_order_taylor_ * sizeof(Base)
703  size_t total = num_var_tape_ * pervar + play_.Memory();
704  return total;
705  }
706 
707  /// Deprecated: # taylor_ coefficient orderss stored
708  /// (per variable,direction)
709  size_t taylor_size(void) const
710  { return num_order_taylor_; }
711 
712  /// Deprecated: Does this AD operation sequence use
713  /// VecAD<Base>::reference operands
714  bool use_VecAD(void) const
715  { return play_.num_vec_ind_rec() > 0; }
716 
717  /// Deprecated: # taylor_ coefficient orders calculated
718  /// (per variable,direction)
719  size_t size_taylor(void) const
720  { return num_order_taylor_; }
721 
722  /// Deprecated: set number of orders currently allocated
723  /// (per variable,direction)
724  void capacity_taylor(size_t per_var);
725 };
726 // ---------------------------------------------------------------------------
727 
728 } // END_CPPAD_NAMESPACE
729 
730 // non-user interfaces
739 
740 // user interfaces
741 # include <cppad/core/parallel_ad.hpp>
742 # include <cppad/core/independent.hpp>
743 # include <cppad/core/dependent.hpp>
746 # include <cppad/core/fun_eval.hpp>
747 # include <cppad/core/drivers.hpp>
748 # include <cppad/core/fun_check.hpp>
750 # include <cppad/core/optimize.hpp>
752 
753 # endif
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
Definition: ad_fun.hpp:503
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.
Definition: ad_fun.hpp:140
size_t size_par(void) const
number of parameters in the operation sequence
Definition: ad_fun.hpp:515
Vector of sets of positive integers, each set stored as a singly linked list.
Definition: sparse_list.hpp:35
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.
Definition: ad_fun.hpp:74
Compute derivatives of arbitrary order Taylor coefficients.
size_t Range(void) const
number of dependent variables
Definition: ad_fun.hpp:552
size_t compare_change_op_index(void) const
operator index for the count-th comparison change
Definition: ad_fun.hpp:581
Class used to hold function objects.
Definition: ad_fun.hpp:69
size_t num_order_taylor_
number of orders stored in taylor_
Definition: ad_fun.hpp:94
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
Definition: ad_fun.hpp:577
bool use_VecAD(void) const
Deprecated: Does this AD operation sequence use VecAD&lt;Base&gt;::reference operands.
Definition: ad_fun.hpp:714
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
Definition: for_two.hpp:145
size_t cap_order_taylor_
maximum number of orders that will fit in taylor_
Definition: ad_fun.hpp:97
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...
Definition: ad_fun.hpp:120
void size_forward_bool(size_t zero)
free memory used for Jacobain sparsity pattern
Definition: ad_fun.hpp:481
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.
Definition: ad_fun.hpp:136
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.
Definition: declare_ad.hpp:27
Compute Forward mode Hessian sparsity patterns.
Sparse matrices with elements of type Scalar.
Definition: sparse_rcv.hpp:212
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
Definition: rev_two.hpp:146
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
Definition: ad_fun.hpp:106
size_t size_taylor(void) const
Deprecated: # taylor_ coefficient orders calculated (per variable,direction)
Definition: ad_fun.hpp:719
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
Definition: ad_fun.hpp:531
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
Definition: ad_fun.hpp:511
local::player< Base > play_
the operation sequence corresponding to this object
Definition: ad_fun.hpp:131
size_t size(void) const
number of elements currently in this vector.
Definition: vector.hpp:387
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.
Definition: sparse_pack.hpp:33
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...
Definition: ad_fun.hpp:566
sparsity pattern for a matrix with indices of type size_t
Definition: sparse_rc.hpp:212
size_t num_var_tape_
number of variables in the recording (play_)
Definition: ad_fun.hpp:103
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
Definition: ad_fun.hpp:490
~ADFun(void)
destructor
Definition: ad_fun.hpp:302
void Dependent(local::ADTape< Base > *tape, const ADvector &y)
change the operation sequence corresponding to this object
Definition: dependent.hpp:236
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.
Definition: sparse_jac.hpp:286
size_t taylor_size(void) const
Deprecated: # taylor_ coefficient orderss stored (per variable,direction)
Definition: ad_fun.hpp:709
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)
Definition: ad_fun.hpp:693
Class used to hold information used by Sparse Hessian routine in this file, so it does not need to be...
Definition: sparse_hes.hpp:246
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.
Definition: sparse_hes.hpp:318
local::pod_vector< bool > cskip_op_
which operations can be conditionally skipped Set during forward pass of order zero ...
Definition: ad_fun.hpp:124
VectorSet ForSparseHes(const VectorSet &r, const VectorSet &s)
User API for Hessian sparsity patterns using reverse mode.
ADFun(const ADFun &g)
copy constructor
Definition: ad_fun.hpp:277
void size_forward_set(size_t zero)
free memory used for Jacobain sparsity pattern
Definition: ad_fun.hpp:494
bool check_for_nan_
Check for nan&#39;s and report message to user (default value is true).
Definition: ad_fun.hpp:77
void optimize(const std::string &options="")
Optimize a player object operation sequence.
Definition: optimize.hpp:216
bool Parameter(size_t i)
is variable a parameter
Definition: ad_fun.hpp:556
VectorBase Forward(size_t q, size_t r, const VectorBase &x)
forward mode user API, one order multiple directions.
Definition: forward.hpp:324
void compare_change_count(size_t count)
count as which to store operator index
Definition: ad_fun.hpp:570
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
Definition: num_skip.hpp:72
Class used to hold information used by Sparse Jacobian routines in this file, so they do not need to ...
Definition: sparse_jac.hpp:221
size_t compare_change_count_
If zero, ignoring comparison operators. Otherwise is the compare change count at which to store the o...
Definition: ad_fun.hpp:81
size_t num_direction_taylor_
number of directions stored in taylor_
Definition: ad_fun.hpp:100
size_t size_forward_bool(void) const
amount of memory used for boolean Jacobain sparsity pattern
Definition: ad_fun.hpp:477
Class used to hold tape that records AD&lt;Base&gt; operations.
Definition: ad_tape.hpp:26
size_t Size(void) const
Deprecated: number of variables in opertion sequence.
Definition: ad_fun.hpp:688
ADFun function constructors and assignment operator.
size_t Domain(void) const
number of independent variables
Definition: ad_fun.hpp:548
size_t Memory(void) const
Deprecated: amount of memory for this object Note that an approximation is used for the std::set&lt;size...
Definition: ad_fun.hpp:698
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
Definition: ad_fun.hpp:535
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
Definition: ad_fun.hpp:112
size_t size_order(void) const
number taylor coefficient orders calculated
Definition: ad_fun.hpp:519
size_t compare_change_op_index_
If compare_change_count is zero, compare_change_op_index_ is also zero. Otherwise it is the operator...
Definition: ad_fun.hpp:91
local::pod_vector< addr_t > load_op_
Variable on the tape corresponding to each vecad load operation (if zero, the operation corresponds t...
Definition: ad_fun.hpp:128
size_t size_direction(void) const
number taylor coefficient directions calculated
Definition: ad_fun.hpp:523
size_t memory(void) const
amount of memory corresonding to this object
Definition: info.hpp:107
CppAD::vector< size_t > dep_taddr_
tape address and parameter flag for the dependent variables
Definition: ad_fun.hpp:109
size_t size_text(void) const
number of characters in the operation sequence
Definition: ad_fun.hpp:527
Compute one Taylor coefficient for each order requested.
size_t size_op_arg(void) const
number of operator arguments in the operation sequence
Definition: ad_fun.hpp:507
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.
Definition: sparse_jac.hpp:480
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
Definition: ad_fun.hpp:115
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
Definition: ad_fun.hpp:143
class for maintaining subgraph information attached to on ADFun object.
Definition: info.hpp:25
VectorBase Reverse(size_t p, const VectorBase &v)
reverse mode sweep
Definition: reverse.hpp:91
size_t compare_change_number_
If compare_change_count_ is zero, compare_change_number_ is also zero. Otherwise, it is set to the nu...
Definition: ad_fun.hpp:86
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.