commit fb21e4baa6a17d3edfc625be6059c806591da7a8 parent 23bd623b6630121b2e99c693ced37ded1e236998 Author: NunoSempere <nuno.sempere@protonmail.com> Date: Sat, 14 Oct 2023 23:48:11 +0100 savepoint while wrangling types Diffstat:
| M | ocaml/out/samples | | | 0 | |
| M | ocaml/out/samples.cmi | | | 0 | |
| M | ocaml/out/samples.cmx | | | 0 | |
| M | ocaml/out/samples.o | | | 0 | |
| M | ocaml/samples.ml | | | 16 | ++++++++++++++-- |
5 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/ocaml/out/samples b/ocaml/out/samples Binary files differ. diff --git a/ocaml/out/samples.cmi b/ocaml/out/samples.cmi Binary files differ. diff --git a/ocaml/out/samples.cmx b/ocaml/out/samples.cmx Binary files differ. diff --git a/ocaml/out/samples.o b/ocaml/out/samples.o Binary files differ. diff --git a/ocaml/samples.ml b/ocaml/samples.ml @@ -13,6 +13,13 @@ let cumsumXs xs = new_sum, ys @ [new_sum] ) (0.0, []) xs in cum_sum +let findIndex xs test = + let rec recursiveHelper ys i = + match ys with + | [] -> None + | z :: zs -> if test z then Some i else recursiveHelper zs (i+1) + in + recursiveHelper xs 0 (* Basic samplers *) let sampleZeroToOne () : float = Random.float 1.0 @@ -40,8 +47,13 @@ let mixture (samplers: (unit -> float) array) (weights: float array) = | true -> let normalized_weights = normalizeXs weights in let cumsummed_normalized_weights = cumsumXs normalized_weights in - let answer = 1.1 in - Some(1.0) + let p = sampleZeroToOne () in + let chosenSamplerIndex = findIndex cumsummed_normalized_weights (fun x -> x < p) in + let sample = match chosenSamplerIndex with + | None -> None + | Some(i) -> Some(1.0) (* (samplers.(i) ()) |> Some *) + in + sample let () = Random.init 1;