1. bersicht
------------

Das Programm Schweizer.exe berechnet Paarungen fr Schweizer-System-Turniere.
Die Paarungen werden mit einem Optimierungsalgorithmus erzeugt. Sie
entsprechen NICHT denjenigen, die man nach den offiziellen FIDE-Regeln erhalten
wrde. Es werden jedoch die Kriterien aus den FIDE-Regeln verwendet, um die
Paarungen zu erzeugen.

Aufruf: Auf der Kommandozeile wird eingegeben

    Schweizer.exe <Eingabe-PGN-Datei> <Ausgabe-PGN-Datei>

Dateinamen, die Leerzeichen enthalten, mssen in doppelte Anfhrungszeichen
gesetzt werden.

Das Programm liest die Namen der Teilnehmer und die Resultate der bereits
gespielten Partien aus der Eingabe-PGN-Datei.

Es schreibt eine PGN-Datei mit der nchsten Runde des Turniers. Sie besteht
aus nicht beendeten Partien [Result "*"] mit den Paarungen.

Wenn ein Teilnehmer ein BYE erhalten hat, muss sich eine Partie wie die
folgende in der Eingabe- bzw. Ausgabedatei befinden. Dies sind die einzigen
Partien mit einem von "*" verschiedenen Resultat in der Ausgabedatei.
    [White "Jemand"]
    [Black "BYE"]
    [Round "1"]
    [Result "1-0"]
    1-0

"BYE" it ein reservierter Name, der nicht fr einen realen Teilnehmer verwendet
werden darf.


2. Programmsteuerung
--------------------

Das Programm erhlt als Kommandozeilenparameter nur die Namen der Eingabe-
und der Ausgabedatei im PGN-Format. Fr Turniere, in denen bereits eine oder
mehrere Runden gespielt wurden, ist eine PGN-Datei mit den Ergebnissen dieser
Runden oft ausreichend als Eingabedatei.

Zur Teilnehmerverwaltung (insbesondere fr die erste Runde) und zur Steuerung
der Optimierung kann der %-Mechanismus, eine wenig bekannte Eingenschaft der 
PGN-Spezifikation, verwendet werden. Das '%'-Zeichen am Zeilenanfang erlaubt
es, eigene Kommandos in die Eingabe-PGN-Datei einzubetten.


2.1 Teilnehmer verwalten
------------------------

2.1.1 Teilnehmer einfgen
-------------------------

Jeder Teilnehmer, der in einer Partie in der Eingabedatei auftaucht, ist dem
Paarungsprogramm bekannt, und er wird einen Gegner bekommen. Das gilt auch fr
nicht beendete Partien.

Es ist also mglich, Partien wie die folgende in die Eingabedatei zu
schreiben, um die Teilnehmer fr die erste Runde festzulegen.
    [White "Neuer Teilnehmer 1"]
    [WhiteElo "1234"]
    [Black "Neuer Teilnehmer 2"]
    [BlackElo "2345"]
    [Result "*"]
    *

Ein eleganterer Weg, die Teilnehmer festzulegen ist das new-Kommando. Die
erste Form ist fr Teilnehmer mit, die zweite fr Teilnehmer ohne eine ELO-
Zahl.
	%new "Neuer Teilnehmer 1" "1234"
	%new "Neuer Teilnehmer 1"

Es ist mglich, nach einigen Runden noch Spteinsteiger ins Turnier
aufzunehmen.


2.1.2 Teilnehmer ersetzen
-------------------------

Insbesondere bei Turnieren zwischen Computerprogrammen kann eine
Programmversion zwischen zwei Runden durch ihren Nachfolger ersetzt werden.
Dazu gibt es das Kommando
	%rename "Alter Name" "Neuer Name"

Damit werden "Alter Name" und "Neuer Name" als synonym betrachtet. In die
Ausgabedatei wird "Neuer Name" geschrieben.

Vor dem %rename-Kommando drfen keine Partien von "Neuer Name" stehen.
Dahinter sind sowohl Partien von "Neuer Name" als auch von "Alter Name"
(in verschiedenen Runden) erlaubt.

Das %rename-Kommando kann auch auf Namen angewendet werden, die noch nicht
als Teilnehmer festgelegt wurden.
	%rename "Alter Name" "Neuer Name"
wirkt dann so, als ob ihm ein
	%new "Alter Name"
vorangestellt wre.


2.1.3 Teilnehmer entfernen
--------------------------

Nach dem Kommando
	%remove "Name"
spielt "Name" nicht mehr im Turnier mit. Die Punkte, die andere Teilnehmer
gegen diesen erzielt haben, werden weiter bei der Berechnung bercksichtigt.


2.1.4 Rckkehrer
----------------

Teilnehmer, die mit dem %remove-Kommando aus dem Turnier entfernt wurden,
knnen mit
    %comeback "Name"
wieder ins Turnier aufgenommen werden.

Das %comeback-Kommando kann auch auf Namen angewendet werden, die noch nicht
als Teilnehmer festgelegt wurden.
	%comeback "Name"
wirkt dann wie
	%new "Name"


2.2 Parametrierung der Optimierung
----------------------------------

In der Eingabe-PGN-Datei knnen auch die Gewichte, fr die bei den Paarungen
zu optimierenden Kriterien verndert werden. Im Folgenden ist fr jedes
Kommando der Standardwert mit angegeben.


%PairRepeated "99999.9"
Bewertung fr zwei Teilnehmer, die bereits einmal gegeneinander gespielt
haben. Dieser Fall ist unbedingt zu vermeiden, der Wert also entsprechend
gro zu whlen.

%Colour "8.0"
Bewertung der Differenz der Anzahl Partien mit schwarz und weiss.

%Colour2 "2.0"
Bewertung fr zwei aufeinander folgende Partien mit derselben Farbe.

%Colour3 "40.0"
Bewertung fr drei oder mehr aufeinander folgende Partien mit derselben Farbe.

%Score "25.0"
Bewertung der Punktdifferenz zweier Spieler.

%ScoreBYE "200.0"
Bewertung der Punkte des Teilnehmers, der ein BYE erhlt.

%Float1 "20.0"
Gegner der vorletzten Runde hatte mehr/weniger Punkte.

%Float2 "60.0"
Gegner der letzten Runde hatte mehr/weniger Punkte.

%Float3 "150.0"
Gegner der vorletzten und der letzten Runde hatte mehr/weniger Punkte.

%Rank "1.0"
Bewertung des Ranges (basierend auf Buchholz- und ELO-Zahl). Es wird
angestrebt, dass alle Teilnehmer aus einer Punktegruppe den gleichen Abstand
voneinander haben.

%ColourRank "0.01"
Der bessere Spieler ist bei der Farbwahl zu bevorzugen.


2.3 Debugging
-------------

Enthlt die Eingabedatei eine Zeile
	%Debug "1"
werden zustzliche Kommentare zur Bewertung der Paarungen durch den
Optimierungsalgorithmus in die Ausgabedatei geschrieben.

Mit 
	%Seed "<Zahl>"
kann ein Startwert fr den von der Optimierung verwendeten Zufallsgenerator
eingestellt werden. Im Allgemeinen sollten die Ergebnisse unabhngig von dem
hier eingestellten Wert identisch oder zumindest sehr hnlich sein, aber
Unterschiede sind mglich. Fr jede von 0 verschiedene Zahl, sind die
Ergebnisse reproduzierbar, d.h. eine Wiederholung des Programmlaufs liefert
garantiert exakt dasselbe Ergebnis.


3. Technisches
--------------

Falls das Programm fehlerfrei gelaufen ist, endet es mit Exit-Code 0. Falls
ein Fehler auftritt, wird eine Fehlermeldung auf stderr geschrieben und
das Programm endet mit Exit-Code 1. 