Windows-Programm zur automatischen Erstellung von Schulstundenplänen mit dem Google-OR-Tools-Solver (CP-SAT).
Stundenplan liest alle Unterrichts- und Lehrerstammdaten aus einer einzigen Excel-Datei (.xlsx), berechnet mit Hilfe des Google-OR-Tools-Solvers optimale Stundenpläne unter Berücksichtigung diverser Constraints (Lehrer-/Klassenkonflikte, Zeitwünsche, Doppelstunden, Fachraum-Limits, Tauschgruppen, A-/B-Wochen u. v. m.) und schreibt die Ergebnisse direkt in dieselbe Excel-Datei zurück.
Die Unterrichts- und Lehrerstammdaten können z. B. aus einer Untis-Datei per Copy & Paste übertragen werden.
Besonderer Vorteil für Sek-II-Pläne: Über ein Lehrertauschkennzeichen (LTKZ) lassen sich gekennzeichnete, gegenseitig austauschbare Lehrer definieren. Der Solver kann diese Lehrer bei der Planberechnung automatisch untereinander tauschen, um bessere Lösungen zu finden. Das ist gerade bei Kurssystemen der Sekundarstufe II (parallele Kurse mit mehreren gleichwertigen Fachlehrern) ein entscheidender Vorteil, da hier die Zuordnung Lehrer↔Kurs oft flexibel ist und so deutlich bessere bzw. überhaupt erst zulässige Pläne entstehen.
- Vollautomatische Planerstellung unter Berücksichtigung von Lehrer- und Klassenkonflikten
- Zeitwünsche und Sperrzeiten für Lehrer und Klassen
- Doppelstunden-Vorgaben, Fachraum-Limits, Tauschgruppen (LTKZ) – besonders wertvoll für Sek-II-Pläne, A-/B-Wochen
- Separate Tabelle für zusätzliche freie Lehrertage
- Iterative Verbesserung bestehender Pläne
- Export von Lehrer- und Klassenplänen als Excel-Sheets
- Constraint-Prüfung mit farbcodiertem Verletzungs-Report
- Automatische Sequenzdiagnose bei Infeasibility (identifiziert den schuldigen Constraint-Block)
- Manueller Plan-Editor mit Drag & Drop, Tauschvorschlägen und Verschiebung-mit-Ausweich
Eine ausführliche Bedienungsanleitung befindet sich in Stundenplan_V70_Anleitung.docx.
- .NET 10 / WPF (
net10.0-windows,UseWPF=true) - Google.OrTools – CP-SAT-Solver für die Optimierung
- ClosedXML – Lesen/Schreiben der
.xlsx-Eingabedatei
├── App.xaml / App_xaml.cs Anwendungseinstieg
├── MainWindow.xaml / MainWindow_xaml.cs Hauptfenster (Buttons, Log, Workflow-Steuerung)
│
├── Eingabe & Datenmodell
│ ├── ExcelLoader.cs Einlesen der xlsx (UV, Lös, PM, StD, FT, FGR, Fix UNrn, Plan)
│ ├── StundenplanInput.cs Eingabedaten-Container (Blöcke, Slots, Parameter)
│ ├── StundenplanModel.cs Domänenmodell (UnterrichtsBlock, Teile, …)
│ ├── LehrerStammdaten.cs Individuelle Lehrer-Einstellungen (Sheet StD)
│ └── ZeitSlot.cs Zeitraster (Tag/Stunde)
│
├── Solver & Constraints
│ ├── StundenplanEngine.cs Kernlogik: Modellaufbau, Lösungssuche, Sequenzdiagnose
│ ├── OrToolsSolver.cs CP-SAT-Solver-Wrapper
│ ├── StundenplanService.cs Orchestrierung Engine ↔ UI
│ ├── ObjectiveBuilder.cs Aufbau der Zielfunktion (Solver-Ziel)
│ ├── PlanBewertung.cs Berechnung der angezeigten Qualität (Rank-Kennzahl)
│ ├── TimeConstraint.cs Zeitwunsch-/Sperrzeiten-Constraints
│ ├── RoomConstraint.cs Fachraum-Constraints
│ ├── ClassConstraint.cs Klassenkonflikt-Constraints
│ └── FreeDayConstraint.cs Freie-Tage-Constraints
│
├── Verbesserung & Validierung
│ ├── PlanVerbesserung.cs Iterative Verbesserung bestehender Pläne
│ ├── PlanValidator.cs Constraint-Prüfung / Verletzungs-Report
│ ├── LehrerDiagnose.cs Lehrer-Diagnose-Übersicht
│ ├── SolutionCollector.cs Sammlung/Ranking berechneter Lösungen
│ └── SolverFortschritt.cs Fortschrittsanzeige während des Solver-Laufs
│
├── Export & Generatoren
│ ├── KlassenplanGenerator.cs Klassenpläne erzeugen
│ ├── LehrerplanGenerator.cs Lehrerpläne erzeugen
│ ├── UnrPlanExporter.cs Export des manuellen Unterrichtsplans
│ ├── ZeitwunschExporter.cs Erzeugt ZeitWL/ZeitWK aus Textdatei
│ └── AbweichungsExporter.cs Export von Plan-Abweichungen
│
├── Dialoge (XAML + Code-Behind)
│ ├── KlasseFixierenDialog(.xaml/.cs) Gezieltes Fixieren nach Klasse/Fach
│ ├── FixierenDialog(.xaml/.cs) Allgemeines Fixieren von Zeitslots
│ ├── PlanEditorDialog(.xaml/.cs) Manueller Plan-Editor (Drag & Drop)
│ ├── MinimalAenderungDialog(.xaml/.cs) Minimal-Änderungs-Suche
│ ├── VerbesserungsDialog(.xaml/.cs) Automatische Plan-Verbesserung
│ ├── IgnoreDialog(.xaml/.cs) Ignorieren einzelner Unterrichtseinheiten
│ ├── DiagFilterDialog(.xaml/.cs) Filter für die Diagnose-Ansicht
│ └── DiagAnzeigeWindow.cs Anzeige der Diagnose-Ergebnisse
│
├── SucheStatusFenster.cs Statusfenster während der Solver-Suche
│
├── Stundenplan_V4.csproj Projektdatei (.NET 10, WPF)
├── AssemblyInfo.cs Assembly-Metadaten
├── Stundenplan_V70_Anleitung.docx Ausführliches Benutzerhandbuch
└── Teststdplan_ohne_Makros.xlsx Beispiel-/Test-Eingabedatei
Die gesamte Konfiguration erfolgt in einer einzigen .xlsx-Datei mit u. a. folgenden Tabellenblättern:
| Kurzname | Inhalt |
|---|---|
| UV | Zentrale Unterrichts- und Lehrerzuordnung (Pflicht) |
| Lös | Zeitraster und berechnete Lösungsspalten (Pflicht) |
| PM | Steuerungsparameter für den Solver (Pflicht) |
| StD | Individuelle Lehrer-Einstellungen (optional) |
| ZWL / ZWK | Zeitwünsche für Lehrer / Klassen |
| FT | Freie Tage der Lehrer |
| FGR | Fachraum-Limits nach Fachgruppe |
| Fix UNrn | Fixierte Zeitslots |
| Plan | Manueller Ausgangsplan |
| Rank | Ranking aller berechneten Lösungen (Ausgabe) |
| Verl | Constraint-Verletzungs-Report (Ausgabe) |
| Diag | Lehrer-Diagnose-Übersicht (Ausgabe) |
Details zu allen Spalten und Parametern: siehe Stundenplan_V70_Anleitung.docx.
- Excel-Datei vorbereiten (UV, Lös, PM, ggf. StD, FT).
- Programm starten, Excel-Datei laden.
- Optional: Zeitwünsche als
.txteinlesen. - Solver starten (Zeitlimit/Lösungsanzahl vorher in PM einstellen).
- Beste Lösung im Sheet
Rankidentifizieren. - Klassen- und Lehrerpläne erzeugen und prüfen.
- Bei Bedarf gute Bereiche fixieren und Solver erneut starten.
- Constraint-Prüfung durchführen.
- Verbleibende Schwachstellen automatisch verbessern oder im Plan-Editor manuell bearbeiten.
Voraussetzungen: .NET 10 SDK (Windows, da WPF).
dotnet restore
dotnet build
dotnet run --project Stundenplan_V4.csprojerst auf Aufforderung zum coden warten – es werden aktuell keine Code-Änderungen vorgenommen; diese README dient als Ausgangsbasis/Referenz für kommende Aufgaben.