@thi.ng/gp
Version: 
Genetic programming helpers & strategies (tree based & multi-expression programming)
32 lines (31 loc) • 734 B
JavaScript
import { assert } from "@thi.ng/errors/assert";
import { add } from "@thi.ng/transducers/add";
import { choices } from "@thi.ng/transducers/choices";
import { range } from "@thi.ng/transducers/range";
const terminalNode = (value) => ({
  type: "term",
  value
});
const opNode = (op, args) => ({
  type: "op",
  op,
  args
});
const probabilities = (opts) => {
  const probabilities2 = opts.ops.map((op) => op.prob);
  const psum = add(probabilities2);
  assert(psum < 1, "total op probabilities MUST be < 1");
  return {
    iter: choices(
      [...range(probabilities2.length + 1)],
      [1 - psum, ...probabilities2],
      opts.rnd
    ),
    probTerminal: 1 - psum
  };
};
export {
  opNode,
  probabilities,
  terminalNode
};