package prbnmcn-dagger-test

  1. Overview
  2. Docs

Source file diffusions.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
open Dagger
open Lmh_inference

let diffusion = sample @@ Dist.iid 2 @@ Stats_dist.brownian ~start:0.0 ~std:1.

let plot data =
  if Helpers.produce_artifacts then
    Plot.(
      run
        ~target:(qt ())
        exec
        (plot2
           ~xaxis:"x"
           ~yaxis:"y"
           (List.map
              (fun points ->
                Line.line
                  ~points:(Plot.Data.of_list (List.map Plot.r1 points))
                  ())
              data)))

let run_traced () =
  let rng_state = RNG.make [| 0x1337; 0x533D |] in
  let samples = 2000 in
  let t0 = Unix.gettimeofday () in
  let res = stream_samples diffusion rng_state |> Helpers.take 2000 in
  let t1 = Unix.gettimeofday () in
  let res = List.of_seq res in
  let (x1, x2) = res |> List.map (fun a -> (a.(0), a.(1))) |> List.split in
  plot [x1; x2] ;
  Format.eprintf
    "performed %d samples in %f seconds (%f samples/sec)"
    samples
    (t1 -. t0)
    (float_of_int samples /. (t1 -. t0))

open Lmh_incremental_inference

let () = if Helpers.produce_artifacts then Cgraph.Internal.set_debug true

let diffusion = sample @@ Stats_dist.brownian ~start:0.0 ~std:1.0

let run_incremental () =
  let rng_state = RNG.make [| 0x1337; 0x533D |] in
  let samples = 2000 in
  let t0 = Unix.gettimeofday () in
  let res = stream_samples diffusion rng_state |> Helpers.take 2000 in
  let t1 = Unix.gettimeofday () in
  let res = List.of_seq res in
  plot [res] ;
  Format.eprintf
    "performed %d samples in %f seconds (%f samples/sec)"
    samples
    (t1 -. t0)
    (float_of_int samples /. (t1 -. t0))

let tests =
  [ ( QCheck.Test.make ~name:"diffusion" ~count:1 QCheck.unit @@ fun () ->
      run_traced () ;
      run_incremental () ;
      true ) ]