Kurs42 To CNF:Hauptseite

Aus Schild-NRW Wiki
Zur Navigation springen Zur Suche springen

Hinweise

Kurs42_To_CNF wurde in JAVA von Benjamin Bartsch programmiert. Die Software ist "open source" und unterliegt der MIT oder der CC0 Lizenz, d.h. der Quellcode steht allen frei zur Verfügung, aber es dürfen keinerlei Ansprüche geltend gemacht werden. Wenn Sie den Autor kontaktieren möchten, finden Sie die E-Mail-Adresse innerhalb des Programms.

Das Programm arbeitet auf Basis der Daten des Programms Kurs42. Wenn Sie eine Import/Exportfunktion zu anderen Programmen wünschen, können Sie den Autor kontaktieren.

Das Programm unterstützt eine Vielzahl von Nebenbedingungen (Regeln genannt). Wenn Sie für Ihre Schule zusätzliche Regeln benötigen, können Sie ebenfalls den Autor kontaktieren.


Vorbereitungen

  • Laden Sie sich den folgenden SAT-Solver (https://github.com/msoos/cryptominisat/releases) herunter und speichern Sie die Datei (für Windows: cryptominisat5-win-amd64-nogauss.exe) auf Ihrem PC und merken Sie sich den Pfad.
  • Installieren Sie ggf. JAVA und laden sich sich dann die aktuellste Version von Kurs42_To_CNF herunter (https://schulverwaltungsinfos.nrw.de/svws/forum/viewtopic.php?f=71&t=20&start=180).
  • Sie haben nun das Programm in Form einer JAR-Datei, welche man mit einem Doppelklick starten kann. Dort müssen Sie dort zunächst den Pfad zu cryptominisat...exe angeben und können dann arbeiten, aber zuvor müssen Sie jedoch noch aus Kurs42 Ihre Daten exportieren.


Daten in Kurs42 vorbereiten und exportieren

  • Die Laufbahnen sollten wie üblich bereits vor dem Blocken gründlich geprüft werden.
  • In Kurs42 werden unter Bearbeiten --> Kurse einrichten bzw. Bearbeiten --> Kurse einrichten (ohne Fachwahl) die Anzahl der Kurse pro Fach festgelegt.
  • Unter Extras --> Einstellungen wird bei Import-Export bei Kodierung von Textexporten auf den Eintrag UTF8 gestellt.
  • Unter Import/Export --> Export in Textdatei werden sämtliche Häkchen gesetzt und ein Zielordner gewählt.
  • In Kurs42_To_CNF unter Datei --> Kurs42-Ordner öffnen den soeben mit dem Export befüllten Ordner auswählen.
  • Die Abfrage Sollen alle Schüler/Kurse aus KURS42 fixiert werden? kann zunächst verneint werden (diese Abfrage wird an anderer Stelle erklärt, wenn es um das Blocken der Zusatzkurse in der Q2 oder das Neuladen eines Blockungsegebnisses geht).
  • Das Fenster Debug ganz unten sollte leer sein.
  • Das Fenster Statistik gibt Importinformationen an, z.B. wie viele Schüler importiert und wie viele Fächer gewählt wurden.

Blocken mit Kurs42_To_CNF

Das Fenster Maximalwerte enthält allgemeine Voreinstellungen zur Blockung. Erfahrungsgemäß bietet sich das Vorhegen an, zunächst die Umwähler auf 0 zu setzen, dafür aber die Maximale Kursgrößendifferenz auf einen sehr hohen Wert, z.B. 30 zu setzen. Die Maximale Kursgröße sollte dem an der Schule üblichen Wert entsprechen. Die Anzahl der Schienen muss mindestens so groß sein, wie die Anzahl der Kurse des Schülers mit den meisten Kursen.

Im Fenster Regeln werden die Regeln definiert, an die sich das Programm zwingend halten soll. Sollen z.B. alle Religions- und Philosophie-Kurse unbeding parallel liegen, und zwar in Schiene 3, wählt man in den vier Drop-Down-Menüs Folgendes aus:

  1. Fach-Art
  2. Rel,GK
  3. in Schiene
  4. 3

Es erscheint im Regelfenster Fach-Art#REL;GK#in Schiene#3. Auch durch andere Regelkombinationen kann dieses Ergebnis erzwungen werden, hier gilt es, auszuprobieren und Erfahrungen zu sammeln. Die Anzahl der Threads kann zunächst auf 1 stehen (mehr dazu unter Technische Fragen, siehe unten), das Ausgabeformat ist üblicherweise Neu+BOM

Berechnen Ein Klick auf den Button Berechne! führt eine Berechnung gemäß der Maximalwerte und Regeln durch. Das Ergebnis wird in einem Tab, z.B. B1_SAT in sechs Fenstern dargestellt, die sich von selbst erklären. Wenn es mathematisch kein Ergebnis geben kann, erscheint UNSAT als Name des Tabs. Hier könnte es sein, dass es keine Lösung gibt, in der es keine Umwähler gibt. Dann stellt erhöht man die Zahl der Umwähler solange, bis ein Egebnis möglich ist. So lässt sich die Mindestzahl an Umwähler ermitteln. Dieses Ergebnis enhält allerdings noch eine viel zu große Kursgrößendifferenz, die sich im nächsten Schritt optimieren lässt. Siehe dazu unten Strategien und Tipps.

Daten in Kurs42 importieren

Nach einer erfolgreichen Berechnung einer Blockungung legt das Programm im oben angelegten Ordner für den Export aus Kurs einen Unterordner an, dessen Name dem TAB B1_SAT entspricht und zusätzlich das Ausgabeformat enthält, hier also B_00001_NEU_UTF8_BOM. In disem Ordner gibt es auch eine Textdatei, die das Ergebnis der Berechnung und die angewendeten Regeln dokumentiert, sodass man das Vorgehen rekonstruieren kann. In Kurs42 gibt es zwei Möglichkeiten, diese Blockung zu importieren:

  1. Unter Import/Export --> Import der SAT-Solver-Ergebnisse alle Häkchen setzen und den Ordner B_00001_NEU_UTF8_BOM auswählen. Die Blockung ist importiert und kann z.B. unter Blocken --> Automatisch Blocken eingesehen und bearbeitet werden.
  2. Unter Datei --> Neue Blockung aus Textdatei wird der o.g. Ordner gewählt, alle Häkchen gesetzt und importiert.

Das zweite Vorgehen hat den Vorteil, dass man nicht versehentlich eine bestehende Blockung überschreibt und so die frisch importierte Blockung unter einem eigenen Namen speichern kann.

Jahrgänge Blocken

Die hier vorgestellten Regeln sind nur Beispiele einer Schule mit ihren jeweiligen schulspezifischen Anforderungen und können niemals 1:1 übernommen werden. Sie sollen Anregungen schaffen, wie man für seine Schule ein gutes Ergebnis erzielen kann.

Blockung der neuen EF mit Stamm-/Kerngruppen

In einem ersten Beispiel wird davon ausgegangen, dass die Schule in der EF quasi vierzügig ist und die Fächer Englisch, Mathe, Deutsch und Sport jeweils in der gleichen Zusammensetzung stattfinden sollen. Dazu werden folgende Regeln angewendet:

  • Kurs#D-GK1#in Schiene#1
  • Kurs#M-GK2#in Schiene#1
  • Kurs#E5-GK3#in Schiene#1
  • Kurs#SP-GK4#in Schiene#1
  • Kurs#D-GK2#in Schiene#2
  • Kurs#M-GK3#in Schiene#2
  • Kurs#E5-GK4#in Schiene#2
  • Kurs#SP-GK1#in Schiene#2
  • Kurs#D-GK3#in Schiene#3
  • Kurs#M-GK4#in Schiene#3
  • Kurs#E5-GK1#in Schiene#3
  • Kurs#SP-GK2#in Schiene#3
  • Kurs#D-GK4#in Schiene#4
  • Kurs#M-GK1#in Schiene#4
  • Kurs#E5-GK2#in Schiene#4
  • Kurs#SP-GK3#in Schiene#4


In einem zweiten Beispiel werden nur die Fächer D, E und M in Kerngruppen geblockt, die Verteilung im Stundenplanprogramm erfolgt erst später. Hierbei ist die Zügigkeit egal, da alle Kurse eines Faches in der Gleichen Schiene landen.

  • Fach-Art#D;GK#allein in Schiene (SuS optimal)#1
  • Fach-Art#E;GK#allein in Schiene (SuS optimal)#2
  • Fach-Art#M;GK#allein in Schiene (SuS optimal)#3

Der Zusatz SuS optimal führt dazu, dass in allen Kursen eine möglichst gleiche Anzahl SuS sitzen.


Des Weiteren sollen alle Philosophie- und Religionskurse für mögliche Kurswechsler parallel liegen:

  • Fach-Art#PL;GK#in Schiene (SuS optimal)#5
  • Fach-Art#REL;GK#in Schiene (SuS optimal)#5


Eine Alternative hierzu wäre dieses Vorgehen:

  • Kurs#REL-GK1#in Schiene#6
  • Kurs#PL-GK1#in Schiene#6
  • Kurs#REL-GK2#in Schiene#6
  • Kurs#PL-GK2#in Schiene#5
  • Kurs#REL-GK3#in Schiene#5

Dies führt dazu, dass in z.B. Schiene 5 auch ein anderer Kurs zusätzlich liegen kann. So gibt es mehr Spielraum und eine bessere Kursgrößendifferenz oder weniger Umwähler.


Der Mathe-Vertiefungskurs soll außerhalb der regulären Blockung liegen. Die vorliegende Schule bietet in der EF zwölf Kurse und zusätzlich einen Mathe-Vertiefungskurs als 13. Fach an.

  • Fach-Art#VM;VTF#allein in Schiene#13


Manchmal bietet es sich auch an, die neueinsetzenden Fremdsprachen parallel zu setzen:

  • Kurs#I0-GK1#unbedingt zusammen mit#S0-GK1


Blockung der neuen Q1

Blockung der Q2 (Zusatzkurse)

Strategien und weitere Tipps

Blockungsergebnis optimieren

Das oben angedeutete Vorgehen, zunächst die Umwähler auf 0 zu setzen und die Kursgrößendifferenz sehr hoch, hat den Vorteil, das man relativ schnell zu einem Ergebnis kommt. Wenn dieses Vorgehen zunächst UNSAT liefert, setzt man die Umwähler solange um 1 rauf, bis man die Mindestzahl an Umwählern ermittelt hat. Nun muss die Kursgrößendifferenz noch verringert werden.

Kursfixierungen in %

...

Schülerfixierungen in %

...

Auto-Optimierung

Sobald man eine Lösung gefunden hat (z.B. mit GK-Kursdifferenz 20). Es gibt einen Button, der automatisch (je nach Einstellung) mehrere parallele Berechnungen startet und dabei versucht, die GK-Kursdifferenz auf 19 zu verbessern. Wird eine Lösung gefunden, ist das Ziel die nächstkleinere GK-Kursdifferenz. Die Berechnung stoppt, wenn 100 verschiedene Szenarien nicht zum Erfolg führten oder eine optimale GK-Kursdifferenz gefunden wurde. Es bietet sich an, durchaus 8 Rechnungen gleichzeitg laufen zu lassen, dies hängt vom CPU (der Anzahl der Kerne) ab (siehe Technische Fragen) PS: Wenn die Auto-Berechnung abbricht, dann nur, wenn KD1 (GK-Kursdifferenz von 1) gefunden wurde oder eine Reduzierung der Differenz (beweisbar) nicht möglich ist. Es ist manchmal sehr schwer zu erkennen, warum eine weitere Reduzierung nicht möglich ist. In dem Fall würde ich empfehlen in der Liste der Kurse - die nach Kursdifferenz sortiert sind - nach der Fach-Art zu suchen, welche die höchste Kursdifferenz hat.


Vorhandene Blockungen erneut öffnen Falls in Kurs42 schon geblockt wurde und diese Blockung (teilweise) bei Kurs42_to_CNF unangestatet bleiben soll, gibt es folgende Regel:

  • Fixiere#Schiene und Teilnehmer#aller#LKs

In diesem Beispiel wurden die LKs schon geblockt und werden nun in Kurs42_to_CNF nicht angetastet.


Tipps zum Umgang mit Ordner- und Dateinamen

Im Laufe des Blockungsvorgangs können, z.B. durch den Optimierungsvorgang, sehr viele Ergebnisse und damit sehr viele Unterordner entstehen. Es bietet sich an, die nicht benötigten immer wieder zu löschen und den Ordner mit einem guten Ergebniss umzubenennen und dabei einheitlich vorzugehen, z.B.

  • 5SG_4UW_3KGD_SWnichtparallel

bedeutet, dieses Egebnis enthält 5 Stammgruppen, 4 Umwähler, eine Kursgrößendifferenz von 3 und die SoWi-Kurse liegen nicht parallel. Beim Import in Kurs könnte man diese Blockung unter gleichlautendem Namen abspeichern.

Kurzerhand unterschiedliche Kurszahlen vergleichen

Wenn es z.B. unklar ist, ob zwei oder drei Deutsch-Grundkurse eingerichtet werden können und man als Entscheidungshilfe beide Blockungsvarianten vergleichen möchte, könnte man entweder

  1. mit Kurs42 zwei Blockungen erstellen, einmal mit drei und einmal mit vier Grundkursen, diese jeweils exportieren und mit Kurs42_to_CNF blocken oder
  2. man erstellt in Kurs42 eine Blockung mit der höhere Kursanzahl (also drei), blockt diese in CNF und zum Vergleichen wendet man die Regel Kurs#D-GK3#max. SuS (ignoriert Kursdifferenzen)#0 an. So steht der dritte Deutschkurs nicht zur Verfügung.



Weitere Tipps Bitte bei der Verwendung des Programms und der Anwendung der Regeln Fixierungen vermeiden!


Beispiel 1: Sie wollen, dass alle Deutsch-Kurse in Schiene 1 sind --> fixieren Fach-Art#D;GK#allein in Schiene (SuS optimal)#1 Beispiel 2: Sie wollen, dass ER-GK1 und ER-GK2 nicht zusammen sind, da es nur eine Lehrkraft gibt --> nicht fixieren, sondern

  • Kurs#ER-GK1#niemals zusammen mit#ER-GK2

oder besser

  • Fach-Art#ER;GK#maximale Anzahl pro Schiene#1

Beispiel 3: Sie wollen alle Religionskurse in einer Schiene, aber keine anderen Kurse --> fixieren

  • Kurs#ER-GK1#in Schiene#6
  • Kurs#ER-GK2#in Schiene#6
  • Kurs#KR-GK1#in Schiene#6
  • Kurs#PL-GK1#in Schiene#6
  • Schiene#6#max. Kursanzahl#4

oder besser die zwei ER-Zeilen ersetzen durch:

  • Fach-Art#ER;GK#in Schiene (SuS optimal)#6

Beispiel 4: Sie wollen, dass bestimmte Kurse zusammen sind --> auf gar keinen Fall fixieren, sie nehmen sich potentielle Kombinationsmöglichkeiten, wenn Sie die Schiene festlegen, sondern:

  • Kurs#S0-GK1#unbedingt zusammen mit#L0-GK1
  • Kurs#S0-GK1#unbedingt zusammen mit#F0-GK1
  • Kurs#S0-GK1#unbedingt zusammen mit#S8-GK1

Beispiel 5: Sie wollen, dass bestimmte Kurse nicht zusammen sind, z.B. weil ein Lehrer ggf. den zweiten Kurs übernehmen soll --> auf gar keinen Fall fixieren, sondern:

  • Kurs#MU-GK1#niemals zusammen mit#IF-GK1

Beispiel 6: Sie wollen die LKs so setzen wie besprochen mit den KOOP-Schulen und LKs sollen getrennt werden von den GKs. --> fixieren: LKs allein von Schiene#1#bis Schiene#2

  • Kurs#M-LK1#in Schiene#1
  • Kurs#D-LK1#in Schiene#1
  • Kurs#E5-LK1#in Schiene#1
  • Schiene#1#max. Kursanzahl#3

(andere LKs dadurch automatisch in Schiene 2)

Best Practice-Beispiele

...


Technische Fragen

Was sind Threads?


Video-Tutorials

Video-Tutorial #1:

1) Vorbereitung in Kurs42 - Export der Blockung in Textdateien

2) Grundeinstellungen in Kurs42_To_CNF

3) Rechnungen durchführen

4) Re-Import der Daten in Kurs42