On this page:
3.1 RSDD
rsdd-engine
bernoulli-measure
semiring
boolean-semiring
real-semiring
complex-semiring
log-semiring
polynomial-semiring
9.2

3 Engines🔗ℹ

An engine provides a backend for performing inference. By default, Roulette automatically installs the RSDD backend.

3.1 RSDD🔗ℹ

 (require roulette/engine/rsdd) package: roulette-lib

procedure

(rsdd-engine [#:semiring s])

  (engine/c (immutable-set/c any/c) s)
  s : semiring? = real-semiring
Performs inference over the s semiring using RSDD. When an engine is garbage collected, all the memory associated with it (i.e., BDDs and weights) is freed.
> (define complex-engine (rsdd-engine #:semiring complex-semiring))
> (define real-poly-semiring (polynomial-semiring real-semiring))
> (define real-poly-engine (rsdd-engine #:semiring real-poly-semiring))

procedure

(bernoulli-measure f t [#:semiring s])

  (measure/c (immutable-set/c boolean?) s)
  f : s
  t : s
  s : semiring? = real-semiring
Returns a measure such that (set) gets (semiring-zero s), (set #f) gets f, (set #t) gets t, and (set #f #t) gets ((semiring-plus s) f t).
> (define-measurable x
    (bernoulli-measure 0+1i 1 #:semiring complex-semiring))
> ((infer x #:engine complex-engine) (set #f #t))

1+1i

> (define-measurable y
    (bernoulli-measure '(0.1 0.6) '(0.9 0.4) #:semiring real-poly-semiring))
> ((infer y #:engine real-poly-engine) (set #f #t))

'(1.0 1.0)

struct

(struct semiring (predicate zero add one mul))

  predicate : predicate/c
  zero : any/c
  add : (-> any/c any/c any/c)
  one : any/c
  mul : (-> any/c any/c any/c)
A struct type for semirings. Applying an instance of this structure applies its predicate.

Base semirings that can be used with RSDD.

procedure

(polynomial-semiring s)  semiring?

  s : semiring?
Constructs a polynomial semiring where coefficients are members of s.