for_hes_sparsity

View page source

Forward Mode Hessian Sparsity Patterns

Syntax

f . for_hes_sparsity (
      select_domain , select_range , internal_bool , pattern_out
)

Purpose

We use \(F : \B{R}^n \rightarrow \B{R}^m\) to denote the AD Function corresponding to the operation sequence stored in f . Fix a diagonal matrix \(D \in \B{R}^{n \times n}\), a vector \(s \in \B{R}^m\) and define the function

\[H(x) = D ( s^\R{T} F )^{(2)} ( x ) D\]

Given the sparsity for \(D\) and \(s\), for_hes_sparsity computes a sparsity pattern for \(H(x)\).

x

Note that the sparsity pattern \(H(x)\) corresponds to the operation sequence stored in f and does not depend on the argument x .

BoolVector

The type BoolVector is a SimpleVector class with elements of type bool .

SizeVector

The type SizeVector is a SimpleVector class with elements of type size_t .

f

The object f has prototype

ADFun < Base > f

select_domain

The argument select_domain has prototype

const BoolVector & select_domain

It has size \(n\) and specifies which components of the diagonal of \(D\) are non-zero; i.e., select_domain [ j ] is true if and only if \(D_{j,j}\) is possibly non-zero.

select_range

The argument select_range has prototype

const BoolVector & select_range

It has size \(m\) and specifies which components of the vector \(s\) are non-zero; i.e., select_range [ i ] is true if and only if \(s_i\) is possibly non-zero.

internal_bool

If this is true, calculations are done with sets represented by a vector of boolean values. Otherwise, a vector of sets of integers is used.

pattern_out

This argument has prototype

sparse_rc < SizeVector >& pattern_out

This input value of pattern_out does not matter. Upon return pattern_out is a sparsity pattern for \(H(x)\).

Sparsity for Entire Hessian

Suppose that \(D\) is the \(n \times n\) identity matrix. In this case, pattern_out is a sparsity pattern for \((s^\R{T} F) F^{(2)} ( x )\).

Algorithm

See Algorithm II in Computing sparse Hessians with automatic differentiation by Andrea Walther. Note that s provides the information so that ‘dead ends’ are not included in the sparsity pattern.

Example

The file for_hes_sparsity.cpp contains an example and test of this operation.