Files
platz/work/hochzeit/Sitzplatzverteilung.svg
T
Michael Stangl 6710d4f06a Bessere Verteilung: Strafen/Mutation, plus Abstammungsbaum mit Id-Herkunft
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>
2026-07-11 22:38:43 +02:00

178 lines
16 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="995.887" height="667.258" viewBox="0 0 995.887 667.258">
<rect width="100%" height="100%" fill="white"/>
<polyline points="435.414,248.104 247.407,414.103" fill="none" stroke="#fabed4" stroke-width="12" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.5"/>
<polyline points="404.01,253.492 580.101,251.472" fill="none" stroke="#469990" stroke-width="12" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.5"/>
<circle cx="744.415" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="744.415" cy="251.472" r="12" fill="white" fill-opacity="0.75"/>
<text x="744.415" y="251.472" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">6</text>
<circle cx="87.1573" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="87.1573" cy="415.786" r="12" fill="white" fill-opacity="0.75"/>
<text x="87.1573" y="415.786" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">7</text>
<circle cx="251.472" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="251.472" cy="216.979" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="285.965" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="251.472" r="12" fill="white" fill-opacity="0.75"/>
<text x="251.472" y="251.472" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">3</text>
<circle cx="908.73" cy="415.786" r="48.4" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="908.73" cy="389.386" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="931.593" cy="402.586" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="931.593" cy="428.986" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="908.73" cy="442.186" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="885.867" cy="428.986" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="885.867" cy="402.586" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="908.73" cy="415.786" r="12" fill="white" fill-opacity="0.75"/>
<text x="908.73" y="415.786" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">17</text>
<circle cx="580.101" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="580.101" cy="545.608" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="607.069" cy="558.595" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="613.729" cy="587.776" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="595.067" cy="611.178" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="565.135" cy="611.178" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="546.472" cy="587.776" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="553.133" cy="558.595" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="580.101" r="12" fill="white" fill-opacity="0.75"/>
<text x="580.101" y="580.101" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">15</text>
<circle cx="87.1573" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="87.1573" cy="216.979" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="111.548" cy="227.081" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="121.651" cy="251.472" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="111.548" cy="275.862" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="87.1573" cy="285.965" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="62.7669" cy="275.862" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="52.664" cy="251.472" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="62.7669" cy="227.081" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="87.1573" cy="251.472" r="12" fill="white" fill-opacity="0.75"/>
<text x="87.1573" y="251.472" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">2</text>
<circle cx="415.786" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="415.786" cy="216.979" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="227.081" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="450.28" cy="251.472" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="275.862" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="285.965" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="275.862" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="381.293" cy="251.472" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="227.081" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="251.472" r="12" fill="white" fill-opacity="0.75"/>
<text x="415.786" y="251.472" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">4</text>
<circle cx="580.101" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="580.101" cy="216.979" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="604.491" cy="227.081" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="614.594" cy="251.472" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="604.491" cy="275.862" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="285.965" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="555.711" cy="275.862" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="545.608" cy="251.472" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="555.711" cy="227.081" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="251.472" r="12" fill="white" fill-opacity="0.75"/>
<text x="580.101" y="251.472" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">5</text>
<circle cx="251.472" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="251.472" cy="381.293" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="275.862" cy="391.396" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="285.965" cy="415.786" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="275.862" cy="440.177" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="450.28" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="227.081" cy="440.177" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="216.979" cy="415.786" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="227.081" cy="391.396" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="415.786" r="12" fill="white" fill-opacity="0.75"/>
<text x="251.472" y="415.786" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">8</text>
<circle cx="415.786" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="415.786" cy="381.293" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="391.396" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="450.28" cy="415.786" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="440.177" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="450.28" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="440.177" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="381.293" cy="415.786" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="391.396" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="415.786" r="12" fill="white" fill-opacity="0.75"/>
<text x="415.786" y="415.786" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">9</text>
<circle cx="580.101" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="580.101" cy="381.293" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="604.491" cy="391.396" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="614.594" cy="415.786" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="604.491" cy="440.177" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="450.28" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="555.711" cy="440.177" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="545.608" cy="415.786" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="555.711" cy="391.396" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="415.786" r="12" fill="white" fill-opacity="0.75"/>
<text x="580.101" y="415.786" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">10</text>
<circle cx="744.415" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="744.415" cy="381.293" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="768.806" cy="391.396" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="778.909" cy="415.786" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="768.806" cy="440.177" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="744.415" cy="450.28" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="720.025" cy="440.177" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="709.922" cy="415.786" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="720.025" cy="391.396" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="744.415" cy="415.786" r="12" fill="white" fill-opacity="0.75"/>
<text x="744.415" y="415.786" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">11</text>
<circle cx="87.1573" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="87.1573" cy="545.608" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="111.548" cy="555.711" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="121.651" cy="580.101" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="111.548" cy="604.491" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="87.1573" cy="614.594" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="62.7669" cy="604.491" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="52.664" cy="580.101" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="62.7669" cy="555.711" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="87.1573" cy="580.101" r="12" fill="white" fill-opacity="0.75"/>
<text x="87.1573" y="580.101" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">12</text>
<circle cx="251.472" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="251.472" cy="545.608" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="275.862" cy="555.711" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="285.965" cy="580.101" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="275.862" cy="604.491" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="614.594" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="227.081" cy="604.491" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="216.979" cy="580.101" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="227.081" cy="555.711" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="580.101" r="12" fill="white" fill-opacity="0.75"/>
<text x="251.472" y="580.101" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">13</text>
<circle cx="415.786" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="415.786" cy="545.608" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="555.711" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="450.28" cy="580.101" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="604.491" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="614.594" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="604.491" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="381.293" cy="580.101" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="555.711" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="580.101" r="12" fill="white" fill-opacity="0.75"/>
<text x="415.786" y="580.101" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">14</text>
<circle cx="415.786" cy="87.1573" r="73.0009" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="415.786" cy="36.1564" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="441.287" cy="42.9892" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="459.954" cy="61.6568" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="466.787" cy="87.1573" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="459.954" cy="112.658" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="441.287" cy="131.325" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="138.158" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="390.286" cy="131.325" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="371.618" cy="112.658" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="364.785" cy="87.1573" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="371.618" cy="61.6568" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="390.286" cy="42.9892" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="87.1573" r="12" fill="white" fill-opacity="0.75"/>
<text x="415.786" y="87.1573" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">1</text>
<circle cx="908.73" cy="251.472" r="77.1573" fill="white" stroke="black" stroke-width="1.5"/>
<circle cx="908.73" cy="196.315" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="934.363" cy="202.632" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="954.124" cy="220.139" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="963.485" cy="244.823" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="960.303" cy="271.031" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="945.306" cy="292.758" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="921.93" cy="305.026" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="895.53" cy="305.026" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="872.154" cy="292.758" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="857.157" cy="271.031" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="853.975" cy="244.823" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="863.336" cy="220.139" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="883.097" cy="202.632" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="908.73" cy="251.472" r="12" fill="white" fill-opacity="0.75"/>
<text x="908.73" y="251.472" text-anchor="middle" dominant-baseline="central" font-size="13.2" font-weight="bold" fill="black">16</text>
</svg>