MUQ  0.4.3
muq::Modeling::UMBridgeModPiece Class Reference

A ModPiece connecting to a model via the UM-Bridge HTTP protocol. More...

#include <UMBridgeModPiece.h>

Inheritance diagram for muq::Modeling::UMBridgeModPiece:

Detailed Description

A ModPiece connecting to a model via the UM-Bridge HTTP protocol.

This ModPiece connects to a (remote or local) model via UM-Bridge, a protocol based on HTTP. A more in-depth documentation on the underlying HTTP interface and the server-side part can be found at https://github.com/UM-Bridge/umbridge. Several models and benchmarks are also available in the form of ready-to-use containers.

The main use case is straightforward coupling of model and UQ codes across different languages and frameworks. Since this allows treating the model mostly as a black box, greater separation of concerns between model and UQ developers can be achieved.

In order to set up an UMBridgeModPiece, you need to specify the address it is to connect to. For an HTTP model running locally, it typically looks like this:

auto umbridge_modpiece = std::make_shared<UMBridgeModPiece>("http://localhost:4242");

Passing additional configuration options to the model is supported through JSON structures. For more examples on how to set up a JSON structure, refer to the documentation of json.hpp.

config["level"] = 1;
auto umbridge_modpiece = std::make_shared<UMBridgeModPiece>("http://localhost:4242", config);
a class to store JSON values
Definition: json.h:16658

For testing purposes, you can use a test benchmark hosted by us. It implements a very simple Bayesian posterior:

auto benchmark_modpiece = std::make_shared<UMBridgeModPiece>("http://testbenchmark.linusseelinger.de");

Beyond initialization, UMBridgeModPiece behaves like any other ModPiece.

The implementation makes use of the HTTP model c++ header-only library, which in turn depends on json.hpp for JSON and httplib.h for HTTP support.

Definition at line 49 of file UMBridgeModPiece.h.

Public Member Functions

 UMBridgeModPiece (const std::string host, std::string name, json config=json(), httplib::Headers headers=httplib::Headers())
 Construct UMBridgeModPiece, connecting to model server. More...
 
- Public Member Functions inherited from muq::Modeling::ModPiece
 ModPiece (std::vector< int > const &inputSizes, std::vector< int > const &outputSizes)
 
 ModPiece (Eigen::VectorXi const &inputSizes, Eigen::VectorXi const &outputSizes)
 
virtual ~ModPiece ()=default
 
virtual double GetRunTime (const std::string &method="Evaluate") const override
 Get the average run time for one of the implemented methods. More...
 
virtual void ResetCallTime () override
 Resets the number of call and times. More...
 
virtual unsigned long int GetNumCalls (const std::string &method="Evaluate") const override
 get the number of times one of the implemented methods has been called. More...
 
virtual std::vector< Eigen::VectorXd > const & Evaluate (std::vector< Eigen::VectorXd > const &input)
 Evaluate the ModPiece. More...
 
virtual std::vector< Eigen::VectorXd > const & Evaluate (ref_vector< Eigen::VectorXd > const &input)
 
 VARIADIC_TO_REFVECTOR (Evaluate, Eigen::VectorXd, std::vector< Eigen::VectorXd > const &)
 
virtual Eigen::VectorXd const & Gradient (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
 Compute the Gradient \(J^Tv\). More...
 
virtual Eigen::VectorXd const & Gradient (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
 
Eigen::VectorXd const & Gradient (unsigned int outWrt, unsigned int inWrt, Eigen::VectorXd const &last, Eigen::VectorXd const &sens)
 
template<typename... Args>
Eigen::VectorXd const & Gradient (unsigned int wrtOut, unsigned int wrtIn, Args const &... args)
 
Eigen::VectorXd const & ApplyHessian (unsigned int outWrt, unsigned int inWrt1, unsigned int inWrt2, Eigen::VectorXd const &last, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
template<typename... Args>
Eigen::VectorXd const & ApplyHessian (unsigned int wrtOut, unsigned int wrtIn1, unsigned int wrtIn2, Args const &... args)
 
virtual Eigen::MatrixXd const & Jacobian (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input)
 Compute the Jacobian of this ModPiece. More...
 
virtual Eigen::MatrixXd const & Jacobian (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input)
 
template<typename... Args>
Eigen::MatrixXd const & Jacobian (unsigned int outWrt, unsigned int inWrt, Args const &... args)
 
template<typename... Args>
Eigen::MatrixXd JacobianByFD (unsigned int outWrt, unsigned int inWrt, Args const &... args)
 
template<typename... Args>
Eigen::MatrixXd ApplyJacobianByFD (unsigned int outWrt, unsigned int inWrt, Args const &... args)
 
virtual Eigen::VectorXd const & ApplyJacobian (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec)
 Apply the Jacobian of this ModPiece to a vector. More...
 
virtual Eigen::VectorXd const & ApplyJacobian (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec)
 
Eigen::VectorXd const & ApplyJacobian (unsigned int outWrt, unsigned int inWrt, Eigen::VectorXd const &last, Eigen::VectorXd const &sens)
 
template<typename... Args>
Eigen::VectorXd const & ApplyJacobian (unsigned int wrtOut, unsigned int wrtIn, Args const &... args)
 
virtual Eigen::VectorXd GradientByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
 
virtual Eigen::VectorXd GradientByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
 
virtual Eigen::MatrixXd JacobianByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input)
 
virtual Eigen::MatrixXd JacobianByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input)
 
virtual Eigen::VectorXd ApplyJacobianByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd ApplyJacobianByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd const & ApplyHessian (unsigned int const outWrt, unsigned int const inWrt1, unsigned int const inWrt2, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd const & ApplyHessian (unsigned int const outWrt, unsigned int const inWrt1, unsigned int const inWrt2, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd ApplyHessianByFD (unsigned int const outWrt, unsigned int const inWrt1, unsigned int const inWrt2, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd ApplyHessianByFD (unsigned int const outWrt, unsigned int const inWrt1, unsigned int const inWrt2, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
void EnableCache ()
 
void DisableCache ()
 
bool CacheStatus () const
 
virtual void SetWarnLevel (unsigned int newLevel)
 
- Public Member Functions inherited from muq::Modeling::WorkPiece
 WorkPiece ()
 Create a muq::Modeling::WorkPiece with no fixed number of inputs and outputs and variable input/output types. More...
 
 WorkPiece (int const num, WorkPiece::Fix const fix=WorkPiece::Fix::Inputs)
 Create a muq::Modeling::WorkPiece with either a fixed number of inputs or outputs and variable input/output types. More...
 
 WorkPiece (int const numIns, int const numOuts)
 Create a muq::Modeling::WorkPiece with a fixed number of inputs and outputs but variable input/output types. More...
 
 WorkPiece (std::vector< std::string > const &types, WorkPiece::Fix const fix=WorkPiece::Fix::Inputs)
 Create a muq::Modeling::WorkPiece with either a fixed number of inputs with specified types or a fixed number of outputs with specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &types, WorkPiece::Fix const fix=WorkPiece::Fix::Inputs)
 Create a muq::Modeling::WorkPiece where either some of the inputs have specified types or some of the outputs have specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &types, int const num, WorkPiece::Fix const fixTypes=WorkPiece::Fix::Inputs, WorkPiece::Fix const fixNum=WorkPiece::Fix::Inputs)
 Create a muq::Modeling::WorkPiece where either some of the inputs have specified types or some of the outputs have specified types and either the number of inputs or the number of outputs is fixed. More...
 
 WorkPiece (std::vector< std::string > const &types, int const num)
 Create a muq::Modeling::WorkPiece with a fixed number of inputs with specified types and a fixed number of outputs (of uknown type) More...
 
 WorkPiece (int const num, std::vector< std::string > const &types)
 Create a muq::Modeling::WorkPiece with a fixed number of outputs with specified types and a fixed number of inputs (of uknown type) More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, int const numIns, int const numOuts)
 Create a muq::Modeling::WorkPiece where some of the inputs are known and we know the input and output numbers. More...
 
 WorkPiece (int const numIns, std::map< unsigned int, std::string > const &outTypes, int const numOuts)
 Create a muq::Modeling::WorkPiece where some of the outputs are known and we know the input and output numbers. More...
 
 WorkPiece (std::vector< std::string > const &inTypes, std::vector< std::string > const &outTypes)
 Create a muq::Modeling::WorkPiece with a fixed number of inputs and outputs with specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, std::vector< std::string > const &outTypes)
 Create a muq::Modeling::WorkPiece where some of the inputs are known and all of the outputs have specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, int const num, std::vector< std::string > const &outTypes)
 Create a muq::Modeling::WorkPiece where some of the inputs are known with a known number of inputs and all of the outputs have specified types. More...
 
 WorkPiece (std::vector< std::string > const &inTypes, std::map< unsigned int, std::string > const &outTypes)
 Create a muq::Modeling::WorkPiece where some of the outputs and all of the inputs have specified types. More...
 
 WorkPiece (std::vector< std::string > const &inTypes, std::map< unsigned int, std::string > const &outTypes, int const num)
 Create a muq::Modeling::WorkPiece where some of the outputs with a known number of outputs and all of the inputs have specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, std::map< unsigned int, std::string > const &outTypes)
 Create a muq::Mdoeling::WorkPiece where some of the inputs and some of the outputs have specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, int const numIn, std::map< unsigned int, std::string > const &outTypes)
 Create a muq::Mdoeling::WorkPiece where some of the inputs and some of the outputs have specified types with a fixed number of inputs. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, std::map< unsigned int, std::string > const &outTypes, int const numOut)
 Create a muq::Mdoeling::WorkPiece where some of the inputs and some of the outputs have specified types with a fixed number of outputs. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, int const numIn, std::map< unsigned int, std::string > const &outTypes, int const numOut)
 Create a muq::Mdoeling::WorkPiece where some of the inputs and some of the outputs have specified types with a fixed number of inputs and outputs. More...
 
virtual ~WorkPiece ()
 Default destructor. More...
 
std::vector< boost::any > const & Evaluate (std::vector< boost::any > const &ins)
 Evaluate this muq::Modeling::WorkPiece. More...
 
std::vector< boost::any > const & Evaluate (ref_vector< boost::any > const &ins)
 Evaluate this muq::Modeling::WorkPiece using references to the inputs. More...
 
std::vector< boost::any > const & Evaluate ()
 Evaluate this muq::Modeling::WorkPiece in the case that there are no inputs. More...
 
template<typename... Args>
std::vector< boost::any > const & Evaluate (Args... args)
 Evalaute this muq::Modeling::WorkPiece using multiple arguments. More...
 
std::string const & Name ()
 Get the (unique) name of this work piece. More...
 
void SetName (std::string const &newName)
 Set the name of this work piece. More...
 
std::string InputType (unsigned int inputNum, bool const demangle=true) const
 Get the input type (if we know it) for a specific input. More...
 
int InputSize (unsigned int inputNum) const
 Get the length of a vector valued input with fixed size. More...
 
void SetInputSize (unsigned int inputNum, int newSize)
 
std::string OutputType (unsigned int outputNum, bool const demangle=true) const
 Get the output type (if we know it) for a specific output. More...
 
std::map< unsigned int, std::string > OutputTypes () const
 Get the output types. More...
 
std::map< unsigned int, std::string > InputTypes () const
 Get the input types. More...
 
unsigned int ID () const
 Get the unique ID number. More...
 

Static Public Member Functions

static Eigen::VectorXd StdVectorToEigenvectord (std::vector< double > &vector)
 
static const Eigen::VectorXd StdVectorToEigenvectord (const std::vector< double > &vector)
 
static std::vector< Eigen::VectorXd > StdVectorsToEigenvectords (std::vector< std::vector< double >> vector)
 
static Eigen::VectorXi StdVectorToEigenvectori (const std::vector< std::size_t > &vector)
 
- Static Public Member Functions inherited from muq::Modeling::WorkPiece
static ref_vector< const boost::any > ToRefVector (std::vector< boost::any > const &anyVec)
 Create vector of references from a vector of boost::any's. More...
 
static ref_vector< const Eigen::VectorXd > ToRefVector (std::vector< Eigen::VectorXd > const &anyVec)
 

Additional Inherited Members

- Public Attributes inherited from muq::Modeling::ModPiece
const Eigen::VectorXi inputSizes
 
const Eigen::VectorXi outputSizes
 
- Public Attributes inherited from muq::Modeling::WorkPiece
int numInputs
 The number of inputs. More...
 
int numOutputs
 The number of outputs. More...
 

Constructor & Destructor Documentation

◆ UMBridgeModPiece()

UMBridgeModPiece::UMBridgeModPiece ( const std::string  host,
std::string  name,
json  config = json(),
httplib::Headers  headers = httplib::Headers() 
)

Construct UMBridgeModPiece, connecting to model server.

Parameters
hostThe host adress (and possibly port) to connect to. May be local.
nameThe name of the model to connect to.
configConfiguration parameters may be passed to the model.
headersAdditional headers may be passed to the server, e.g. access tokens.

Definition at line 6 of file UMBridgeModPiece.cpp.

References muq::Modeling::WorkPiece::numOutputs, and muq::Modeling::ModPiece::outputs.

Member Function Documentation

◆ ApplyHessianImpl()

void UMBridgeModPiece::ApplyHessianImpl ( unsigned int  outWrt,
unsigned int  inWrt1,
unsigned int  inWrt2,
muq::Modeling::ref_vector< Eigen::VectorXd > const &  inputs,
Eigen::VectorXd const &  sens,
Eigen::VectorXd const &  vec 
)
overrideprivatevirtual

◆ ApplyJacobianImpl()

void UMBridgeModPiece::ApplyJacobianImpl ( unsigned int  outWrt,
unsigned int  inWrt,
muq::Modeling::ref_vector< Eigen::VectorXd > const &  inputs,
Eigen::VectorXd const &  vec 
)
overrideprivatevirtual

◆ EvaluateImpl()

◆ GradientImpl()

void UMBridgeModPiece::GradientImpl ( unsigned int  outWrt,
unsigned int  inWrt,
muq::Modeling::ref_vector< Eigen::VectorXd > const &  inputs,
Eigen::VectorXd const &  sens 
)
overrideprivatevirtual

◆ read_input_size()

Eigen::VectorXi UMBridgeModPiece::read_input_size ( const std::string  host,
std::string  name,
const httplib::Headers &  headers 
)
private

◆ read_output_size()

Eigen::VectorXi UMBridgeModPiece::read_output_size ( const std::string  host,
std::string  name,
const httplib::Headers &  headers 
)
private

◆ StdVectorsToEigenvectords()

static std::vector<Eigen::VectorXd> muq::Modeling::UMBridgeModPiece::StdVectorsToEigenvectords ( std::vector< std::vector< double >>  vector)
inlinestatic

◆ StdVectorToEigenvectord() [1/2]

static const Eigen::VectorXd muq::Modeling::UMBridgeModPiece::StdVectorToEigenvectord ( const std::vector< double > &  vector)
inlinestatic

Definition at line 71 of file UMBridgeModPiece.h.

◆ StdVectorToEigenvectord() [2/2]

static Eigen::VectorXd muq::Modeling::UMBridgeModPiece::StdVectorToEigenvectord ( std::vector< double > &  vector)
inlinestatic

◆ StdVectorToEigenvectori()

static Eigen::VectorXi muq::Modeling::UMBridgeModPiece::StdVectorToEigenvectori ( const std::vector< std::size_t > &  vector)
inlinestatic

Definition at line 101 of file UMBridgeModPiece.h.

Referenced by read_input_size(), and read_output_size().

Member Data Documentation

◆ client

umbridge::HTTPModel muq::Modeling::UMBridgeModPiece::client
private

◆ config

json muq::Modeling::UMBridgeModPiece::config
private

The documentation for this class was generated from the following files: