Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 35 additions & 24 deletions Doku/ANLEITUNG.md

Large diffs are not rendered by default.

44 changes: 43 additions & 1 deletion Doku/MIGRATIONSPLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,36 @@ Die **TT-Spielplan Engine** (Stephan Rüb, v1.1.2) ist ein neues, unabhängiges

**Merkposten:**
1. **Oberflächenkonzepte** (Kandidaten für Phase 4/5): Top-5-Pläne mit „ab hier optimieren“; Planqualität als Zahl der Verstöße je Kriterium (live, Ziel 0; passt zu E14); Diagramme (Heim-/Auswärts-Rhythmus je Mannschaft, Spiel- und Pausenrhythmus, Auslastung je Kalenderwoche); Gewichtungs-Voreinstellungen; Konfliktliste; Terminwünsche mit Erfüllungsstatus; Kalender mit Verschieben per Klick; Verlauf früherer Läufe; Batch-Modus für mehrere Staffeln; Importe (Rahmenterminplan-PDF, Vereinsbemerkungen-PDF, Setzliste aus TTR-CSV); Plausibilitätsprüfung der Daten vor dem Start; geführte Einführung (Tour).
2. **Andere Optimierungsverfahren prüfen**, insbesondere **Google OR-Tools CP-SAT** (Apache-2.0, GPL-v3-kompatibel; .NET-Paket `Google.OrTools`, nativ ca. 35 MB): z. B. als Startlösung oder für Teilprobleme (Paarungen/Heimrecht, Pflichtspielwoche) in Kombination mit der bestehenden lokalen Suche. Maßstab bleibt das Kostenmodell des Originals (`andigen bewerten`).
2. **Andere Optimierungsverfahren prüfen**, insbesondere **Google OR-Tools CP-SAT** (Apache-2.0, GPL-v3-kompatibel; .NET-Paket `Google.OrTools`, nativ ca. 35 MB): z. B. als Startlösung oder für Teilprobleme (Paarungen/Heimrecht, Pflichtspielwoche) in Kombination mit der bestehenden lokalen Suche. Maßstab bleibt das Kostenmodell des Originals (`andigen bewerten`). Ausgearbeitet in **Abschnitt 11** (O7).

## 11. Verbesserungen der Optimierung: Automodus (Stand 05.10.2026)

**Ausgangspunkt:** Jeder Suchplatz arbeitet wie im Original: besten Stand zurücksetzen, verändern (Neu würfeln, Termine füllen), bewerten und nur bei echter Verbesserung übernehmen. Vielfalt entsteht durch Inseln, Strategiemix, Neustarts und die Spezial-Insel. Gesucht war ein Verfahren, das einem Staffelleiter in 5, höchstens 10 Minuten einen besseren Plan liefert. Grundsatz: Erweiterungen ändern das Standardverhalten nicht; die Funktionsgleichheit mit dem Original (E7/E9) bleibt.

**Versuche (02.–04.10.2026, verworfen und vor dem Zusammenführen wieder entfernt):** Gemessen wurde mit einem eigenen Vergleichsbefehl der Kommandozeile auf vier Referenzstaffeln (mehrere Läufe à 20–180 s, einzelne Langläufe à 10 min) gegen das Original. Die Streuung zwischen Läufen derselben Variante ist groß; Unterschiede unter etwa 10 % sind nicht belastbar.

| Ansatz | Ergebnis |
|---|---|
| Annahmeregeln: gleich gute Stände (O1), Late Acceptance, Record-to-Record (O2) | keine Verbesserung, die wandernden Regeln deutlich schlechter |
| Neue Eingriffe: teure Mannschaften, Zeiträume, Heimtermine tauschen (O3/O4) | nach 20 s teils 5–10 % besser, im Langlauf nicht |
| Adaptive Strategiewahl und Kreuzung zweier Inseln (O5/O6) | im Rauschen |
| Gelenktes Füllen (zuerst Termine ohne Sperr-/Ausweichtermin) | nichts Messbares |
| Leitinseln nach Rangfolge, gezielte Reparatur teurer Begegnungen | etwas weniger A-Verstöße, aber langsamer und nicht billiger |
| Iterierte lokale Suche und Simulated Annealing mit Zeitbudget | nach 3 min 20–30 % billiger, aber teils mehr A-Verstöße |
| Gerüstbauer (Rundenturnier mit Zeitfenstern als Ausgangsplan) | leichte Verbesserung, kein Durchbruch |

Befund: Billigere Pläne nach der Kostenfunktion des Originals sind nicht automatisch bessere Pläne – die Standardgewichtung stellt z. B. viele parallele Spiele nicht über einige C-Kosten. Nicht weiterverfolgt: OR-Tools CP-SAT (O7) und automatische Parametersuche (O8).

**Automodus – Lenkung über die Gewichte** (Vorschlag Peter, Rest von E14; `Optimierungseinstellungen.Automodus`, `Automodus`): Der Automodus macht, was ein Staffelleiter von Hand tut – er ändert während der Rechnung Gewichte, bis die wichtigen Kriterien eingehalten sind. Ziel ist nicht der billigste Plan für eine feste Kostenfunktion, sondern möglichst wenige Verstöße in der Rangfolge, die der Staffelleiter festlegt.
- **Einteilung:** Der Staffelleiter teilt die Kriterien (16 Mannschafts-Kostenarten, vereinsinterne Spiele am Anfang, Länge und Überlappung der Spieltage) in die Stufen A, B und C ein und ordnet sie (`Stufeneinteilung`, in der Qualitätsansicht; gespeichert als Attribut `kriterienstufen` am Knoten `plan`, das der alte AndiGenerator übernimmt, ohne es zu beachten). Kriterien ohne Anzahl gehören immer zu C. Standard: A = Hallenbelegung, parallele Spiele, Pflichtspieltage, vereinsinterne Spiele; B = Auswärts-/Heimkoppel, Sperr-, Ausweichtermine; C = die übrigen.
- **Bewertung nach Stufen** (`Stufenwert`, immer mit den Gewichtungen des Anwenders): harte Fehler, A-, B-Verstöße, C-Ausreißer (Mannschaften mit mehr als zwei Verstößen mehr als in der Basis je C-Kriterium), C-Verstöße, C-Kosten.
- **Basisoptimierung:** wie das Original, bis die Suche 10 s keine Verbesserung findet (mindestens 10 s); ihr bester Plan ist der Maßstab. Entfällt beim Wechsel von der Kostenoptimierung in den Automodus.
- **Optimierung Stufe A, dann B:** die Gewichte der Mannschaften und Kriterien mit Verstößen der Stufe eine Stufe höher, bis nichts mehr anzuheben ist oder dreimal kein Fortschritt kommt; die A-Gewichte bleiben stehen.
- **Optimierung Stufe C:** in der Reihenfolge der C-Kriterien zuerst die Ausreißer, sonst die Mannschaften mit den meisten Verstößen anheben; steigen A oder B (B um mehr als 1), wird zurückgezogen, beim besten Plan neu begonnen und das nächste Kriterium genommen. Sind alle C-Kriterien durch, wieder A und B.
- **Ohne Zeitgrenzen:** Nächster Schritt, wenn sich die Verstöße der Suche 10 s nicht verbessert haben, frühestens 8 s nach der letzten Änderung (reine Rechenzeit ohne Pausen).
- **Änderung der Einteilung während des Laufs:** keine neue Basisoptimierung; sofort weiter beim wichtigsten geänderten Kriterium – in A/B zuerst nur dieses Kriterium, dann die ganze Stufe; in C ab diesem Kriterium.
- **Ergebnis:** der beste Plan nach Stufen, die angepassten Gewichtungen und die Liste der Änderungen (`Inseloptimierer.Lenkung`). Spezial-Insel im Automodus aus.
- *Beispiel (Verbandsoberliga, 3 min):* A 18 → 3, B 13 → 4 bei etwa gleich vielen C-Verstößen; Peter: „arbeitet sehr gut“.

## Änderungsprotokoll
| Datum | Änderung |
Expand Down Expand Up @@ -685,3 +714,16 @@ Die **TT-Spielplan Engine** (Stephan Rüb, v1.1.2) ist ein neues, unabhängiges
| 01.10.2026 | Oberflächentests als eigenes Testprojekt `AndiGenerator.UI.Tests` mit Avalonia.Headless (MIT, nur für Tests): echte Anwendung mit Stilen und Skia-Zeichnung ohne Bildschirm; Rauchtest des Hauptfensters (Staffel öffnen, Einrichtung, alle Ansichten mit dem click-TT-Plan zeigen und zeichnen), der einfachen Dialoge und aller Seiten von „Spielplandaten bearbeiten“; Regressionstest Doppelklick auf einen Wunschtermin; Avalonia-Fehlermeldungen (Protokoll) lassen die Tests scheitern. `THIRD-PARTY-NOTICES.md` ohne Versionsnummern (maßgeblich sind `Directory.Packages.props` und die Workflows) |
| 01.10.2026 | Testabdeckung ohne Testprojekte: `.runsettings` im Lösungsordner misst nur die Programmschichten – Visual Studio erkennt die Datei selbst, `abdeckung.cmd` und CI geben sie mit `--settings` an |
| 01.10.2026 | Schnellerer Testlauf: die Geschwindigkeitsmessungen (`Messungen`, rund 20 s, laufen allein und halten alle anderen Tests auf) tragen die Kategorie `Messung` und laufen nicht mehr in `bauen.cmd`, `abdeckung.cmd`, CI und Release, sondern mit dem neuen `messen.cmd`; der Test der Spezial-Insel rechnet in Schritten von 10 000 Durchläufen nur noch so lange, bis die Spezial-Insel eine Insel neu gestartet hat (vorher fest 200 000, rund 14 s) |
| 02.–04.10.2026 | Abschnitt 11: Versuche zur Optimierung (Annahmeregeln, neue Eingriffe, adaptive Strategiewahl, Kreuzung, gelenktes Füllen, Leitinseln/Reparatur, ILS/SA, Gerüstbauer) mit eigenem Vergleichsbefehl gemessen – verworfen und vor dem Zusammenführen entfernt; Ergebnisse zusammengefasst in Abschnitt 11 |
| 04.10.2026 | Abschnitt 11: Automodus – Lenkung über die Gewichte je Mannschaft und Kriterium nach der Basisoptimierung, Bewertung nach Stufen A/B/C (`Automodus`, `Stufenwert`, `Stufeneinteilung`) |
| 04.10.2026 | Einrichtungsseite: nur noch „Abschließen“; „Abschließen und generieren“ entfernt (Vorgabe Peter) – gestartet wird im Hauptfenster, wo Ausgangsplan und Verfahren gewählt werden |
| 04.10.2026 | Verfahren am Startknopf statt eigener Auswahl (Vorgabe Peter: Kopfleiste überladen, Staffelname abgeschnitten): Pfeil rechts am Startknopf mit „Kostenoptimierung“ / „Automodus“ – vor dem Start starten, während der Generierung (auch pausiert) zum anderen Verfahren wechseln, ab dem besten Plan |
| 04.10.2026 | Eine Kachel für den Stand der Optimierung (Vorgabe Peter): oben Verfahren (Kostenoptimierung bzw. Automodus mit Phase), in der Mitte Gesamtkosten bzw. Verstöße A, B, C (`Stufeneinteilung.Zaehlen` aus der Bewertung des besten Plans), unten die Veränderung seit dem ersten gültigen Plan; zusätzliche Automodus-Kachel und Verlauf-Tooltip entfernt |
| 04.10.2026 | Automodus in der Oberfläche: Phasen heißen „Basisoptimierung“ (Grundlauf), „Optimierung Stufe A“, „Optimierung Stufe B“ und „Optimierung Stufe C“ (Glätten, ohne Kriterium); Drängen jetzt **nacheinander** (Entscheidung Peter): erst nur A-Gewichte, bis bei A nichts mehr geht (spätestens 35 % des Budgets), dann nur B-Gewichte bei stehenden A-Gewichten (spätestens 60 %), dann C; vorher wurden A und B gleichzeitig angehoben, und „Stufe B“ war kaum je zu sehen |
| 04.10.2026 | Automodus ohne Zeitgrenzen (Vorgabe Peter: er reagiert nicht auf Zeitpunkte, sondern beobachtet, ob Gewichtsänderungen die Verstöße ändern): Grundlauf endet, wenn die Basisoptimierung 5 s keine Verbesserung findet (mindestens 10 s, keine Obergrenze); nächster Schritt erst, wenn sich die Verstöße im Plan der Suche (harte Fehler, A, B, C-Ausreißer, C-Anzahl) 5 s nicht mehr verbessert haben (mindestens 3 s nach der letzten Änderung); Höchstabstand und Budget-Grenzen der Stufen (35 %, 60 %) entfallen. Vergleichsläufe behalten ihre Dauer |
| 04.10.2026 | Automodus: den Änderungen mehr Zeit geben (Vorgabe Peter) – Beobachtungsfenster 10 s statt 5 s ohne Verbesserung der Verstöße (bzw. der Kosten in der Basisoptimierung), frühestens 8 s statt 3 s nach der letzten Gewichtsänderung |
| 04.10.2026 | Automodus in der Oberfläche (Vorgabe Peter): Ergebniskachel mit „Automodus · …“ in der Überschrift, Klick öffnet die Qualitätsansicht; Kachel „Pflichtregeln (Stufe A)“ im Automodus ausgeblendet (drei Kacheln) |
| 04.10.2026 | Qualitätsansicht (Vorgabe Peter): Einteilung der Kriterien durch den Staffelleiter – Stufe A/B/C je Zeile wählen, Reihenfolge innerhalb der Stufe mit Pfeilen; Nummerierung A2 …, B1 …, C1 … nach der Reihenfolge, A1 (harte Fehler) fest, Spieltagslänge/-überlappung nur C. Gespeichert als Attribut `kriterienstufen` am Knoten `plan` der `.modifications` bzw. Plandatei – das Original übernimmt unbekannte Attribute beim Merge und schreibt sie beim Speichern wieder, beachtet sie aber nicht (unbekannte *Knoten* würden dort eine Ausnahme auslösen). Automodus, Kacheln und Qualitätsansicht verwenden diese Einteilung; keine festen Einstufungen mehr im Code (`Planqualitaet`), der Standard (E14 mit Koppeln in B) gilt nur, solange nichts gewählt ist. Kostenspalte nur bei der Kostenoptimierung; Ansicht schmaler |
| 04.10.2026 | Qualitätsansicht: Einteilung nur im Automodus änderbar (Vorgabe Peter); A/B/C als Schaltergruppe und Pfeile als größere Knöpfe; Ziehen und Ablegen am Griff mit Vorschau (die gezogene Zeile bleibt als hervorgehobene Zeile sichtbar, die Tabelle zeigt Stufe und Nummer nach dem Ablegen; obere Zeilenhälfte = davor, untere = dahinter; Esc bricht ab; `Stufeneinteilung.Platzieren`) |
| 04.10.2026 | Qualitätsansicht: Umstufen nach unten setzt an die erste Stelle der neuen Stufe, nach oben ans Ende (`Stufeneinteilung.Einstufen`); Pfeile am Stufenrand wechseln in die Nachbarstufe; beim Ziehen hängt die Zeile am Mauszeiger (Ebene über der Tabelle), die Tabelle zeigt an der Ablagestelle eine Lücke und nummeriert schon um |
| 04.10.2026 | Spalte Einstufung breiter und links abgesetzt; Auswahlmenü des Startknopfs gestaltet (Titel, Erklärung, Haken). Start/Wechsel zum Automodus aktiviert die Qualitäts-, zur Kostenoptimierung die Kostenansicht. Kacheln: Pflichtregeln an Position 2; im Automodus nimmt die Ergebniskachel deren Platz ein (Grid statt UniformGrid, im engen Fenster 2 × 2). Ergebniskachel im Automodus: Verstöße seit der Basisoptimierung („A 14 → 3“) und Phase mit den Kriterien, an denen gearbeitet wird (`Lenkungsstand.Kriterien`: Drängen = zuletzt angehobene, Glätten = aktuelles C-Kriterium). Geänderte Einteilung während des Automodus ohne Neustart (`Inseloptimierer.EinteilungAendern`): Basis und bester Plan neu nach Stufen bewertet, weiter beim wichtigsten geänderten Kriterium (Drängen A/B bzw. Glätten ab dem C-Kriterium), sofern der Automodus nicht noch davor steht. Danach sofort (ohne Warten auf Stillstand) und in A/B zuerst nur das wichtigste geänderte Kriterium (Fokus), bis dort nichts mehr geht, dann die ganze Stufe. Kriterien in der Ergebniskachel unten als „In Arbeit: …“, alle mit Namen (oben war zu wenig Platz). Wechsel Kostenoptimierung → Automodus ohne Basisoptimierung (`Optimierungseinstellungen.AutoOhneGrundlauf`): bester Plan sofort Basis, erste Gewichtsänderung der Stufe A ohne Warten. „Start mit“: gewählter vorhandener Plan wird vor dem Start in allen (auch später geöffneten) Ansichten und den Kacheln gezeigt (`Generierungsanzeige.PlanZeigen`). Löschen gemerkter Pläne aus den Ansichten entfernt; stattdessen „Plan löschen“ oben an der Stelle von „Plan merken“, wenn vor dem Start ein gemerkter Plan gewählt ist. „Nach Excel“ aus den Ansichten in die linke Leiste (Ausgabe) mit Planmenü (`Exportziel`); Abschnitte der linken Leiste klappbar (in der schmalen Leiste immer offen). „Für click-TT exportieren“ ebenfalls mit Planmenü: auch gemerkte Pläne und der click-TT-Plan lassen sich als CSV exportieren. Excel-Export ausgebaut (Entscheidung Peter: zu ähnlich zum click-TT-Export): `Persistence.Tabellen` (Xlsx), `Tabellenexport`, Menü und Tests entfernt; „Für click-TT exportieren“ in der Leiste farblich hervorgehoben. Der Export nimmt ohne Menü den angezeigten Plan (aktive Ansicht, sonst Generierung bzw. Ausgangsplan) und ist ohne Plan deaktiviert und nicht hervorgehoben. Untere Zeile der Ergebniskachel im Automodus: statt „… seit dem ersten gültigen Plan“ (zweiter, widersprüchlicher Bezug) nur noch Zustandshinweise (angehalten, harte Fehler). Einrichtung: Punkt „Gespeicherte Kriterienreihenfolge“ (nur bei eigener Einteilung) mit Wahl „verwenden“ / „Standardreihenfolge nur für diese Sitzung“ (`Plansitzung.StandardKriterienstufenFuerDieseSitzung`, analog zu den gespeicherten Einstellungen). Einrichtung: Wahlkacheln fest unten bei den Knöpfen; „Abschließen“ übernimmt angeklickte, noch offene Entscheidungen (`Einrichtungsschritt.IstGewaehlt`). Qualitätsansicht: Klick auf eine Zeile zeigt rechts die Verstöße je Mannschaft (`Referenzbewertung.MeldungenJeMannschaft`, A1: harte Fehler); ohne Verstöße bleibt die Liste zu |
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ AndiGenerator.NET ist die C#/.NET-Portierung des **AndiGenerators** von **Andrea
- Einrichtung nach dem Öffnen: alle Rückfragen (Spiellokale, Koppeltermine, Setzliste, Pflichtspieltage …) auf einer Seite
- Generierung auf allen Kernen, laufend übernommene Gewichtungen, Pläne merken und vergleichen
- Ansichten: Kostenmatrix, Qualität (Pflichtregeln), Meldungen, Terminplan, Diagramme, Terminwünsche, Nachbarmannschaften
- Ausgabe: CSV für click-TT, Excel-Arbeitsmappe, Ausdruck als PDF
- Ausgabe: CSV für click-TT, Ausdruck als PDF
- Vor- und Rückrunde, Halbrunde, Doppelrunde, einzelne Runden

## Anleitung
Expand Down Expand Up @@ -48,7 +48,7 @@ Unter Windows erledigen `bauen.cmd` (bauen und testen) und `starten.cmd` dasselb
|---|---|
| `AndiGenerator.Domain` | Fachmodell: Staffel, Mannschaften, Termine, Optionen |
| `AndiGenerator.Engine` | Bewertung (Kostenfunktion) und Optimierung: Referenzmodell, schnelle Engine, Inselmodell |
| `AndiGenerator.Persistence` | click-TT-Import, `.modifications`, Optionen, gemerkte Pläne, CSV und Excel |
| `AndiGenerator.Persistence` | click-TT-Import, `.modifications`, Optionen, gemerkte Pläne, CSV |
| `AndiGenerator.Application` | Ablauf einer Sitzung, Optimierungsdienst, Datenbearbeitung |
| `AndiGenerator.Rendering` | Diagramme, Terminwunschraster und Ausdruck – für Bildschirm und PDF |
| `AndiGenerator.Presentation` | ViewModels (MVVM, ohne Oberflächenbibliothek) |
Expand Down
Loading
Loading