macro_rules! sample {
($sample_ident:ident $trace_ident:ident $name:expr, $dist:expr) => { ... };
}
Expand description
The macro that is used for sampling from a distribution.
§Example
use r_gen::{sample, r_gen};
use r_gen::{simulate, distributions::{Value, Distribution}, trace::{Choicemap, Trace}};
use std::rc::Rc;
#[r_gen]
fn my_model(():()) {
let p = sample!(format!("p"), Distribution::Bernoulli(0.5));
print!("p: {}", p);
}
simulate(&mut my_model, ());
Takes the form: identifier, Distribution. The identifier will have the value sampled from the distribution stored in
it. It can be used later. p will have type Value
.
§Example (Store results in an array)
use r_gen::{sample, r_gen};
use r_gen::{simulate, distributions::{Value, Distribution}, trace::{Choicemap, Trace}};
use std::rc::Rc;
#[r_gen]
fn flip_my_biased_coins((n, p) : (usize, f64)) {
let mut flips = vec![Value::Integer(0); n];
for i in 0..n {
flips[i] = sample!(format!("flip_{}", i), Distribution::Bernoulli(p));
}
}
let (tr, _) = simulate(&mut flip_my_biased_coins, (10, 0.5));
println!("{}", tr.get_trace_string());