UNPKG

@thi.ng/gp

Version:

Genetic programming helpers & strategies (tree based & multi-expression programming)

69 lines 2.76 kB
import type { Location } from "@thi.ng/zipper"; import type { ASTNode, ASTOpts } from "./api.js"; export declare class AST<OP, T> { opts: ASTOpts<OP, T>; choices: IterableIterator<number>; probTerminal: number; constructor(opts: ASTOpts<OP, T>); /** * Returns a random AST with given max tree depth. The max depth * provided in {@link ASTOpts} is used by default. * * @param maxDepth - */ randomAST(maxDepth?: number): ASTNode<OP, T>; /** * Immutably transplants a randomly chosen subtree of `parent2` into * a randomly chosen location in `parent1` and vice versa. Returns 2 * new trees. * * @param parent1 - * @param parent2 - */ crossoverSingle(parent1: ASTNode<OP, T>, parent2: ASTNode<OP, T>): ASTNode<OP, T>[]; /** * Probilistically replaces randomly chosen tree nodes with a new random AST * of given `maxDepth` (default: 1). Never mutates root. * * @remarks * The AST's pre-configured max tree depth will always be respected, so * depending on the depth of the selected mutation location, the randomly * inserted/replaced subtree might be more shallow than given `maxDepth`. * I.e. if a tree node at max depth is selected for mutation, it will always * result in a randomly chosen terminal node only. * * @param tree - * @param maxDepth - */ mutate(tree: ASTNode<OP, T>, maxDepth?: number): ASTNode<OP, T>; /** * Returns linearized/flat version of given AST as an array of [zipper * locations](https://docs.thi.ng/umbrella/zipper/classes/Location.html). * * @param tree - */ linearizedAST(tree: ASTNode<OP, T>): Location<ASTNode<OP, T>>[]; /** * Returns random {@link ASTNode} from given tree, using the user provided * PRNG (via `opts`) or * [`SYSTEM`](https://docs.thi.ng/umbrella/random/variables/SYSTEM.html). * The returned value is a [zipper * location](https://docs.thi.ng/umbrella/zipper/classes/Location.html) of * the selected node. * * @remarks * The actual `ASTNode` can be obtained via `.node`. * * Only nodes in the linearized index range `[min..max)` are returned * (default: entire tree range). Since the linear tree length isn't known * beforehand, `max` < 0 (default) is equivalent to the linearized tree end. * * @param tree - * @param min - * @param max - */ selectRandomNode(tree: ASTNode<OP, T>, min?: number, max?: number): Location<ASTNode<OP, T>>; protected randomASTNode(d: number, maxDepth: number): ASTNode<OP, T>; protected asZipper(tree: ASTNode<OP, T>): Location<ASTNode<OP, T>>; } //# sourceMappingURL=ast.d.ts.map