Strafen können durch benannte Profile festgelegt werden

This commit is contained in:
Michael Stangl
2026-07-15 17:05:13 +02:00
parent db69f3498d
commit 4a059f32c5
5 changed files with 114 additions and 53 deletions
+51 -33
View File
@@ -1,38 +1,56 @@
# Strafpunkte fuer die Trennung einer Gruppe:
# Aufbau: Anzahl der Trennungen = { Gruppengroesse:Strafpunkte, .. }
# Deutlich hoeher als frueher, damit eine Trennung teurer ist als der Gewinn,
# einen Tisch dafuer teilbelegt zu lassen (sonst werden Gruppen getrennt,
# obwohl daneben leere Tische stehen).
[Trennung]
1={ 2:-25, 3:-22, 4:-18, 6:-14, 8:-12, 10:-10 }
2={ 3:-40, 4:-30, 6:-22, 8:-18, 10:-14 }
3={ 4:-60, 6:-40, 8:-30, 10:-20 }
# Strafpunkte-Profile ("Vorgehen") fuer die Bewertung einer Sitzplatzverteilung.
#
# Jede Sektion ist EIN vollstaendiges Bewertungsprofil mit allen Angaben. So
# lassen sich mehrere Vorgehensweisen nebeneinander pflegen und speichern. Per
# Schalter --strafen <Sektionsname> waehlt man ein Profil; ohne Schalter wird
# [default] verwendet.
#
# Schluessel je Profil:
# Anzahl_Trennungen_N = { Gruppengroesse:Strafpunkte, .. }
# Strafpunkte fuer das Aufteilen einer Gruppe (N = Anzahl der Trennungen,
# also auf N+1 Tische verteilt), gestaffelt nach Gruppengroesse. Fehlt ein
# exakter Gruppengroessen-Eintrag, wird auf die naechstkleinere Groesse
# zurueckgegriffen. Mindestens Anzahl_Trennungen_1 sollte gesetzt sein.
# NichtNachbar = Strafe, wenn zwei Gruppenteile nicht am Nachbartisch sitzen
# Allein = Strafe, wenn eine Person ohne Gruppenmitglied am Tisch sitzt
# TischWertigkeiten = { freiePlaetze:Strafpunkte, .. } fuer freie Sitze an einem
# (teil-)belegten Tisch. Fehlt ein exakter Eintrag, gilt der
# naechstkleinere. Teilbelegte Tische sind am schlechtesten
# (dort passt keine ganze Gruppe mehr hin), daher steigt die
# Strafe mit den freien Plaetzen; ein komplett leerer Tisch
# (hoechster Schluessel) ist etwas besser, aber nicht gratis,
# damit sich das Zusammenziehen von Gruppen lohnt.
# Optional; fehlt der ganze Schluessel, werden freie Plaetze
# gar nicht bestraft -> mehr Teilbelegungen moeglich.
# AbstandFaktor = Strafpunkte je normierter Abstandseinheit (0..100) zwischen
# getrennten Teilen einer Gruppe. Der Abstand ist auf die
# maximale Ausdehnung der Tischanordnung normiert (100 =
# ein Teil ganz links/oben, der andere ganz rechts/unten).
# AbstandFaktor=-0.2 kostet den Maximalabstand also -20.
# Optional; fehlt der Schluessel, wird der Abstand nicht
# bestraft (Faktor 0).
# Wieviele Strafpunkte bekommt man
# wenn zwei Gruppen nicht am Nachbartisch sitzen
# wenn einer aus einer Gruppe allein sitzen muss
[Globals]
# Standardprofil: Trennungen sind bewusst teuer, damit eine Gruppe lieber
# zusammen an einem teilbelegten Tisch sitzt, als neben einem leeren getrennt zu
# werden.
[default]
Anzahl_Trennungen_1={ 2:-25, 3:-22, 4:-18, 6:-14, 8:-12, 10:-10 }
Anzahl_Trennungen_2={ 3:-40, 4:-30, 6:-22, 8:-18, 10:-14 }
Anzahl_Trennungen_3={ 4:-60, 6:-40, 8:-30, 10:-20 }
NichtNachbar=-3
Allein=-30
TischWertigkeiten={ 1:-3, 2:-3, 4:-5, 6:-6, 8:-4 }
AbstandFaktor=-0.2
# TischWertigkeiten sind Strafpunkte fuer freie Sitze an einem Tisch, je nach
# Anzahl freier Plaetze (fehlt ein exakter Eintrag, gilt der naechstkleinere).
# Ziel: teilbelegte Tische sind am schlechtesten (dort passt keine ganze
# Gruppe mehr hin und die Sitzenden haben leere Nachbarplaetze), daher steigt
# die Strafe mit den freien Plaetzen an (1..7 frei: -3 -> -6). Ein *komplett*
# leerer Tisch ist etwas besser als ein halbleerer (-4 bei 8 frei), weil ein
# leerer Tisch als Ganzes fuer eine Gruppe frei bleibt - er soll aber nicht
# gratis sein, damit sich das Zusammenziehen von Gruppen lohnt.
# Strafpunkte fuer den Abstand zwischen getrennten Teilen einer Gruppe.
# Wird eine Gruppe auf mehrere Tische aufgeteilt, ist ein grosser raeumlicher
# Abstand zwischen den Teilen viel schlechter als ein kleiner.
# Der Abstand wird als normierter Wert 0..100 berechnet: Bezugsgroesse ist die
# maximale Ausdehnung der Tischanordnung (Breite oder Laenge). Ein Abstand von
# 100 heisst also, dass ein Gruppenteil ganz links/oben und der andere ganz
# rechts/unten sitzt.
# Faktor = Strafpunkte je normierter Abstandseinheit. Bei Faktor=-0.2 kostet
# der maximal moegliche Abstand (100) demnach -20 Punkte.
[Abstand]
Faktor=-0.2
# Beispiel fuer ein alternatives Vorgehen: Trennungen sind guenstiger, der
# Abstand wird nicht bestraft, und freie Plaetze werden gar nicht bestraft
# (TischWertigkeiten fehlt bewusst) — so sind mehr Teilbelegungen moeglich.
# Nuetzlich fuer grosse Saele, in denen sich Gruppen kaum ungeteilt platzieren
# lassen. Aufruf: --strafen locker
[locker]
Anzahl_Trennungen_1={ 2:-12, 3:-10, 4:-8, 6:-6, 8:-5, 10:-4 }
Anzahl_Trennungen_2={ 3:-20, 4:-16, 6:-12, 8:-9, 10:-7 }
Anzahl_Trennungen_3={ 4:-30, 6:-22, 8:-16, 10:-12 }
NichtNachbar=-2
Allein=-20
AbstandFaktor=0.0