KursblockungAlgorithmusKFachwahlmatrix.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKFachwahlmatrix = exports.KursblockungAlgorithmusKFachwahlmatrix = void 0;
  4. const KursblockungAlgorithmusK_1 = require("../../core/kursblockung/KursblockungAlgorithmusK");
  5. const System_1 = require("../../java/lang/System");
  6. class KursblockungAlgorithmusKFachwahlmatrix extends KursblockungAlgorithmusK_1.KursblockungAlgorithmusK {
  7. /**
  8. * Im Konstruktor kann die Klasse die jeweiligen Datenstrukturen aufbauen. Kurse
  9. * dürfen in diese Methode noch nicht auf Schienen verteilt werden.
  10. *
  11. * @param logger Logger für Benutzerhinweise, Warnungen und Fehler.
  12. * @param dynDat Die dynamischen Blockungsdaten.
  13. */
  14. constructor(logger, dynDat) {
  15. super(logger, dynDat);
  16. }
  17. /**
  18. * Der Algorithmus entfernt zunächst alle SuS aus ihren Kursen. Anschließend
  19. * werden die Kurse zufällig verteilt.
  20. */
  21. berechne(pMaxTimeMillis) {
  22. if (this.dynDaten.gibKurseDieFreiSindAnzahl() === 0) {
  23. return;
  24. }
  25. let timeStart = System_1.System.currentTimeMillis();
  26. this.dynDaten.aktionSchuelerAusAllenKursenEntfernen();
  27. this.dynDaten.aktionKurseFreieZufaelligVerteilen();
  28. this.dynDaten.aktionZustandSpeichernK();
  29. let countKeineVerbesserung = 0;
  30. while (System_1.System.currentTimeMillis() - timeStart < pMaxTimeMillis) {
  31. if (this.berechneSchritt()) {
  32. countKeineVerbesserung = 0;
  33. }
  34. else {
  35. countKeineVerbesserung++;
  36. if (countKeineVerbesserung === 10000) {
  37. break;
  38. }
  39. }
  40. }
  41. }
  42. /**
  43. * Die Lage einiger Kurse wird verändert. Falls sich die Bewertung
  44. * verschlechter, wird die Veränderung rückgängig gemacht.
  45. *
  46. * @return TRUE, falls sich die Bewertung verbessert hat.
  47. */
  48. berechneSchritt() {
  49. let maxChanges = 1;
  50. while (Math.random() < 0.5) {
  51. maxChanges++;
  52. }
  53. for (let changes = 0; changes < maxChanges; changes++) {
  54. this.dynDaten.aktionKursFreienEinenZufaelligVerteilen();
  55. if (this.dynDaten.gibBewertungJetztBesserAlsK() > 0) {
  56. this.dynDaten.aktionZustandSpeichernK();
  57. return true;
  58. }
  59. }
  60. this.dynDaten.aktionZustandLadenK();
  61. return false;
  62. }
  63. isTranspiledInstanceOf(name) {
  64. return ['de.nrw.schule.svws.core.kursblockung.KursblockungAlgorithmusKFachwahlmatrix', 'de.nrw.schule.svws.core.kursblockung.KursblockungAlgorithmusK'].includes(name);
  65. }
  66. }
  67. exports.KursblockungAlgorithmusKFachwahlmatrix = KursblockungAlgorithmusKFachwahlmatrix;
  68. function cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKFachwahlmatrix(obj) {
  69. return obj;
  70. }
  71. exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKFachwahlmatrix = cast_de_nrw_schule_svws_core_kursblockung_KursblockungAlgorithmusKFachwahlmatrix;
  72. //# sourceMappingURL=KursblockungAlgorithmusKFachwahlmatrix.js.map