1 #ifndef CPPAD_CG_GENERIC_MODEL_INCLUDED 2 #define CPPAD_CG_GENERIC_MODEL_INCLUDED 29 CGAtomicGenericModel<Base>* _atomic;
31 bool _evalAtomicForwardOne4CppAD;
36 _evalAtomicForwardOne4CppAD(true) {
39 inline virtual ~GenericModel() {
48 virtual const std::string&
getName()
const = 0;
59 virtual std::vector<std::set<size_t> > JacobianSparsitySet() = 0;
60 virtual std::vector<bool> JacobianSparsityBool() = 0;
61 virtual void JacobianSparsity(std::vector<size_t>& equations,
62 std::vector<size_t>& variables) = 0;
80 virtual std::vector<bool> HessianSparsityBool() = 0;
81 virtual void HessianSparsity(std::vector<size_t>& rows,
82 std::vector<size_t>& cols) = 0;
100 virtual std::vector<bool> HessianSparsityBool(
size_t i) = 0;
101 virtual void HessianSparsity(
size_t i,
102 std::vector<size_t>& rows,
103 std::vector<size_t>& cols) = 0;
110 virtual size_t Domain()
const = 0;
117 virtual size_t Range()
const = 0;
164 _evalAtomicForwardOne4CppAD = evalForwardOne4CppAD;
167 inline bool isAtomicEvalForwardOne4CppAD()
const {
168 return _evalAtomicForwardOne4CppAD;
192 template<
typename VectorBase>
194 VectorBase dep(
Range());
214 template<
typename VectorBase>
235 virtual void ForwardZero(
const std::vector<const Base*> &x,
250 template<
typename VectorBase>
251 inline VectorBase Jacobian(
const VectorBase& x) {
258 template<
typename VectorBase>
259 inline void Jacobian(
const VectorBase& x,
282 template<
typename VectorBase>
283 inline VectorBase Hessian(
const VectorBase& x,
284 const VectorBase& w) {
292 template<
typename VectorBase>
293 inline void Hessian(
const VectorBase& x,
304 template<
typename VectorBase>
305 inline VectorBase
Hessian(
const VectorBase& x,
307 CPPADCG_ASSERT_KNOWN(i <
Range(),
"Invalid equation index");
309 VectorBase w(
Range());
346 template<
typename VectorBase>
350 VectorBase ty((k + 1) * m);
356 for (
size_t i = 0; i < m; i++) {
357 dy[i] = ty[i * (k + 1) + k];
405 size_t tx1Nnz,
const size_t idx[],
const Base tx1[],
428 template<
typename VectorBase>
430 const VectorBase& ty,
431 const VectorBase& py) {
433 VectorBase px((k + 1) *
Domain());
445 template<
typename VectorBase>
447 const VectorBase& ty,
449 const VectorBase& py) {
496 size_t pyNnz,
const size_t idx[],
const Base py[]) = 0;
519 template<
typename VectorBase>
521 const VectorBase& ty,
522 const VectorBase& py) {
524 VectorBase px((k + 1) *
Domain());
537 template<
typename VectorBase>
539 const VectorBase& ty,
541 const VectorBase& py) {
589 size_t tx1Nnz,
const size_t idx[],
const Base tx1[],
614 template<
typename VectorBase>
631 template<
typename VectorBase>
652 std::vector<Base>& jac,
653 std::vector<size_t>& row,
654 std::vector<size_t>& col) = 0;
659 size_t const** col) = 0;
676 size_t const** col) = 0;
691 template<
typename VectorBase>
692 inline VectorBase SparseHessian(
const VectorBase& x,
693 const VectorBase& w) {
701 template<
typename VectorBase>
702 inline void SparseHessian(
const VectorBase& x,
715 virtual void SparseHessian(
const std::vector<Base> &x,
716 const std::vector<Base> &w,
717 std::vector<Base>& hess,
718 std::vector<size_t>& row,
719 std::vector<size_t>& col) = 0;
725 size_t const** col) = 0;
741 virtual void SparseHessian(
const std::vector<const Base*>& x,
745 size_t const** col) = 0;
755 if (_atomic ==
nullptr) {
VectorBase Hessian(const VectorBase &x, size_t i)
calculate Hessian for one component of f
VectorBase ForwardZero(const VectorBase &x)
virtual bool addAtomicFunction(atomic_base< Base > &atomic)=0
virtual bool isReverseTwoAvailable()=0
virtual const std::vector< std::string > & getAtomicFunctionNames()=0
virtual bool addExternalModel(GenericModel< Base > &atomic)=0
VectorBase ReverseTwo(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
virtual bool isForwardOneAvailable()=0
virtual bool isSparseHessianAvailable()=0
virtual bool isJacobianSparsityAvailable()=0
virtual bool isSparseReverseTwoAvailable()=0
virtual bool isJacobianAvailable()=0
virtual bool isForwardZeroAvailable()=0
VectorBase SparseJacobian(const VectorBase &x)
VectorBase ForwardOne(const VectorBase &tx)
virtual bool isHessianSparsityAvailable()=0
void SparseJacobian(const VectorBase &x, VectorBase &jac)
VectorBase ReverseOne(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
virtual std::vector< std::set< size_t > > HessianSparsitySet()=0
void ReverseOne(const VectorBase &tx, const VectorBase &ty, VectorBase &px, const VectorBase &py)
virtual bool isHessianAvailable()=0
virtual bool isReverseOneAvailable()=0
virtual bool isSparseJacobianAvailable()=0
virtual bool isSparseReverseOneAvailable()=0
virtual size_t Range() const =0
virtual const std::string & getName() const =0
void ReverseTwo(const VectorBase &tx, const VectorBase &ty, VectorBase &px, const VectorBase &py)
virtual CGAtomicGenericModel< Base > & asAtomic()
virtual size_t Domain() const =0
void ForwardZero(const VectorBase &x, VectorBase &dep)
virtual bool isEquationHessianSparsityAvailable()=0
virtual bool isSparseForwardOneAvailable()=0
void setAtomicEvalForwardOne4CppAD(bool evalForwardOne4CppAD)