/**
 * Genetic algorithm generation
 */
export default class GeneticAlgorithmGeneration {
    /**
     * @param {RLEnvironmentBase} env Environment
     * @param {number} [size] Number of models per generation
     * @param {number} [resolution] Resolution
     */
    constructor(env: RLEnvironmentBase, size?: number, resolution?: number);
    _env: RLEnvironmentBase;
    _resolution: number;
    _model: GeneticAlgorithm;
    /**
     * Reset all agents.
     */
    reset(): void;
    /**
     * Returns a score.
     * @returns {Array<Array<Array<number>>>} Score values
     */
    get_score(): Array<Array<Array<number>>>;
    /**
     * Returns the best score agent.
     * @returns {GeneticAlgorithmAgent} Best agent
     */
    top_agent(): GeneticAlgorithmAgent;
    /**
     * Run for all agents.
     */
    run(): void;
    /**
     * Update agent to new generation.
     * @param {number} mutation_rate Mutation rate
     */
    next(mutation_rate?: number): void;
}
export type GeneticModel = {
    /**
     * Run model
     */
    run: (...args: any[]) => void;
    /**
     * Returns mutated model
     */
    mutation: () => GeneticModel;
    /**
     * Returns mixed model
     */
    mix: (arg0: GeneticModel) => GeneticModel;
    /**
     * Returns a number how good the model is
     */
    score: () => number;
};
import { RLEnvironmentBase } from '../rl/base.js';
/**
 * @typedef {object} GeneticModel
 * @property {function(...*): void} run Run model
 * @property {function(): GeneticModel} mutation Returns mutated model
 * @property {function(GeneticModel): GeneticModel} mix Returns mixed model
 * @property {function(): number} score Returns a number how good the model is
 */
/**
 * Genetic algorithm
 */
declare class GeneticAlgorithm {
    /**
     * @param {number} size Number of models per generation
     * @param {new () => GeneticModel} model Function to generate the model
     */
    constructor(size: number, model: new () => GeneticModel);
    _size: number;
    _models: GeneticModel[];
    /**
     * Models
     * @type {GeneticModel[]}
     */
    get models(): GeneticModel[];
    /**
     * The best model.
     * @returns {GeneticModel} Best model
     */
    get bestModel(): GeneticModel;
    /**
     * Run for all models.
     * @param {...*} args Arguments for run
     */
    run(...args: any[]): void;
    /**
     * Update models to new generation.
     * @param {number} [mutation_rate] Mutation rate
     */
    next(mutation_rate?: number): void;
}
declare class GeneticAlgorithmAgent {
    constructor(env: any, resolution?: number, table?: any);
    _env: any;
    _resolution: number;
    _table: any;
    _total_reward: number;
    _max_epoch: number;
    get total_reward(): number;
    reset(): void;
    get_score(): any;
    get_action(state: any): any;
    run(env: any): void;
    mutation(): GeneticAlgorithmAgent;
    mix(other: any): GeneticAlgorithmAgent;
    score(): number;
}
export {};
