Adaptiver GA-Zyklus, Pool-Groessen-Panel, Konfig direkt aus cfg-Dateien

Zyklus/Farm:
- neuer adaptiver Modus: grosse Startpopulation, die je Generation
  schrumpft (Start/Schrumpfung/MinPopulation) und bei Konvergenz stoppt
  (Geduld Generationen ohne Verbesserung >= Schwelle, max MaxGenerationen)
- Zyklus.laden erkennt adaptives Profil am Feld 'Start' (Modus adaptiv),
  sonst klassisch (Abfolge/Anzahl); Farm._LaufStatisch/_LaufAdaptiv
- neue Trunkierungs-Selektion Farm.PopulationBegrenzen
- [Adaptiv]-Profil in zyklus.cfg (dokumentiert)

Entwicklungsgrafik:
- zweites Panel unter dem Verlauf zeigt die Anzahl erzeugter
  Verteilungen im Pool je Schritt (gemeinsame Zeitachse)

Konfiguration:
- platz.cfg entfernt; zyklus.cfg/strafen.cfg werden direkt aus
  $PLATZ_CFG geladen
- neuer Schalter --zyklus-art (Default Adaptiv) waehlt das GA-Profil
- web/main.py analog: direktes Laden, Profil via PLATZ_ZYKLUSART

Doku (README.md, CLAUDE.md) und Tests entsprechend aktualisiert;
Beispiele mit dem Adaptiv-Default neu berechnet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Michael Stangl
2026-07-11 14:31:59 +02:00
parent 4f87895303
commit 644f61ef6b
23 changed files with 1909 additions and 1607 deletions
-6
View File
@@ -1,6 +0,0 @@
[Config]
Zyklusdatei=$PLATZ_CFG/zyklus.cfg
Zyklusart=Easy
Strafendatei=$PLATZ_CFG/strafen.cfg
+24
View File
@@ -20,3 +20,27 @@ Anzahl='10,'+'5,x,2,x,x,'*3+'1'
Abfolge='e,s'
Anzahl='20,1'
# Adaptives Profil: keine feste Aktionsliste, sondern eine Generationen-
# schleife (siehe Farm._LaufAdaptiv in libs/ga.py). Erkannt wird es am Feld
# 'Start'. Es wird nicht mit harten Zahlen je Aktion gearbeitet, sondern nur
# mit einem Anfangswert und einem Abbruchkriterium:
# Start = Groesse der Startpopulation (viele Verteilungen zu
# Beginn; sie schrumpft dann von Generation zu Generation)
# MutationProLoesung = wie oft jede Loesung je Generation mutiert wird
# Schrumpfung = Faktor (<1), um den die behaltene Population je
# Generation kleiner wird (0.85 = -15 %% pro Generation)
# MinPopulation = untere Schranke, damit die Population nicht auf 1 faellt
# MaxGenerationen = harte Obergrenze der Generationen
# Geduld = nach so vielen Generationen ohne nennenswerte
# Verbesserung wird abgebrochen (dein "nach 3 Zyklen")
# Schwelle = um so viel muss sich der beste Wert mindestens
# verbessern, damit es als Verbesserung zaehlt
[Adaptiv]
Start=40
MutationProLoesung=2
Schrumpfung=0.85
MinPopulation=5
MaxGenerationen=50
Geduld=3
Schwelle=1.0