1 #ifndef CPPAD_CG_GENERIC_MODEL_INCLUDED
2 #define CPPAD_CG_GENERIC_MODEL_INCLUDED
32 bool _evalAtomicForwardOne4CppAD;
37 _evalAtomicForwardOne4CppAD(
true) {
49 virtual const std::string&
getName()
const = 0;
60 virtual std::vector<std::set<size_t> > JacobianSparsitySet() = 0;
61 virtual std::vector<bool> JacobianSparsityBool() = 0;
62 virtual void JacobianSparsity(std::vector<size_t>& equations,
63 std::vector<size_t>& variables) = 0;
81 virtual std::vector<bool> HessianSparsityBool() = 0;
82 virtual void HessianSparsity(std::vector<size_t>& rows,
83 std::vector<size_t>& cols) = 0;
101 virtual std::vector<bool> HessianSparsityBool(
size_t i) = 0;
102 virtual void HessianSparsity(
size_t i,
103 std::vector<size_t>& rows,
104 std::vector<size_t>& cols) = 0;
165 _evalAtomicForwardOne4CppAD = evalForwardOne4CppAD;
168 inline bool isAtomicEvalForwardOne4CppAD()
const {
169 return _evalAtomicForwardOne4CppAD;
193 template<
typename VectorBase>
195 VectorBase dep(
Range());
215 template<
typename VectorBase>
251 template<
typename VectorBase>
252 inline VectorBase Jacobian(
const VectorBase& x) {
259 template<
typename VectorBase>
260 inline void Jacobian(
const VectorBase& x,
267 virtual void Jacobian(ArrayView<const Base> x,
268 ArrayView<Base> jac) = 0;
283 template<
typename VectorBase>
284 inline VectorBase Hessian(
const VectorBase& x,
285 const VectorBase& w) {
293 template<
typename VectorBase>
294 inline void Hessian(
const VectorBase& x,
305 template<
typename VectorBase>
306 inline VectorBase
Hessian(
const VectorBase& x,
308 CPPADCG_ASSERT_KNOWN(i <
Range(),
"Invalid equation index")
310 VectorBase w(
Range());
347 template<
typename VectorBase>
351 VectorBase ty((k + 1) * m);
357 for (
size_t i = 0; i < m; i++) {
358 dy[i] = ty[i * (k + 1) + k];
406 size_t tx1Nnz,
const size_t idx[],
const Base tx1[],
429 template<
typename VectorBase>
431 const VectorBase& ty,
432 const VectorBase& py) {
434 VectorBase px((k + 1) *
Domain());
446 template<
typename VectorBase>
448 const VectorBase& ty,
450 const VectorBase& py) {
497 size_t pyNnz,
const size_t idx[],
const Base py[]) = 0;
520 template<
typename VectorBase>
522 const VectorBase& ty,
523 const VectorBase& py) {
525 VectorBase px((k + 1) *
Domain());
538 template<
typename VectorBase>
540 const VectorBase& ty,
542 const VectorBase& py) {
590 size_t tx1Nnz,
const size_t idx[],
const Base tx1[],
615 template<
typename VectorBase>
632 template<
typename VectorBase>
653 std::vector<Base>& jac,
654 std::vector<size_t>& row,
655 std::vector<size_t>& col) = 0;
660 size_t const** col) = 0;
677 size_t const** col) = 0;
692 template<
typename VectorBase>
693 inline VectorBase SparseHessian(
const VectorBase& x,
694 const VectorBase& w) {
702 template<
typename VectorBase>
703 inline void SparseHessian(
const VectorBase& x,
712 virtual void SparseHessian(ArrayView<const Base> x,
713 ArrayView<const Base> w,
714 ArrayView<Base> hess) = 0;
716 virtual void SparseHessian(
const std::vector<Base> &x,
717 const std::vector<Base> &w,
718 std::vector<Base>& hess,
719 std::vector<size_t>& row,
720 std::vector<size_t>& col) = 0;
722 virtual void SparseHessian(ArrayView<const Base> x,
723 ArrayView<const Base> w,
724 ArrayView<Base> hess,
726 size_t const** col) = 0;
746 size_t const** col) = 0;
756 if (_atomic ==
nullptr) {
virtual size_t Range() const =0
virtual std::vector< std::set< size_t > > HessianSparsitySet()=0
VectorBase ForwardZero(const VectorBase &x)
virtual void SparseHessian(const std::vector< const Base * > &x, ArrayView< const Base > w, ArrayView< Base > hess, size_t const **row, size_t const **col)=0
VectorBase Hessian(const VectorBase &x, size_t i)
calculate Hessian for one component of f
void setAtomicEvalForwardOne4CppAD(bool evalForwardOne4CppAD)
virtual bool isReverseOneAvailable()=0
virtual bool isJacobianSparsityAvailable()=0
virtual void ReverseTwo(ArrayView< const Base > x, size_t tx1Nnz, const size_t idx[], const Base tx1[], ArrayView< Base > px2, ArrayView< const Base > py2)=0
virtual const std::vector< std::string > & getAtomicFunctionNames()=0
virtual CGAtomicGenericModel< Base > & asAtomic()
VectorBase ReverseTwo(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
void ReverseTwo(const VectorBase &tx, const VectorBase &ty, VectorBase &px, const VectorBase &py)
VectorBase ReverseOne(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
virtual void SparseJacobian(const std::vector< const Base * > &x, ArrayView< Base > jac, size_t const **row, size_t const **col)=0
virtual bool isSparseReverseOneAvailable()=0
virtual std::vector< std::set< size_t > > HessianSparsitySet(size_t i)=0
virtual bool isForwardZeroAvailable()=0
virtual bool isSparseJacobianAvailable()=0
virtual void ReverseOne(ArrayView< const Base > tx, ArrayView< const Base > ty, ArrayView< Base > px, ArrayView< const Base > py)=0
virtual size_t Domain() const =0
virtual void ForwardOne(ArrayView< const Base > x, size_t tx1Nnz, const size_t idx[], const Base tx1[], ArrayView< Base > ty1)=0
virtual bool isJacobianAvailable()=0
virtual bool addExternalModel(GenericModel< Base > &atomic)=0
virtual bool isSparseForwardOneAvailable()=0
virtual void ReverseOne(ArrayView< const Base > x, ArrayView< Base > px, size_t pyNnz, const size_t idx[], const Base py[])=0
virtual bool isEquationHessianSparsityAvailable()=0
virtual const std::string & getName() const =0
VectorBase SparseJacobian(const VectorBase &x)
virtual bool isHessianSparsityAvailable()=0
virtual void SparseJacobian(ArrayView< const Base > x, ArrayView< Base > jac)=0
virtual bool isSparseReverseTwoAvailable()=0
virtual bool isReverseTwoAvailable()=0
virtual bool addAtomicFunction(atomic_base< Base > &atomic)=0
void ReverseOne(const VectorBase &tx, const VectorBase &ty, VectorBase &px, const VectorBase &py)
void ForwardZero(const VectorBase &x, VectorBase &dep)
virtual bool isSparseHessianAvailable()=0
virtual bool isHessianAvailable()=0
virtual void ForwardOne(ArrayView< const Base > tx, ArrayView< Base > ty)=0
virtual void ReverseTwo(ArrayView< const Base > tx, ArrayView< const Base > ty, ArrayView< Base > px, ArrayView< const Base > py)=0
virtual void ForwardZero(const std::vector< const Base * > &x, ArrayView< Base > dep)=0
void SparseJacobian(const VectorBase &x, VectorBase &jac)
virtual bool isForwardOneAvailable()=0
VectorBase ForwardOne(const VectorBase &tx)