"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKFachwahlmatrix = exports.KursblockungAlgorithmusKFachwahlmatrix = void 0; const KursblockungAlgorithmusK_1 = require("../../core/kursblockung/KursblockungAlgorithmusK"); const System_1 = require("../../java/lang/System"); class KursblockungAlgorithmusKFachwahlmatrix extends KursblockungAlgorithmusK_1.KursblockungAlgorithmusK { /** * Im Konstruktor kann die Klasse die jeweiligen Datenstrukturen aufbauen. Kurse * dürfen in diese Methode noch nicht auf Schienen verteilt werden. * * @param logger Logger für Benutzerhinweise, Warnungen und Fehler. * @param dynDat Die dynamischen Blockungsdaten. */ constructor(logger, dynDat) { super(logger, dynDat); } /** * Der Algorithmus entfernt zunächst alle SuS aus ihren Kursen. Anschließend * werden die Kurse zufällig verteilt. */ berechne(pMaxTimeMillis) { if (this.dynDaten.gibKurseDieFreiSindAnzahl() === 0) { return; } let timeStart = System_1.System.currentTimeMillis(); this.dynDaten.aktionSchuelerAusAllenKursenEntfernen(); this.dynDaten.aktionKurseFreieZufaelligVerteilen(); this.dynDaten.aktionZustandSpeichernK(); let countKeineVerbesserung = 0; while (System_1.System.currentTimeMillis() - timeStart < pMaxTimeMillis) { if (this.berechneSchritt()) { countKeineVerbesserung = 0; } else { countKeineVerbesserung++; if (countKeineVerbesserung === 10000) { break; } } } } /** * Die Lage einiger Kurse wird verändert. Falls sich die Bewertung * verschlechter, wird die Veränderung rückgängig gemacht. * * @return TRUE, falls sich die Bewertung verbessert hat. */ berechneSchritt() { let maxChanges = 1; while (Math.random() < 0.5) { maxChanges++; } for (let changes = 0; changes < maxChanges; changes++) { this.dynDaten.aktionKursFreienEinenZufaelligVerteilen(); if (this.dynDaten.gibBewertungJetztBesserAlsK() > 0) { this.dynDaten.aktionZustandSpeichernK(); return true; } } this.dynDaten.aktionZustandLadenK(); return false; } isTranspiledInstanceOf(name) { return ['de.nrw.schule.svws.core.kursblockung.KursblockungAlgorithmusKFachwahlmatrix', 'de.nrw.schule.svws.core.kursblockung.KursblockungAlgorithmusK'].includes(name); } } exports.KursblockungAlgorithmusKFachwahlmatrix = KursblockungAlgorithmusKFachwahlmatrix; function cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKFachwahlmatrix(obj) { return obj; } exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKFachwahlmatrix = cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKFachwahlmatrix; //# sourceMappingURL=KursblockungAlgorithmusKFachwahlmatrix.js.map