import { KursblockungDynDaten } from '../../core/kursblockung/KursblockungDynDaten';
import { KursblockungAlgorithmusK } from '../../core/kursblockung/KursblockungAlgorithmusK';
import { Logger } from '../../logger/Logger';
export declare class KursblockungAlgorithmusKMatching extends KursblockungAlgorithmusK {
    private static readonly MAX_RUNDEN_IN_FOLGE_OHNE_VERBESSERUNG;
    private readonly schuelerAlle;
    /**
     * Im Konstruktor kann die Klasse die jeweiligen Datenstrukturen aufbauen. Kurse
     * dürfen in diese Methode noch nicht auf Schienen verteilt werden.
     *
     * @param pLogger Logger für Benutzerhinweise, Warnungen und Fehler.
     * @param pDynDat Die dynamischen Blockungsdaten.
     */
    constructor(pLogger: Logger, pDynDat: KursblockungDynDaten);
    /**
     * Der Algorithmus entfernt zunächst alle SuS aus ihren Kursen. Anschließend
     * werden die Kurse zufällig verteilt. Anschließend verändert der Algorithmus
     * die Lage eines zufälligen Kurses. Falls sich die Bewertung verschlechter,
     * wird die Veränderung rückgängig gemacht.
     */
    berechne(pMaxTimeMillis: number): void;
    /**
     * Die Lage einiger Kurse wird verändert. Falls sich die Bewertung
     * verschlechter, wird die Veränderung rückgängig gemacht.
     */
    private berechneSchritt;
    /**
     * Verteilt die SuS. Multikurse werden zufällig verteilt. Alle anderen Kurse mit
     * Hilfe eines Matching-Algorithmus.
     */
    private verteileSuS;
    isTranspiledInstanceOf(name: string): boolean;
}
export declare function cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKMatching(obj: unknown): KursblockungAlgorithmusKMatching;
