1 #ifndef CPPAD_CG_GENERIC_MODEL_INCLUDED 2 #define CPPAD_CG_GENERIC_MODEL_INCLUDED 30 CGAtomicGenericModel<Base>* _atomic;
32 bool _evalAtomicForwardOne4CppAD;
37 _evalAtomicForwardOne4CppAD(true) {
40 inline GenericModel(GenericModel&& other) noexcept :
41 _atomic(other._atomic),
42 _evalAtomicForwardOne4CppAD(other._evalAtomicForwardOne4CppAD) {
43 other._atomic =
nullptr;
46 inline virtual ~GenericModel() {
55 virtual const std::string&
getName()
const = 0;
66 virtual std::vector<std::set<size_t> > JacobianSparsitySet() = 0;
67 virtual std::vector<bool> JacobianSparsityBool() = 0;
68 virtual void JacobianSparsity(std::vector<size_t>& equations,
69 std::vector<size_t>& variables) = 0;
87 virtual std::vector<bool> HessianSparsityBool() = 0;
88 virtual void HessianSparsity(std::vector<size_t>& rows,
89 std::vector<size_t>& cols) = 0;
111 virtual std::vector<bool> HessianSparsityBool(
size_t i) = 0;
120 virtual void HessianSparsity(
size_t i,
121 std::vector<size_t>& rows,
122 std::vector<size_t>& cols) = 0;
129 virtual size_t Domain()
const = 0;
136 virtual size_t Range()
const = 0;
183 _evalAtomicForwardOne4CppAD = evalForwardOne4CppAD;
186 inline bool isAtomicEvalForwardOne4CppAD()
const {
187 return _evalAtomicForwardOne4CppAD;
211 template<
typename VectorBase>
213 VectorBase dep(
Range());
244 template<
typename VectorBase>
268 virtual void ForwardZero(
const std::vector<const Base*> &x,
292 template<
typename VectorBase>
309 template<
typename VectorBase>
346 template<
typename VectorBase>
347 inline VectorBase
Hessian(
const VectorBase& x,
348 const VectorBase& w) {
365 template<
typename VectorBase>
383 template<
typename VectorBase>
384 inline VectorBase
Hessian(
const VectorBase& x,
386 CPPADCG_ASSERT_KNOWN(i <
Range(),
"Invalid equation index")
388 VectorBase w(
Range());
428 template<
typename VectorBase>
432 VectorBase ty((k + 1) * m);
438 for (
size_t i = 0; i < m; i++) {
439 dy[i] = ty[i * (k + 1) + k];
487 size_t tx1Nnz,
const size_t idx[],
const Base tx1[],
510 template<
typename VectorBase>
512 const VectorBase& ty,
513 const VectorBase& py) {
515 VectorBase px((k + 1) *
Domain());
527 template<
typename VectorBase>
529 const VectorBase& ty,
531 const VectorBase& py) {
578 size_t pyNnz,
const size_t idx[],
const Base py[]) = 0;
601 template<
typename VectorBase>
603 const VectorBase& ty,
604 const VectorBase& py) {
606 VectorBase px((k + 1) *
Domain());
619 template<
typename VectorBase>
621 const VectorBase& ty,
623 const VectorBase& py) {
671 size_t tx1Nnz,
const size_t idx[],
const Base tx1[],
696 template<
typename VectorBase>
713 template<
typename VectorBase>
743 std::vector<Base>& jac,
744 std::vector<size_t>& row,
745 std::vector<size_t>& col) = 0;
753 size_t const** col) = 0;
770 size_t const** col) = 0;
794 template<
typename VectorBase>
796 const VectorBase& w) {
813 template<
typename VectorBase>
844 const std::vector<Base>& w,
845 std::vector<Base>& hess,
846 std::vector<size_t>& row,
847 std::vector<size_t>& col) = 0;
856 size_t const** col) = 0;
876 virtual void SparseHessian(
const std::vector<const Base*>& x,
880 size_t const** col) = 0;
890 if (_atomic ==
nullptr) {
VectorBase Hessian(const VectorBase &x, size_t i)
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
void SparseHessian(const VectorBase &x, const VectorBase &w, VectorBase &hess)
VectorBase ReverseTwo(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
virtual bool isForwardOneAvailable()=0
virtual bool isSparseHessianAvailable()=0
VectorBase Hessian(const VectorBase &x, const VectorBase &w)
VectorBase SparseHessian(const VectorBase &x, const VectorBase &w)
virtual bool isJacobianSparsityAvailable()=0
void Jacobian(const VectorBase &x, VectorBase &jac)
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)
void Hessian(const VectorBase &x, const VectorBase &w, VectorBase &hess)
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)
VectorBase Jacobian(const VectorBase &x)
virtual bool isEquationHessianSparsityAvailable()=0
virtual bool isSparseForwardOneAvailable()=0
void setAtomicEvalForwardOne4CppAD(bool evalForwardOne4CppAD)