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.