644f61ef6b
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>
47 lines
2.2 KiB
INI
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
|
|
|