Files
platz/cfg/zyklus.cfg
T
Michael Stangl 644f61ef6b 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>
2026-07-11 14:31:59 +02:00

47 lines
2.2 KiB
INI

# Abfolge: Kommagetrennte Liste von Aktionsbuchstaben, die den Ablauf
# eines GA-Zyklus definieren. Jede Aktion greift auf den
# aktuellen Loesungspool zu (siehe Farm in libs/ga.py):
# e = erzeugen (neue zufaellige Loesungen erzeugen)
# s = selektieren (die besten Loesungen auswaehlen)
# S = zufaellig auswaehlen (zufaellige Loesungen auswaehlen)
# m = mutieren (bestehende Loesungen mutieren)
# j = behalten (alten Loesungspool als Eltern behalten)
# z = neue Generation (Pool durch die neu erzeugten Loesungen ersetzen)
#
# Anzahl: Kommagetrennte Liste von Zahlen, die zu jeder Aktion in der
# Abfolge gehoert und angibt, wie viele Loesungen davon
# betroffen sind ('x' = Aktion braucht keine Anzahl, z.B. j/z).
#
[Easy]
Abfolge='e,'+'s,z,m,j,z,'*3+'s'
Anzahl='10,'+'5,x,2,x,x,'*3+'1'
[Simple]
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