import { FitnessFunction } from '../fitness/FitnessFunction';
import { GeneratorParams } from '../generator/base/GeneratorParams';
import { IndividualGenerator } from '../generator/base/IndividualGenerator';
import { BaseIndividual } from '../individual/base/BaseIndividual';
export interface PopulationItem<I extends BaseIndividual<T>, T> {
    individual: I;
    fitness: number;
    age: number;
}
export interface PopulationStatistics {
    averageAge: number;
    averageFitness: number;
    fitnessSum: number;
    fittestIndividualIndex: number;
}
export declare class Population<I extends BaseIndividual<T>, T> {
    static readonly DEFAULT_FITNESS = 0;
    static readonly DEFAULT_FITTEST_IND_INDEX = -1;
    populationStatistics: PopulationStatistics;
    private items;
    generatePopulationWithOperations<Params extends GeneratorParams>(populationSize: number, generator: IndividualGenerator<I, Params, T>, generatorParams: Params, fitnessFunction: FitnessFunction<I, T>): void;
    getPopulationSize(): number;
    replacePopulation(populationItems: Array<PopulationItem<I, T>>): void;
    pushIndividual(individual: I, fitness?: number, age?: number): void;
    getFittestIndividualItem(): PopulationItem<I, T> | undefined;
    getPopulationItem(index: number): PopulationItem<I, T>;
    getPopulationItems(): PopulationItem<I, T>[];
    private setStatistics;
}
