1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusSZufaellig = exports.KursblockungAlgorithmusSZufaellig = void 0;
- const KursblockungAlgorithmusS_1 = require("../../core/kursblockung/KursblockungAlgorithmusS");
- const KursblockungStatic_1 = require("../../core/kursblockung/KursblockungStatic");
- const System_1 = require("../../java/lang/System");
- class KursblockungAlgorithmusSZufaellig extends KursblockungAlgorithmusS_1.KursblockungAlgorithmusS {
- static MAX_RUNDEN_IN_FOLGE_OHNE_VERBESSERUNG = 50;
- schuelerArr;
- perm;
- nurMultikurse;
- /**
- * Im Konstruktor kann die Klasse die jeweiligen Datenstrukturen aufbauen. Kurse
- * dürfen in diese Methode noch nicht auf Schienen verteilt werden.
- *
- * @param pLogger Logger zum Protokollieren von Warnungen und Fehlern.
- * @param pDynDat Die dynamischen Blockungsdaten.
- * @param pNurMultikurse Falls TRUE, dann werden nur die Multikurse der SuS
- * verteilt.
- */
- constructor(pLogger, pDynDat, pNurMultikurse) {
- super(pLogger, pDynDat);
- this.nurMultikurse = pNurMultikurse;
- this.schuelerArr = pDynDat.gibSchuelerArray(this.nurMultikurse);
- this.perm = KursblockungStatic_1.KursblockungStatic.gibPermutation(this.schuelerArr.length);
- }
- /**
- * Der Algorithmus verteilt die SuS auf ihre Kurse zufällig. Kommt es während
- * des Verteilens zur Kollision, so wird der Kurs nicht gewählt.
- */
- berechne(pMaxTimeMillis) {
- let timeStart = System_1.System.currentTimeMillis();
- this.dynDaten.aktionSchuelerAusAllenKursenEntfernen();
- this.dynDaten.gibStatistik().aktionBewertungSpeichernS();
- let countKeineVerbesserung = 0;
- while (System_1.System.currentTimeMillis() - timeStart < pMaxTimeMillis) {
- if (this.berechneSchritt()) {
- countKeineVerbesserung = 0;
- }
- else {
- countKeineVerbesserung++;
- if (countKeineVerbesserung === KursblockungAlgorithmusSZufaellig.MAX_RUNDEN_IN_FOLGE_OHNE_VERBESSERUNG) {
- break;
- }
- }
- }
- }
- /**
- * Der Algorithmus verteilt die SuS ein weiteres Mal zufällig. Falls die
- * Verteilung schlechter ist, wird der vorherige Zustand wiederhergestellt.
- *
- * @return TRUE, falls der Zustand sich verbessert hat.
- */
- berechneSchritt() {
- let verbesserung = false;
- KursblockungStatic_1.KursblockungStatic.aktionPermutiere(this.perm);
- for (let p = 0; p < this.schuelerArr.length; p++) {
- let i = this.perm[p];
- let schueler = this.schuelerArr[i];
- this.dynDaten.gibStatistik().aktionBewertungSpeichernS();
- schueler.aktionZustandSpeichernS();
- schueler.aktionKurseAlleEntfernen();
- schueler.aktionKurseZufaelligVerteilen(this.nurMultikurse);
- let cmp = this.dynDaten.gibStatistik().gibBewertung_NW_KD_JetztS();
- if (cmp < 0) {
- schueler.aktionZustandLadenS();
- }
- if (cmp > 0) {
- verbesserung = true;
- }
- }
- return verbesserung;
- }
- isTranspiledInstanceOf(name) {
- return ['de.nrw.schule.svws.core.kursblockung.KursblockungAlgorithmusS', 'de.nrw.schule.svws.core.kursblockung.KursblockungAlgorithmusSZufaellig'].includes(name);
- }
- }
- exports.KursblockungAlgorithmusSZufaellig = KursblockungAlgorithmusSZufaellig;
- function cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusSZufaellig(obj) {
- return obj;
- }
- exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusSZufaellig = cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusSZufaellig;
- //# sourceMappingURL=KursblockungAlgorithmusSZufaellig.js.map
|