Wenden Sie die folgenden Architekturprinzipien an, wenn Sie festlegen, wie Codekandidaten in Ihrer Testumgebung bewertet, normalisiert und mit Strafen belegt werden.
Ziele direkt maximieren
AlphaEvolve führt ausschließlich Maximierungssuchen durch und behandelt jedes Optimierungsziel als Hill-Climbing-Aufgabe. Wenn Sie einen Messwert wie die Latenz
oder Fehlerraten minimieren möchten, müssen Sie den endgültigen berechneten Wert negieren:
score = -latency_ms # AE maximizes -> minimizes latency.
Strikte Monotonie der Funktion beibehalten
Implementieren Sie nur monotone Bewertungsfunktionen. Der zurückgegebene numerische Wert muss mit der Verbesserung der Kandidatenlösungen stetig steigen. Die Einbeziehung nicht monotoner Werte verschlechtert die Suchleistung und führt zu logischen Inkonsistenzen im Optimierungspfad.
Detaillierte, granulare Messwerte bereitstellen
Detaillierte Werte verbessern die allgemeine Suchqualität direkt. Auch wenn Sie für ein einzelnes geschäftliches Kernziel optimieren, hilft die Einbeziehung sekundärer oder Proxy-Messwerte AlphaEvolve, sich effektiver in einem komplexen Suchraum zu bewegen. Geben Sie einzelne Unterwerte als strukturierte Analysen an das System zurück, damit das LLM explizit über Leistungs-Trade-offs zwischen Generationen nachdenken kann.
Teilerfolg gegenüber spärlichen Ergebnissen belohnen
Belohnen Sie Teilerfolge, anstatt sich ausschließlich auf endgültige oder binäre Ergebnisse zu verlassen. Bevorzugen Sie immer ein dichtes gegenüber einem spärlichen Bewertungssignal.
Ein binäres oder niedrig aufgelöstes Ziel (z. B. das Erfassen von gewonnenen Spielen in einem turnierbasierten Spielproblem) führt zu massiven Leistungsplateaus, bei denen mehrere Kandidaten gleichauf liegen. Dadurch kann AlphaEvolve nicht zwischen einer fast perfekten und einer schlechten Lösung unterscheiden, was die Auswahlzyklen für übergeordnete Elemente verlangsamt.
So behalten Sie die Richtung des Suchgradienten bei:
Fügen Sie ein feingliedriges Untersignal hinzu: Messen Sie den inkrementellen Fortschritt in Richtung des endgültigen Ziels (z. B. einzelne Punkte, die in einem Spiel erzielt wurden), damit AlphaEvolve ansonsten gleichauf liegende Kandidaten einstufen und sich in vielversprechende Lösungsräume bewegen kann.
Richten Sie die Ausrichtung und Gewichtung sorgfältig aus: Achten Sie darauf, dass das Untersignal monoton auf das tatsächliche Ziel ausgerichtet ist und die Gewichtung deutlich darunter liegt. Wenn es nicht richtig gewichtet ist, optimiert AlphaEvolve den Proxy-Messwert auf Kosten des eigentlichen Ziels (was zu einem Reward-Hack führt).
Erstellen Sie beispielsweise eine skalare Zielfunktion, bei der Punkte als logischer Tiebreaker verwendet werden: use score = matches_won + w * (points_scored / points_possible).
Konfigurieren Sie die Gewichtungsbeschränkung auf w < 1, damit ein zusätzlicher endgültiger Sieg
immer höher bewertet wird als jede Punktesammlung innerhalb eines Spiels. Das Untersignal wird also
ausschließlich als Tiebreaker verwendet.
Mit einem einzelnen Ziel beginnen
Beginnen Sie die Implementierung mit einer einzelnen Zielfunktion. Die Optimierung mit mehreren Zielen und umfassender Pareto-Grenzverfolgung wird zwar nativ in der Datenbank vollständig unterstützt, wobei MAP-Elites das beste Programm pro Messwert verfolgt und das System eine laufende Pareto-Grenze für alle Messwerte beibehält. Ein einzelnes skalares Ziel ist jedoch bei der ersten Bereitstellung erheblich einfacher zu analysieren und zu debuggen. Wenn Ihr Problem mehrere Ziele erfordert, können Sie sie entweder zu einem einzelnen gewichteten Skalar kombinieren oder von Anfang an Tools zur Verfolgung mehrerer Messwerte verwenden.
Vor der Kombination neu skalieren und normalisieren
Wenden Sie eine strenge Skalenabstimmung auf alle Messwerte an, um Optimierungsbias zu vermeiden:
Über Bereiche hinweg neu skalieren: Normalisieren Sie Messwerte auf vergleichbare Bereiche, bevor Sie sie kombinieren. Wenn Sie begrenzte Werte (von
0bis1) und unbegrenzte Werte (von0bisinfinity) ohne explizite Neuskalierung kombinieren, dominiert der unbegrenzte Messwert die Fitnesslandschaft.Additive Strukturen gegenüber multiplikativen Kombinationen bevorzugen: Multiplikative Ziele können sehr empfindlich auf geringfügige Abweichungen im Nenner reagieren, was die Suchgenauigkeit und -stabilität beeinträchtigt. Implementieren Sie stattdessen additive gewichtete Summen:
w1*A - w2*L - w3*M. Dieses Format ermöglicht einfache Gewichtungsanpassungen pro Leistungsparameter.Auf Anfangswerte normalisieren: Damit Skalenunterschiede den Suchpfad nicht verzerren, teilen Sie jeden Messwert durch den jeweiligen anfänglichen Referenzwert, sodass alle Messwerte einen Referenzwert von
1.0haben, bevor Sie Gewichte anwenden und sie kombinieren.
Minimale numerische Unterschiede verstärken
Geringe numerische Unterschiede bei den Werten liefern dem zugrunde liegenden LLM möglicherweise kein nützliches Optimierungssignal. Wenn ein starker Kandidat 1e-7 und ein schwächerer Kandidat 1e-8 erzielt, kann das LLM beim Überprüfen des Kontexts möglicherweise nicht sinnvoll zwischen ihnen unterscheiden. Skalieren Sie die endgültigen Werte auf einen offensichtlichen,
für Menschen lesbaren Bereich (z. B. 0 bis100), damit inkrementelle Codeverbesserungen
im Generierungsprompt numerisch sichtbar werden.