Eigene Ideen testen
KI-Hinweis: Dieser Text entsteht mit Unterstützung von KI-Systemen, wird aber vor der Veröffentlichung redaktionell geprüft und verantwortet.
Du hast einen Warrior. Du änderst eine Konstante, lässt ihn gegen einen Gegner laufen, und er schneidet vier Punkte besser ab als vorher.
War die Änderung gut?
Die ehrliche Antwort ist fast immer: Das weißt du nicht. Dieses Kapitel zeigt, warum — und wie viel Messung nötig ist, damit du es wirklich weißt.
Woher der Zufall kommt
In Schritt 1 hast du es schon gesehen: Zehn Läufe derselben Paarung mit je 200 Runden ergaben zwischen 42 und 51 Siege. Nichts hatte sich geändert außer den Würfeln.
Der Zufall in einem Core-War-Duell sitzt an genau zwei Stellen:
- Wo der Gegner geladen wird. Der Abstand zwischen beiden Warriors entscheidet mit, wer wen zuerst trifft.
- Wer den ersten Schritt macht.
Mehr nicht. Bei gegebener Position und Startreihenfolge läuft eine Runde völlig deterministisch ab — dieselben Vorgaben ergeben immer dasselbe Ergebnis.
Das ist eine gute Nachricht, denn es heißt: Man kann den „wahren" Wert einer Paarung nicht nur schätzen, sondern vollständig ausrechnen. Genau das ist für dieses Kapitel gemacht worden — alle 7801 möglichen Ladepositionen mal beide Startreihenfolgen, also 15.602 Runden je Paarung, über 75 Paarungen hinweg. Das sind 1,17 Millionen durchgerechnete Runden ohne jeden Stichprobenfehler.
Gegen diese Wahrheit lässt sich dann messen, wie oft ein kurzer Testlauf danebenliegt.
Wie viel Rauschen steckt in einem Testlauf?
Die Punkteskala reicht von 0 bis 300. So breit streut das Ergebnis, je nachdem wie viele Runden du laufen lässt:
| Runden | Streubreite (95 %) |
|---|---|
| 20 | 110 Punkte |
| 50 | 68 Punkte |
| 100 | 50 Punkte |
| 200 | 35 Punkte |
| 500 | 22 Punkte |
| 1000 | 16 Punkte |
Lies die 200er-Zeile noch einmal. Zwei Läufe mit je 200 Runden können sich um 20 bis 30 Punkte unterscheiden, ohne dass sich irgendetwas geändert hat. Wenn deine Verbesserung vier Punkte gebracht hat, hast du mit hoher Wahrscheinlichkeit nichts gemessen als das Wetter.
Der kleinste Unterschied, den du sehen kannst
Daraus folgt eine praktisch brauchbare Zahl: Wie groß muss ein echter Unterschied sein, damit dein Testlauf ihn zuverlässig erkennt?
| Runden | erkennbar ab |
|---|---|
| 20 | 69 Punkte |
| 50 | 44 Punkte |
| 100 | 28 Punkte |
| 200 | 20 Punkte |
| 500 | 12 Punkte |
| 1000 | 9 Punkte |
Und so oft liegst du daneben, wenn der wahre Unterschied kleiner ist — bei 200 Runden:
| wahrer Unterschied | Fehlurteil |
|---|---|
| 5–10 Punkte | 22 % |
| 10–20 Punkte | 8,7 % |
| 20–50 Punkte | 0,5 % |
| über 50 Punkte | 0 % |
Wer mit 200 Runden testet und einen Unterschied von zehn Punkten misst, hat in etwa jedem fünften Fall den schlechteren Warrior für den besseren gehalten.
Die unbequeme Nachricht
Jetzt der Teil, den man nicht gern hört.
Für diese Untersuchung wurden keine beliebigen Warrior-Paare genommen, sondern echte Entwicklungsreihen — aufeinanderfolgende Versionen desselben Warriors, also genau die Situation, um die es beim Testen geht. Wie groß waren die tatsächlichen Fortschritte?
| Schritt | wahrer Unterschied | Fehlurteil bei 200 | bei 1000 |
|---|---|---|---|
| ee_v3 → ee_v4 | 1,0 Punkte | 41 % | 36 % |
| ee_v5 → ee_v6a | 2,0 Punkte | 43 % | 37 % |
| ee_v6a → ee_v6b | −1,5 Punkte | 42 % | 33 % |
| pst_v3 → pst_v4 | 0,4 Punkte | 46 % | 43 % |
| pst_v2 → pst_v3 | 26,3 Punkte | 8,6 % | 6,9 % |
Vier von fünf echten Entwicklungsschritten bewegen den Score um ein bis zwei Punkte. Das ist mit keiner praktikablen Rundenzahl nachweisbar — auch 1000 Runden liefern dort ein Ergebnis, das kaum besser als geraten ist.
Nur der eine echte Sprung ist sauber messbar.
Bevor du entmutigt bist: Das klingt schlimmer, als es ist. Wenn zwei Versionen praktisch gleich stark sind, ist es folgenlos, welche du für besser hältst — du verlierst nichts, wenn du dich irrst. Die brauchbare Schlussfolgerung ist eine andere:
Hör auf, kleine Änderungen einzeln messen zu wollen. Sammle mehrere Änderungen, bis ein Unterschied entsteht, der groß genug ist, um sichtbar zu sein. Und misstrau jeder Verbesserung unter zehn Punkten, egal wie schön sie aussieht.
Breite schlägt Tiefe
Der überraschendste Befund zum Schluss — und er widerspricht dem, was man intuitiv tut.
Wenn du ein festes Rechenbudget hast, kannst du es auf zwei Arten ausgeben: alle Runden gegen einen Gegner, oder verteilt auf mehrere. Naheliegend wäre, gegen einen Gegner möglichst gründlich zu messen.
Das ist falsch, und zwar systematisch. Ein einzelner Gegner beantwortet nämlich eine andere Frage als die, die du stellst. Du willst wissen, ob dein Warrior generell besser geworden ist — ein Einzelgegner sagt dir nur, ob er gegen diesen Gegner besser geworden ist. Selbst mit unendlich vielen Runden, also ganz ohne Rauschen, weicht dieses Urteil in 24,5 % der Fälle vom Feldurteil ab.
Bei gleichem Budget:
| Runden gesamt | alles gegen 1 Gegner | verteilt auf 5 Gegner |
|---|---|---|
| 200 | 16,5 % Fehlurteile | 19,0 % |
| 500 | 17,1 % | 14,4 % |
| 1000 | 17,9 % | 11,6 % |
| 2000 | 18,5 % | 9,3 % |
Sieh dir die linke Spalte an: Sie wird mit mehr Runden schlechter.
Das ist die Signatur einer Verzerrung. Mehr Runden machen das Urteil präziser, aber nicht richtiger — man konvergiert immer sicherer auf die falsche Antwort.
Faustregel: Ab etwa 500 Runden Gesamtbudget ist jede weitere Runde gegen denselben Gegner schlechter investiert als dieselbe Runde gegen einen neuen Gegner.
Eine Abkürzung
Nicht alle Paarungen sind gleich verrauscht. Je mehr Unentschieden eine Paarung produziert, desto ruhiger wird das Ergebnis — der Zusammenhang ist mit einer Korrelation von −0,97 ungewöhnlich klar.
Bei 200 Runden streuen Paarungen mit vielen Unentschieden um 23 Punkte, solche mit wenigen um 37. Der Grund ist unmittelbar einleuchtend: Ein Unentschieden bringt einen Punkt statt drei oder null und trägt damit weniger Schwankung bei.
Praktisch heißt das: Wer viel gegen Paper testet, kommt mit weniger Runden aus als jemand, der gegen entscheidungsfreudige Gegner misst.
Dein Arbeitsablauf
Zusammengefasst, für den Anfang:
- Mindestens 500 Runden, besser 1000. Alles darunter ist Zeitvertreib.
- Gegen mehrere Gegner, mindestens fünf, aus verschiedenen Klassen. Breite vor Tiefe.
- Unterschiede unter 10 Punkten ignorieren. Sie sind wahrscheinlich Rauschen.
- Änderungen bündeln, statt jede einzeln messen zu wollen.
- Bei Auswahlentscheidungen frisch nachmessen. Wer aus zwanzig Varianten die beste Messung heraussucht, findet garantiert eine, die Glück hatte. Die Bestätigung braucht neue Runden.
Punkt 5 ist die Falle, in die praktisch jeder einmal tappt. Wenn du zwanzig Varianten testest und die beste nimmst, hast du nicht die beste Variante gefunden, sondern die mit dem größten Messglück. Erst ein zweiter Lauf mit frischen Runden zeigt, ob etwas davon echt war.
Wenn lückenlos trotzdem danebenliegt
Eine letzte Falle — die heimtückischste, weil sie nicht beim Benutzen der Werkzeuge zuschnappt, sondern beim Verbessern.
Die Zutaten kennst du schon: Der Zufall sitzt in Ladeposition und Startreihenfolge. Bei manchen Paarungen bestimmen beide den Ausgang gemeinsam — und das schärfste Beispiel dafür ist die einfachste denkbare Paarung: ein Imp gegen einen Core-Clear, ein Befehl gegen eine Walze. Den Imp hast du in Schritt 2 selbst gebaut; der Clear ist in drei Zeilen erzählt (in der Arena tritt er als „Lehrclear" an):
ptr dat #0, #10 ; die Walzen-Position
clear mov bomb, >ptr ; Bombe auf die Zelle, dann Zeiger +1
jmp clear ; das ist schon die ganze Walze
bomb dat #0, #0
Der Imp kopiert sich eine Zelle weiter je Zyklus, die Walze frisst eine Zelle je zwei Zyklen. Der Imp ist also doppelt so schnell wie sein Verfolger und kommt davon — aber nur mit dem Vorsprung, der ihm zusteht. Fehlt ihm genau ein Zyklus, holt die Walze ihn ein.
Dieselbe Startposition, zwei Ausgänge
pmars -r 2 -F 4000 imp.red lehrclear.red
Zwei Runden, beide mit dem Imp auf derselben Startposition. Ergebnis:
eine endet unentschieden, die andere verliert der Imp. Dasselbe mit
-F 4001, also einer ungeraden Position: wieder eine Runde Remis, eine
verloren — nur in umgekehrter Reihenfolge.
Das ist der ganze Befund in einer Zeile: Die Startposition allein entscheidet diesen Kampf nicht. Was sich zwischen den beiden Runden ändert, ist der Anziehende — Simulatoren lassen ihn reihum wechseln, damit keiner der beiden dauerhaft den Vorteil des ersten Zuges hat.
Zwei Größen bestimmen den Ausgang also gemeinsam:
| Abstand | wer zuerst zieht | Ausgang |
|---|---|---|
| gerade | Imp | Remis |
| gerade | Clear | Imp verliert |
| ungerade | Imp | Imp verliert |
| ungerade | Clear | Remis |
Remis genau dann, wenn Parität und Zugrecht zusammenpassen.
Die richtige Messung
pmars -P imp.red lehrclear.red
-P (permutate) spielt jede legale Startposition zweimal — einmal mit
jedem Anziehenden. Damit kommen alle vier Zeilen der Tabelle vor, und das
Ergebnis ist das, was die Tabelle vorhersagt: die Hälfte Remis, die Hälfte
Niederlagen. Das ist die ehrliche Antwort auf „wie steht der Imp gegen den
Clear?".
Und jetzt die Falle
Sie entsteht nicht beim Benutzen des Werkzeugs, sondern beim Verbessern.
Wer viele Paarungen misst, kommt irgendwann auf den Gedanken, sich die Startpositionen selbst vorzugeben, statt sie dem Simulator zu überlassen — sauber der Reihe nach, 100, 101, 102, und so fort, bis alle abgedeckt sind. Das klingt nach mehr Sorgfalt als eine Zufallsauswahl. Es ist weniger.
Denn während die Positionsliste in Einerschritten aufwärts läuft, wechselt der Anziehende bei jeder Runde ebenfalls. Beide laufen im Gleichschritt. Von den vier Zeilen der Tabelle werden dadurch immer nur zwei besucht: entweder die erste und vierte — dann ist jede Runde ein Remis — oder die zweite und dritte, dann geht jede Runde verloren.
Welche Hälfte du erwischst, hängt daran, welches der beiden Programme du zuerst nennst. Dieselbe Paarung, dieselben alle Startpositionen, exakt reproduzierbar — und je nach Aufrufreihenfolge kommt heraus:
- jede Runde unentschieden, oder
- jede Runde verloren.
Die Messung ist lückenlos. Sie ist trotzdem falsch, weil „alle Positionen" nicht „alle Fälle" heißt.
Warum die Standardwerkzeuge nicht hineinlaufen
Der Reihe nach durchgezählte Einzelaufrufe —
pmars -r 1 -F 100 imp.red lehrclear.red
pmars -r 1 -F 101 imp.red lehrclear.red
— sind übrigens nicht betroffen: Jeder Aufruf beginnt frisch, der
Anziehende wechselt zwischen den Aufrufen nicht mit, und die Auszählung ergibt
korrekt halb Remis, halb Niederlagen. Auch -P ist immun, weil es die
Positionsliste ohnehin verdoppelt.
Die Falle schnappt nur dort zu, wo Runden am Stück gerechnet werden und du dir die Positionsfolge selbst gebaut hast. Genau deshalb ist sie so unauffällig: Sie trifft nicht den Anfänger, der das Werkzeug nimmt, wie es ist, sondern den Fortgeschrittenen, der es gründlicher machen wollte.
Die Abhilfe ist entsprechend klein — die eigene Liste zweimal durchlaufen
lassen. Weil die Anzahl der legalen Positionen ungerade ist, beginnt der
zweite Durchgang mit dem jeweils anderen Anziehenden, und alle vier Fälle
kommen vor. Das ist genau das, was -P von sich aus tut.
Dass die Verdopplung wirkt, hängt an der ungeraden Positionsanzahl. Wäre sie gerade, liefe der Wechsel des Anziehenden phasengleich weiter und der zweite Durchgang brächte keine neue Abdeckung.
Die allgemeine Lehre
Der Imp ist hier nur der Zeuge. Der Satz gilt für jede Messung:
Wenn zwei Größen ein Ergebnis gemeinsam bestimmen und man sie im Gleichschritt durchzählt, misst man die Hälfte des Zustandsraums und hält sie für das Ganze.
Das Unangenehme daran ist, dass so eine Messung nach mehr Sorgfalt aussieht als eine Stichprobe, nicht nach weniger. Vollständigkeit in einer Dimension ist kein Ersatz für Vollständigkeit im Zustandsraum — und wer ein Standardwerkzeug durch etwas Gründlicheres ersetzt, sollte prüfen, was das Werkzeug still für ihn erledigt hat.
Was du jetzt weißt
- Der Zufall sitzt in Ladeposition und Startreihenfolge — sonst nirgends.
- Bei 200 Runden beträgt die Streubreite 35 Punkte; erkennbar sind erst Unterschiede ab etwa 20 Punkten.
- Echte Entwicklungsschritte sind meist 1–2 Punkte groß und damit praktisch nicht einzeln messbar.
- Ein einzelner Gegner ist systematisch verzerrt — mehr Runden machen das schlimmer, nicht besser.
- Tie-lastige Paarungen brauchen weniger Runden.
- Selbstgebaute, aufsteigend durchgezählte Positionslisten koppeln Parität und
Zugrecht — die Liste doppelt durchlaufen lassen, oder gleich
-Pnehmen.
Im letzten Schritt geht es darum, den Warrior dorthin zu schicken, wo er gegen das echte Feld antritt.
Grundlage: vollständige Auszählung von 7801 Ladepositionen × 2 Startreihenfolgen je Paarung (15.602 Runden), über 75 Paarungen und 15 Warriors — 1,17 Millionen Runden, dazu 4000 simulierte Testläufe je Messpunkt. Der wahre Score hat damit keinen Stichprobenfehler; die Fehlerquoten sind exakte Auszählungen, keine Modellierung.