6710d4f06a
Weniger vermeidbare Gruppentrennungen:
- strafen.cfg: Tischbesetzung bestraft jetzt gestaffelt nach freien
Plaetzen (teilbelegte Tische am teuersten, mit Fallback auf den
naechstkleineren Eintrag), Trennungsstrafen deutlich erhoeht - so
werden Gruppen nicht mehr getrennt, obwohl leere Tische danebenstehen
- gibPunkte('Tischbesetzung') mit Naechst-kleiner-Fallback
- mutieren() setzt geraeumte Gruppen groesste-zuerst neu
(GruppenSetzen(GrosseZuerst=True)), damit grosse Gruppen die frei
gewordenen ganzen Tische bekommen und wieder zusammenkommen
(uebrig bleiben nur physisch unvermeidbare Trennungen, Gruppe > Tisch)
Abstammungsbaum (neuer Schalter --show-lineage -> Abstammung.svg):
- neue Klasse ga.Abstammung zeichnet den vollen Mutationsbaum aller
Loesungen; der Ast der finalen besten Loesung ist hervorgehoben und
mit ihrer Id beschriftet
- hierarchische Loesungs-Ids (Farm._WurzelId/_KindId): Wurzel '7',
Mutationskind '7.2', dessen Kind '7.2.1' - die ganze Abstammung ist
direkt aus der Id ablesbar
Tests (15 gruen), README und CLAUDE.md aktualisiert; Beispiele mit den
neuen Strafen und beiden Grafiken neu berechnet.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.9 KiB
INI
39 lines
1.9 KiB
INI
# 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 }
|
|
|
|
# Wieviele Strafpunkte bekommt man
|
|
# wenn zwei Gruppen nicht am Nachbartisch sitzen
|
|
# wenn einer aus einer Gruppe allein sitzen muss
|
|
[Globals]
|
|
NichtNachbar=-3
|
|
Allein=-30
|
|
TischWertigkeiten={ 1:-3, 2:-3, 4:-5, 6:-6, 8:-4 }
|
|
|
|
# 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
|