Janus 2.0.0
High-performance C++20 dual-mode numerical framework
Loading...
Searching...
No Matches
AutoDiff.hpp File Reference

Symbolic automatic differentiation (Jacobian, gradient, Hessian, sensitivity analysis). More...

#include "janus/core/Function.hpp"
#include "janus/core/JanusConcepts.hpp"
#include "janus/core/JanusTypes.hpp"
#include "janus/core/Sparsity.hpp"
#include <string>
#include <vector>
Include dependency graph for AutoDiff.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  janus::SensitivitySwitchOptions
 Heuristics controlling automatic forward-vs-adjoint selection. More...
struct  janus::SensitivityRecommendation
 Result of Janus sensitivity regime selection. More...

Namespaces

namespace  janus
namespace  janus::detail
 Smooth approximation of ReLU function: softplus(x) = (1/beta) * log(1 + exp(beta * x)).

Enumerations

enum class  janus::SensitivityRegime { janus::Forward , janus::Adjoint , janus::CheckpointedAdjoint }
 Sensitivity regime selected for a Jacobian-like derivative workload. More...
enum class  janus::CheckpointInterpolation { janus::None , janus::Hermite , janus::Polynomial }
 Checkpoint interpolation recommendation for long-horizon adjoints. More...

Functions

template<typename Expr, typename... Vars>
auto janus::jacobian (const Expr &expression, const Vars &...variables)
 Computes Jacobian of an expression with respect to variables.
int janus::detail::input_numel (const Function &fn, int input_idx)
int janus::detail::output_numel (const Function &fn, int output_idx)
void janus::detail::validate_scalar_output (const Function &fn, int output_idx, const std::string &context)
void janus::detail::validate_same_shape (const casadi::MX &lhs, const casadi::MX &rhs, const std::string &context, const std::string &rhs_name)
std::vector< casadi::MX > janus::detail::symbolic_inputs_like (const Function &fn)
casadi::MX janus::detail::make_zero_seed (int rows, int cols, int directions)
casadi::MX janus::detail::make_basis_seed (int rows, int cols)
casadi::MX janus::detail::stacked_blocks_to_columns (const casadi::MX &stacked, int block_rows, int block_cols, int n_blocks)
std::string janus::detail::sensitivity_function_name (const Function &fn, const std::string &suffix, int output_idx, int input_idx)
std::string janus::detail::lagrangian_function_name (const Function &fn, const std::string &suffix, int objective_output_idx, int constraint_output_idx, int input_idx)
void janus::detail::validate_scalar_expression (const casadi::MX &expr, const std::string &context, const std::string &name)
casadi::MX janus::detail::lagrangian_scalar (const SymbolicArg &objective, const SymbolicArg &constraints, const SymbolicArg &multipliers, const std::string &context)
casadi::MX janus::detail::forward_block_jacobian (const Function &fn, int output_idx, int input_idx)
casadi::MX janus::detail::reverse_block_jacobian (const Function &fn, int output_idx, int input_idx)
SensitivityRecommendation janus::select_sensitivity_regime (int parameter_count, int output_count, int horizon_length=1, bool stiff=false, const SensitivitySwitchOptions &opts=SensitivitySwitchOptions())
 Recommend a sensitivity regime from parameter/output counts.
SensitivityRecommendation janus::select_sensitivity_regime (const Function &fn, int output_idx=0, int input_idx=0, int horizon_length=1, bool stiff=false, const SensitivitySwitchOptions &opts=SensitivitySwitchOptions())
 Recommend a sensitivity regime for a selected janus::Function block.
Function janus::sensitivity_jacobian (const Function &fn, int output_idx=0, int input_idx=0, int horizon_length=1, bool stiff=false, const SensitivitySwitchOptions &opts=SensitivitySwitchOptions())
 Build a Jacobian function for one output/input block using the recommended regime.
auto janus::jacobian (const std::vector< SymbolicArg > &expressions, const std::vector< SymbolicArg > &variables)
 Computes Jacobian with vector arguments (expressions and variables).
SymbolicVector janus::sym_gradient (const SymbolicArg &expr, const SymbolicArg &vars)
 Symbolic gradient (for scalar-output functions).
SymbolicMatrix janus::hessian (const SymbolicArg &expr, const SymbolicArg &vars)
 Hessian matrix (second-order derivatives).
SymbolicMatrix janus::hessian_lagrangian (const SymbolicArg &objective, const SymbolicArg &constraints, const SymbolicArg &vars, const SymbolicArg &multipliers)
 Hessian of Lagrangian for constrained optimization.
SymbolicMatrix janus::hessian_vector_product (const SymbolicArg &expr, const SymbolicArg &vars, const SymbolicArg &direction)
 Hessian-vector product for a scalar expression without forming the dense Hessian.
SymbolicMatrix janus::lagrangian_hessian_vector_product (const SymbolicArg &objective, const SymbolicArg &constraints, const SymbolicArg &vars, const SymbolicArg &multipliers, const SymbolicArg &direction)
 Hessian-vector product of a Lagrangian, i.e. a second-order adjoint action.
Function janus::hessian_vector_product (const Function &fn, int output_idx=0, int input_idx=0)
 Build a matrix-free Hessian-vector product function for one scalar output/input block.
Function janus::lagrangian_hessian_vector_product (const Function &fn, int objective_output_idx, int constraint_output_idx, int input_idx=0)
 Build a Lagrangian Hessian-vector product function for optimization workflows.
SymbolicVector janus::sym_gradient (const SymbolicArg &expr, const std::vector< SymbolicArg > &vars)
 Symbolic gradient with vector of variables.
SymbolicMatrix janus::hessian (const SymbolicArg &expr, const std::vector< SymbolicArg > &vars)
 Hessian with vector of variables.
SymbolicMatrix janus::hessian_lagrangian (const SymbolicArg &objective, const SymbolicArg &constraints, const std::vector< SymbolicArg > &vars, const SymbolicArg &multipliers)
 Hessian of Lagrangian with vector inputs.
SymbolicMatrix janus::hessian_vector_product (const SymbolicArg &expr, const std::vector< SymbolicArg > &vars, const SymbolicArg &direction)
 Hessian-vector product with vector of variables.
SymbolicMatrix janus::lagrangian_hessian_vector_product (const SymbolicArg &objective, const SymbolicArg &constraints, const std::vector< SymbolicArg > &vars, const SymbolicArg &multipliers, const SymbolicArg &direction)
 Lagrangian Hessian-vector product with vector of variables.

Detailed Description

Symbolic automatic differentiation (Jacobian, gradient, Hessian, sensitivity analysis).

See also
Calculus.hpp, FiniteDifference.hpp