import { CrossoverParams } from '../crossover/base';
import { Crossover } from '../crossover/base/Crossover';
import { FitnessFunction } from '../fitness/FitnessFunction';
import { GeneratorParams, IndividualGenerator } from '../generator/base';
import { BaseIndividual } from '../individual/base/BaseIndividual';
import { Mutation, MutationParams } from '../mutation/base/Mutation';
import { Population } from '../population/Population';
import { IndividualsSelection, IndividualsSelectionParams } from '../selection/base/IndividualsSelection';
import { PopulationReplacement, PopulationReplacementParams } from '../selection/replacement/PopulationReplacement';
import { TerminationCondition } from '../termination/TerminationCondition';
export interface EvolutionaryAlgorithmParams<I extends BaseIndividual<T>, T, GParams extends GeneratorParams, SParams extends IndividualsSelectionParams, XParams extends CrossoverParams<I, T>, MParams extends MutationParams> {
    populationSize: number;
    generator: IndividualGenerator<I, GParams, T>;
    generatorParams: GParams;
    selection: IndividualsSelection<I, T, SParams>;
    selectionParams: SParams;
    crossover: Crossover<I, T, XParams>;
    crossoverParams: XParams;
    mutation: Mutation<I, T, MParams>;
    mutationParams: MParams;
    fitnessFunction: FitnessFunction<I, T>;
    replacement: PopulationReplacement<I, T>;
    replacementParams: PopulationReplacementParams;
    terminationCondition: TerminationCondition<I, T>;
}
export declare class EvolutionaryAlgorithm<I extends BaseIndividual<T>, T, GParams extends GeneratorParams, SParams extends IndividualsSelectionParams, XParams extends CrossoverParams<I, T>, MParams extends MutationParams> {
    population: Population<I, T>;
    generations: number;
    private params;
    constructor(params: EvolutionaryAlgorithmParams<I, T, GParams, SParams, XParams, MParams>);
    run(): void;
    nextGeneration(): void;
    private runGeneration;
}
