import { JavaObject } from '../../java/lang/JavaObject';
import { GostBlockungsergebnisManager } from '../../core/utils/gost/GostBlockungsergebnisManager';
import { KursblockungDynKurs } from '../../core/kursblockung/KursblockungDynKurs';
import { Logger } from '../../core/logger/Logger';
import { Random } from '../../java/util/Random';
import { KursblockungDynStatistik } from '../../core/kursblockung/KursblockungDynStatistik';
import { GostBlockungsdatenManager } from '../../core/utils/gost/GostBlockungsdatenManager';
import { KursblockungDynSchueler } from '../../core/kursblockung/KursblockungDynSchueler';
import { Class } from '../../java/lang/Class';
export declare class KursblockungDynDaten extends JavaObject {
/**
* Ein {@link Random}-Objekt zur Steuerung des Zufalls über einen Anfangs-Seed.
*/
private readonly _random;
/**
* Logger für Benutzerhinweise, Warnungen und Fehler.
*/
private readonly _logger;
/**
* Alle Regeln nach ihrer ID gruppiert und in einer Liste der Reihenfolge nach gespeichert.
*/
private readonly _regelMap;
/**
* Die maximale Blockungszeit in Millisekunden.
*/
private readonly _maxTimeMillis;
/**
* Diese Datenstruktur speichert die Schienen und ihre Kurse.
*/
private _schienenArr;
/**
* Alles Kurse.
*/
private _kursArr;
/**
* Alle Kurse, die noch über Schienen wandern können.
*/
private _kursArrFrei;
/**
* Map für schnellen Zugriff auf die Kurse über ihre ID.
*/
private readonly _kursMap;
/**
* Alle Facharten. Fachart meint Fach + Kursart, z.B. "D;GK".
*/
private _fachartArr;
/**
* Map für schnellen Zugriff auf die Facharten über FachID und KursartID.
*/
private readonly _fachartMap2D;
/**
* Alle SuS.
*/
private _schuelerArr;
/**
* Map für schnellen Zugriff auf die SuS über ihre ID.
*/
private readonly _schuelerMap;
/**
* Das Statistik-Objekt speichert die aktuellen Nichtwahlen, Kursdifferenzen und weitere Daten.
*/
private readonly _statistik;
/**
* Der Konstruktor der Klasse liest alle Daten von {@link GostBlockungsdatenManager} ein und baut die relevanten Datenstrukturen auf.
*
* @param random Ein {@link Random}-Objekt zur Steuerung des Zufalls über einen Anfangs-Seed.
* @param logger Ein {@link Logger}-Objekt für Benutzerhinweise, Warnungen und Fehler.
* @param input Die Eingabedaten (Schnittstelle zur GUI).
*/
constructor(random: Random, logger: Logger, input: GostBlockungsdatenManager);
/**
* Überprüft alle Referenzen in {@link KursblockungInput} und auch die referentielle Integrität.
*
* @param input Das {@link KursblockungInput}-Objekt von der GUI.
*/
private fehlerBeiReferenzen;
private static schritt01FehlerBeiReferenzen_Regeltyp1;
private static schritt01FehlerBeiReferenzen_Regeltyp2;
private static schritt01FehlerBeiReferenzen_Regeltyp3;
private static schritt01FehlerBeiReferenzen_Regeltyp4;
private static schritt01FehlerBeiReferenzen_Regeltyp5;
private static schritt01FehlerBeiReferenzen_Regeltyp6;
private static schritt01FehlerBeiReferenzen_Regeltyp7;
private static schritt01FehlerBeiReferenzen_Regeltyp8;
private static schritt01FehlerBeiReferenzen_Regeltyp9;
private static schritt01FehlerBeiReferenzen_Regeltyp10;
private static schritt01FehlerBeiReferenzen_Regeltyp11;
private static schritt01FehlerBeiReferenzen_Regeltyp12;
private static schritt01FehlerBeiReferenzen_Regeltyp13;
private static schritt01FehlerBeiReferenzen_Regeltyp14;
private static schritt01FehlerBeiReferenzen_Regeltyp15;
private static schritt01FehlerBeiReferenzen_Regeltyp16;
private static schritt01FehlerBeiReferenzen_Regeltyp17;
private static schritt01FehlerBeiReferenzen_Regeltyp18;
private fehlerBeiRegelGruppierung;
private fehlerBeiSchuelerErstellung;
private fehlerBeiFachartenErstellung;
private fehlerBeiSchuelerFachwahlenErstellung;
private fehlerBeiStatistikErstellung;
private fehlerBeiSchienenErzeugung;
private fehlerBeiKursErstellung;
private schritt08FehlerBeiKursErstellungErzeuge;
private fehlerBeiKursFreiErstellung;
private fehlerBeiFachartKursArrayErstellung;
private fehlerBeiRegel_4_oder_5_SCHUELER_KURS_VARIANTEN;
private fehlerBeiRegel_7_oder_8_KURS_MIT_KURS_VARIANTEN;
private fehlerBeiRegel_9_KURS_MIT_DUMMY_SUS_AUFFUELLEN;
private fehlerBeiRegel_10_LEHRKRAEFTE_BEACHTEN;
private fehlerBeiRegel_11_bis_14_SCHUELER_MIT_SCHUELER_VARIANTEN;
private fehlerBeiRegel_15_KURS_MAXIMALE_SCHUELERANZAHL;
private fehlerBeiRegel_16_SCHUELER_IGNORIEREN;
private fehlerBeiRegel_18_FACH_KURSART_MAXIMALE_ANZAHL_PRO_SCHIENE;
private gibFachart;
private gibSchueler;
private gibKurs;
/**
* Liefert ein neu erzeugtes {@link GostBlockungsergebnisManager}-Objekt.
*
Dieses Objekt beinhaltet alle Informationen für die GUI.
*
* @param pDataManager Das Eingabe-Objekt (der Daten-Manager).
* @param pErgebnisID Die ID des Ergebnisses.
*
* @return ein neu erzeugtes {@link GostBlockungsergebnisManager}-Objekt.
*/
gibErzeugtesKursblockungOutput(pDataManager: GostBlockungsdatenManager, pErgebnisID: number): GostBlockungsergebnisManager;
/**
* Liefert das Logger-Objekt für Benutzerhinweise, Warnungen und Fehler.
*
* @return Das Logger-Objekt für Benutzerhinweise, Warnungen und Fehler.
*/
gibLogger(): Logger;
/**
* Liefert das {@link Random}-Objekt.
*
* @return das {@link Random}-Objekt.
*/
gibRandom(): Random;
/**
* Liefert das Statistik-Objekt (für Anfragen zu Nichtwahlen, Kursdifferenzen, etc.).
*
* @return Das Statistik-Objekt (für Anfragen zu Nichtwahlen, Kursdifferenzen, etc.).
*/
gibStatistik(): KursblockungDynStatistik;
/**
* Liefert die maximale Blockungszeit in Millisekunden. Entweder handelt es sich um einen Standardwert oder der Wert
* wurde im Konstruktor als Regel übergeben.
*
* @return Liefert die maximale Blockungszeit in Millisekunden.
*/
gibBlockungszeitMillis(): number;
/**
* Liefert die maximal erlaubte Anzahl an Schienen. Entweder handelt es sich um einen Standardwert oder der Wert
* wurde im Konstruktor als Regel übergeben.
*
* @return Liefert die maximal erlaubte Anzahl an Schienen.
*/
gibSchienenAnzahl(): number;
/**
* Liefert alle Kurse.
*
* @return Array aller Kurse.
*/
gibKurseAlle(): Array;
/**
* Liefert alle Kurse deren Lage nicht komplett fixiert ist.
*
* @return Array aller Kurse, deren Schienenlage noch veränderbar ist.
*/
gibKurseDieFreiSind(): Array;
/**
* Liefert die Anzahl alle Kurse deren Lage nicht komplett fixiert ist.
*
* @return Anzahl aller Kurse, deren Schienenlage noch veränderbar ist.
*/
gibKurseDieFreiSindAnzahl(): number;
/**
* Liefert einen Long-Wert, der einer Bewertung der Fachwahlmatrix entspricht. Je kleiner der Wert, desto besser ist
* die Bewertung.
*
* @return Long-Wert, der einer Bewertung der Fachwahlmatrix entspricht.
*/
gibBewertungFachartPaar(): number;
/**
* Liefert ein Array aller Schülerinnen und Schüler.
* Falls der Parameter {@code pNurMultiKurse} TRUE ist, dann werden nur SuS mit mindestens einem Multikurs ausgewählt.
*
* @param pNurMultiKurse Falls TRUE, dann werden nur SuS mit mindestens einem Multikurs ausgewählt.
*
* @return ein Array aller Schülerinnen und Schüler.
*/
gibSchuelerArray(pNurMultiKurse: boolean): Array;
/**
* Liefert ein Array aller Schülerinnen und Schüler.
*
* @return Ein Array aller Schülerinnen und Schüler.
*/
gibSchuelerArrayAlle(): Array;
/**
* Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen, Kursdiffenzen) des Zustandes S sich
* verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*
* @return {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen, Kursdiffenzen) des Zustandes S sich
* verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*/
gibBewertungJetztBesserAlsS(): number;
/**
* Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Reihenfolge: Nichtwahlen, Kursdiffenzen,
* Fachwahlmatrix) des Zustandes-K sich verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*
* @return {@code -1, 0 oder +1}, falls die Bewertung (Reihenfolge: Nichtwahlen, Kursdiffenzen, Fachwahlmatrix) des
* Zustandes-K sich verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*/
gibCompareZustandK_NW_KD_FW(): number;
/**
* Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Reihenfolge: Nichtwahlen, Kursdiffenzen,
* Fachwahlmatrix) des Zustandes-G sich verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*
* @return {@code -1, 0 oder +1}, falls die Bewertung (Reihenfolge: Nichtwahlen, Kursdiffenzen, Fachwahlmatrix) des
* Zustandes-G sich verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*/
gibCompareZustandG_NW_KD_FW(): number;
/**
* Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Reihenfolge: Fachwahlmatrix, Nichtwahlen,
* Kursdiffenzen) des Zustandes K sich verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*
* @return {@code -1, 0 oder +1}, falls die Bewertung (Reihenfolge: Fachwahlmatrix, Nichtwahlen, Kursdiffenzen) des
* Zustandes K sich verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*/
gibBewertungK_FW_NW_KD_JetztBesser(): number;
/**
* Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen, Kursdiffenzen) des Zustandes S sich
* verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*
* @return {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen, Kursdiffenzen) des Zustandes K sich
* verschlechtert (-1), sich verbessert (+1) hat oder gleichgeblieben (0) ist.
*/
gibBewertung_NW_KD_JetztS(): number;
/**
* Liefert TRUE, falls dieses Objekt besser ist als das übergebene Objekt b.
*
* @param b Das zu vergleichende Objekt.
*
* @return TRUE, falls dieses Objekt besser ist als das übergebene Objekt b.
*/
gibIstBesser_NW_KD_FW_Als(b: KursblockungDynDaten): boolean;
/**
* Liefert true, falls der Kurs in der Schiene ist.
*
* @param idKursDB Die Datenbank-ID des Kurses.
* @param schieneDB Die Datenbank-ID der Schiene (1-indiziert!).
* @return true, falls der Kurs in der Schiene ist.
*/
gibIstKursInSchiene(idKursDB: number, schieneDB: number): boolean;
/**
* Liefert true, falls der Schüler im Kurs ist.
*
* @param idSchuelerDB Die Datenbank-ID des Schülers.
* @param idKursDB Die Datenbank-ID des Kurses.
* @return true, falls der Kurs in der Schiene ist.
*/
gibIstSchuelerInKurs(idSchuelerDB: number, idKursDB: number): boolean;
/**
* Liefert true, falls die übergebene Schiene nur LK-Kurse enthält (oder keine Kurse).
*
* @param schienenNr1indiziert Die Schienen-Nummer
* @return true, falls die übergebene Schiene nur LK-Kurse enthält (oder keine Kurse).
*/
gibHatSchieneNurLK(schienenNr1indiziert: number): boolean;
/**
* Liefert true, falls die übergebene Schiene keine LK-Kurse enthält.
*
* @param schienenNr1indiziert Die Schienen-Nummer
* @return true, falls die übergebene Schiene keine LK-Kurse enthält.
*/
gibHatSchieneKeineLK(schienenNr1indiziert: number): boolean;
/**
* Liefert die Anzahl an SuS in dem Kurs (oder -1 falls der Kurs nicht existiert).
*
* @param idKursDB Die Datenbank-ID des Kurses.
* @return die Anzahl an SuS in dem Kurs (oder -1 falls der Kurs nicht existiert).
*/
gibKursgroesseDesKurses(idKursDB: number): number;
/**
* Liefert die Kursdifferenz der Fachart des übergebenen Kurses (oder -1 falls der Kurs nicht existiert)..
*
* @param idKursDB Die Datenbank-ID des Kurses.
* @return die Kursdifferenz der Fachart des übergebenen Kurses (oder -1 falls der Kurs nicht existiert)..
*/
gibKursdifferenzDesKurses(idKursDB: number): number;
/**
* Speichert die Bewertung, die Kursverteilung und die Schülerverteilung im Zustand S.
*/
aktionZustandSpeichernS(): void;
/**
* Speichert die Bewertung, die Kursverteilung und die Schülerverteilung im Zustand K.
*/
aktionZustandSpeichernK(): void;
/**
* Speichert die Bewertung, die Kursverteilung und die Schülerverteilung im Zustand G.
*/
aktionZustandSpeichernG(): void;
/**
* Lädt den zuvor gespeicherten Zustand S (Kursverteilung und Schülerverteilung).
*/
aktionZustandLadenS(): void;
/**
* Lädt den zuvor gespeicherten Zustand K (Kursverteilung und Schülerverteilung).
*/
aktionZustandLadenK(): void;
/**
* Lädt den zuvor gespeicherten Zustand K einer anderen {@link KursblockungDynDaten}-Objekts (Kursverteilung und Schülerverteilung).
*
* @param b Das andere {@link KursblockungDynDaten}-Objekt.
*/
aktionZustandLadenVon(b: KursblockungDynDaten): void;
/**
* Lädt den zuvor gespeicherten Zustand G (Kursverteilung und Schülerverteilung).
*/
aktionZustandLadenG(): void;
/**
* Lädt den zuvor gespeicherten Zustand K (nur Kursverteilung, ohne Schülerverteilung).
*/
aktionZustandLadenKohneSuS(): void;
/**
* Entfernt alle SuS aus ihren Kursen.
*/
aktionSchuelerAusAllenKursenEntfernen(): void;
/**
* Verteilt alle Kurse auf ihre Schienen zufällig. Kurse die keinen Freiheitsgrad haben, werden dabei ignoriert.
*/
aktionKurseFreieZufaelligVerteilen(): void;
/**
* Verteilt genau einen Kurs zufällig. Kurse die keinen Freiheitsgrad haben, werden dabei ignoriert.
*/
aktionKursVerteilenEinenZufaelligenFreien(): void;
/**
* Verteilt einen Kurs zufällig. Kurse die keinen Freiheitsgrad haben und Multikurse, werden dabei ignoriert.
*/
aktionKursFreienEinenZufaelligVerteilenAberNichtMultikurse(): void;
/**
* Verändert die Lage der Kurse einer zufälligen Fachgruppe komplett neu.
*/
aktionKursVerteilenEineZufaelligeFachgruppe(): void;
/**
* Verteilt die SuS auf die jetzige Kurslage. Pro S. werden erst die Multikurse verteilt, dann werden die übrigen
* Kurse mit Hilfe eines spezielle bipartiten Matching-Algorithmus verteilt. Sobald ein S. seine Nichtwahlen durch
* eine Veränderung der Kurslage reduzieren könnte, wird die Kurslage verändert.
*
* @return TRUE, falls es zu einer Veränderung der Kurslage kam.
*/
aktionKurseVerteilenNachSchuelerwunsch(): boolean;
/**
* Gesucht wird der Schüler, der unzufrieden ist. Nach seinem Wunsch werden die Kurse neuverteilt.
*
Kurzzeitig wird der S. Kursen hinzugefügt, am Ende aber wieder entfernt.
*
* @return TRUE, falls es zu einer Veränderung der Kurslage kam.
*/
aktionKurseVerteilenNachSchuelerwunschSingle(): boolean;
/**
* Verteilt die SuS auf die jetzige Kurslage. Pro S. werden erst die Multikurse verteilt, dann werden die übrigen
* Kurse mit Hilfe eines bipartiten Matching-Algorithmus verteilt. Bereits belegte Facharten werden übersprungen.
*/
aktionSchuelerVerteilenMitBipartitemMatching(): void;
/**
* Verteilt die SuS auf die jetzige Kurslage. Pro S. werden erst die Multikurse verteilt, dann werden die übrigen
* Kurse mit Hilfe eines gewichteten Bipartiten-Matching-Algorithmus verteilt.
*/
aktionSchuelerVerteilenMitGewichtetenBipartitemMatching(): void;
/**
* Setzt den S. wenn möglich in den übergebenen Kurs.
*
* @param idSchuelerDB Die Datenbank-ID des S.
* @param idKursDB Die Datenbank-ID des Kurses.
*/
aktionSchuelerSetzenInKurs(idSchuelerDB: number, idKursDB: number): void;
/**
* Entfernt den S. wenn möglich aus den übergebenen Kurs.
*
* @param idSchuelerDB Die Datenbank-ID des S.
* @param idKursDB Die Datenbank-ID des Kurses.
*/
aktionSchuelerEntfernenAusKurs(idSchuelerDB: number, idKursDB: number): void;
/**
* Verschiebt den Kurs in die Schiene.
*
* @param idKursDB Die Datenbank-ID des Kurses.
* @param schieneDB Die Datenbank-ID der Schiene (1-indiziert!).
*/
aktionSetzeKursInSchiene(idKursDB: number, schieneDB: number): void;
/**
* Debug Ausgaben. Nur für Testzwecke.
*/
debug(): void;
/**
* Debug Ausgaben (Schienen und Kurse)
*/
printlnSchienenUndKurse(): void;
/**
* Debug-Ausgabe der Schienen mit ihre Kursen und ihren SuS.
*/
printlnSchienenUndKurseUndSchueler(): void;
/**
* Debug-Ausgabe aller Facharten mit den zugehörigen Kursen.
*/
printlnFacharten(): void;
transpilerCanonicalName(): string;
isTranspiledInstanceOf(name: string): boolean;
static class: Class;
}
export declare function cast_de_svws_nrw_core_kursblockung_KursblockungDynDaten(obj: unknown): KursblockungDynDaten;
//# sourceMappingURL=KursblockungDynDaten.d.ts.map