Crate r_gen

Source
Expand description

A framework for writing generative models in the rust programming language.

§Example of Importance Sampling

use r_gen::{sample, r_gen}; 
use r_gen::{simulate, generate, distributions::{Value, Distribution}, trace::{Choicemap, Trace}}; 
use std::rc::Rc;
fn main() {
    //Define our generative model. 
    #[r_gen]
    fn my_model(():()){
        let p = sample!(format!("p"), Distribution::Beta(1.0, 1.0)); 
        sample!(format!("num_heads"), Distribution::Binomial(100, p.into()));
    }

    //Run the model once in the forward direction and record the observations. 
    let (t, _) : (Trace, _)= simulate(&mut my_model, ());
    let choices = Choicemap::from(vec![("num_heads", t.choices["num_heads"].clone())]);

    //Perform importance resampling to get an estimate for the value of p. 
    let mut traces = Vec::new();
    for _ in 0..1000 {
        let (gt, _) : (Trace, _)= generate(&mut my_model, (), &choices);
        traces.push(gt); 
    }
    
    println!("Actual value for p:\t {}", t.choices["p"]); 
    println!("Generated value for p:\t {}", Trace::sample_weighted_traces(&traces).unwrap().choices["p"]); 
}

Outputs:

Actual value for p:      0.8011431168181488
Generated value for p:   0.7879998086169554

Modules§

  • Distributions a generative model can sample from.
  • Trace objects that represent a run of a generative model.

Macros§

  • The macro that is used for sampling from a distribution.

Functions§

  • Run a generative model in the forward direction, fixing certian decisions or observations. As input, it takes a generative model (function with the #r_gen tag), the arguments to that function, and a choicemap of the observed variables. Returns a tuple of the trace generated by running the function and the return value of the function itself.
  • Run the given generative model in the forward direction. As input, it takes a generative model (function with the #r_gen tag) and the arguments to that function. Returns a tuple of the trace generated by running the function and the return value of the function itself.

Attribute Macros§