RANGLIST - Programmdokumentation

Benutzerhandbuch

1. Einleitung

1.1. Allgemeines

Das Programm RANGLIST dient zur Auswertung von Turnieren für Mehrpersonenspiele und zur Erstellung einer entsprechenden Rangliste.

Dieses Handbuch enthält die Beschreibung der zugrundeliegenden Arbeitsweise ebenso wie Hinweise zur Bedienung des Programms.

1.2. Technische Details

RANGLIST wurde in dem Turbo-PASCAL-compatiblen Dialekt Maxon-PASCAL für Atari/ST geschrieben und anschließend auf MS/DOS-PCs portiert.

Das Programm umfaßt derzeit etwa 2300 Zeilen Quellcode. Für den Ablauf wird ein Speicherbedarf von etwa 600 kByte benötigt.

2. Eingabe der auszuwertenden Partien

2.1. Eingabedatei

Das Programm RANGLIST wertet jeweils eine Eingabedatei aus, in der eine (fast) beliebige Anzahl von Partien beschrieben sein können.

Diese Eingabedatei muß den Namen <name>.DAT haben. Das Programm

2.2. Zeilentypen

Jede Zeile der Datei ist

Kommentarzeilen dürfen an beliebigen Stellen innerhalb der Eingabedatei auftreten.

Das Zeichen in Spalte 1 wird nur in diesem Sinne ausgewertet!

2.3. Beschreibung einer Partie

Eine Partiebeschreibung besteht aus den folgenden Zeilen:

1. Zeile: Name der Partie
(beliebige Zeichenkette, nach 80 Zeichen wird abgeschnitten)
2. Zeile: Anzahl der Teilnehmer
(positive ganze Zahl, dahinter Zeilenende oder Leerzeichen; nach einem Leerzeichen darf beliebiger Text folgen)
danach die
Spieler-Ergebnisse:
  • positive ganze Zahl als Punktzahl des Spielers,
  • genau ein Leerzeichen,
  • der Name des Spielers (Zeichenkette bis zum Zeilenende, nach 30 Zeichen wird abgeschnitten)

Die Zahlenwerte dürfen jeweils führende Leerzeichen enthalten.
Liegt kein korrektes Dateiformat vor, dann wird das Programm normalerweise abstürzen, ohne aber die Eingabedatei zu zerstören oder sonstigen Schaden anzurichten.

Die Ergebnisse der einzelnen Spieler müssen nicht nach ihren Punktwerten sortiert sein; dies empfiehlt sich aber, um die Übersicht bei der Eingabe der Ergebnisse zu erhöhen.

Obwohl dies wohl kaum Sinn machen dürfte, akzeptiert das Programm derzeit auch Partien, in denen derselbe Spieler mehrfach als Teilnehmer auftritt.

Die Punktzahl als Ergebnis eines einzelnen Spielers kann vom Benutzer des Programms auf eine beliebige Art und Weise bestimmt werden. Die einzigen Einschränkungen sind:

Außerdem ist zu empfehlen, daß der Abstand zwischen den Punktzahlen der Spieler in etwa einen Qualitätsabstand zwischen den Einzelergebnissen beschreibt. Auch dies wird bei der folgenden Auswertung der eingegebenen Zahlen implizit angenommen.

3. Arbeitsweise bei der Auswertung

3.1. Einlesen der Partien

Das Programm liest die Eingabedatei komplett ein und initialisiert seine Verwaltungstabellen.
Dabei wird pro Partie dynamisch weiterer Speicherplatz angefordert; es ist also möglich, daß das Programm sehr große Eingabedateien nicht mehr verarbeiten kann (und dann ebenfalls abstürzt).

Getestet wurde das Programm mit über 1000 Partien und insgesamt 3500 Spielern. Die im Programm definierten Grenzen sind:

3.2. Berechnung der Referenzwerte pro Partie

Für jede erfaßte Partie wird aus den Ergebnissen aller Teilnehmer an dieser Partie ein Referenzwert berechnet. Dieser Referenzwert ist ein gewichteter Mittelwert aus den Ergebnissen der Teilnehmer.

Die Gewichte der einzelnen Spieler steigen (bezogen auf die Plazierung der Teilnehmer) von 'außen' nach 'innen' linear an. Bei einer Partie mit drei Mitspielern A, B und C wird der Referenzwert also durch (A + 2*B + C) / 4 bestimmt, bei 6 Spielern lauten die Gewichte 1-2-3-3-2-1 usw.

3.3. Berechnung der relativen lokalen Werte der Spieler

Jedes Einzelergebnis eines Spielers wird nun umgerechnet in einen Wert, der in Prozent des Referenzwertes der entsprechenden Partie ausgedrückt wird. Damit werden die Ergebnisse verschiedener Ergebnisse (bei denen i. a. unterschiedlich hohe Punktzahlen vergeben wurden) in eine gemeinsame "Währung" abgebildet.
Dieser Wert wird als "lokaler Partie-Wert" des Spielers bezeichnet.

3.4. Berechnung der ersten Stärkewerte aller Spieler

Für jeden Spieler wird anschließend der Mittelwert aus seinen lokalen Partie-Werten berechnet.
Dieser Wert wird als "Spielstärke" des Spielers angesehen.

3.5. Neubewertung aller Partien

Nach der ersten Berechnung von Stärkewerten wird jetzt für jede Partie der Mittelwert der Spielstärken seiner Teilnehmer berechnet.
Dieser Wert wird als das "Niveau" dieser Partie bezeichnet.

Außerdem wird für jeden Teilnehmer einer Partie ein "subjektives Niveau" aus den Spielstärken seiner Mitspieler berechnet.
Bei "schwachen" Spielern liegt dieses subjektive Niveau also höher, bei "starken" Spielern niedriger als das allgemeine Niveau der Partie.

Alle Partie-Niveaus werden anschließend durch Multiplikation mit einem gemeinsamen Faktor so skaliert, daß der Mittelwert aller in 3.6. verwendeten Niveau-Werte gleich 1.0 ist. (Dies ist für die Konvergenz des anschließenden Iterationsverfahrens erforderlich.)

3.6. Neu-Berechnung der Partie-Erträge

Nachdem nun ein erster Eindruck darüber vorliegt, welche Partien "stark" und welche "schwach" besetzt waren, werden die Erträge der Spieler aus ihren Partien neu bestimmt.

Bisher zählte für den Spieler direkt sein lokaler Partie-Wert; nun aber wird zur Bestimmung der neuen Spielstärke aller Spieler statt dessen das Produkt aus lokalem Partie-Wert und subjektivem Partie-Niveau verwendet.

3.7. Iterationsverfahren

Die aus Schritt 3.4. berechneten Spielstärken werden für jeden Spieler gespeichert.
Anschließend werden alle Spielstärken aufgrund der in 3.6. neu bestimmten Erträge neu berechnet und - basierend auf diesen neuen Spielstärken - wiederum alle Partieniveaus neu berechnet.

Dies wird in einer Schleife wiederholt durchgeführt. Nach jedem Schleifendurchgang werden die Spielstärken aller Spieler mit den Werten des vorherigen Durchgangs verglichen. Dazu wird eine Summe über die Quadrate der Abweichungen der einzelnen Spielstärken berechnet. Wird diese Summe kleiner als ein bestimmter Abbruchwert, dann wird angenommen, daß die Spielstärken stabil sind, und die Iteration beendet.

3.8. Ausgabe der Partie-Bewertungen

Nach dem Abschluß der Berechnungen erzeugt das Programm eine Ausgabedatei mit dem Namen <name>.PAR, in der sämtliche ausgewerteten Partien und die dabei berechneten Ergebnisse aufgelistet werden.

Für jede Partie werden dabei folgende Informationen ausgegeben:

und für jeden Teilnehmer zusätzlich

3.9. Berechnung der Ranglisten-Leistungen aller Spieler

Qualität ist nicht gleich Leistung:

Es geht hierbei um den Vergleich zwischen

Insbesondere wird ein Spieler, der einmal einen Glückstreffer gelandet hat, keine Lust auf weitere Partien haben, wenn eine Rangliste aufgrund der Spielstärken berechnet wird, da er sich dabei fast nur verschlechtern kann.

Bei ähnlichen Überlegungen ist es üblich, die Summe der einzelnen Partie-Erträge aus <n> Partien nicht durch <n>, sondern durch <n>+x zu teilen, um die Teilnahme an vielen Partien entsprechend zu belohnen.
Genau dies wird auch vom Programm RANGLIST durchgeführt. Dabei wird die Summe der Partie-Erträge eines Spielers durch <n>+<m>-1 geteilt, wobei <m> der Mittelwert aus der Anzahl der bisher absolvierten Partien über alle Spieler der Rangliste ist. Der Wert von <m>, der die Krümmung dieser Gewichtungskurve bestimmt, paßt sich also den vorliegenden Eingabedaten an.

3.10. Ausgabe der Rangliste

Nach dem Abschluß der Berechnungen erzeugt das Programm eine Ausgabedatei mit dem Namen <name>.LST, in der sämtliche erfaßten Teilnehmer in einer nach ihrem Ranglistenplatz sortierten Tabelle aufgelistet werden.

Für jeden Spieler werden dabei folgende Informationen ausgegeben:

Seit Version 1.15 erzeugt das Programm zusätzlich eine Ausgabedatei mit dem Namen <name>.HTM, welche die Ranglistentabelle in HTML-Formatierung enthält.