Erstellen einer Rangliste

Hallo www-community

Ich habe wieder einmal ein Problem, mit dem ich mich an euch wenden möchte.

Kleine Vorgeschichte dazu:

Ein paar Freunde und ich treffen uns regelmäßig zum Kartenspielen in kleinerem Kreis. Wir sind alle seit einigen Jahren begeisterte Trading-Card-Spieler. Da es in unserer Umgebung leider keine größeren Veranstaltungen dazu gibt und auf dauer unsere finanziellen Mittel nicht ausreichen um größere Turniere o.ä. zu Besuchen (und damit auf internationalen Ranglisten ect. Vertreten zu sein) haben wir beschlossen, unsere eigenen kleineren Turniere im Freundeskreis (meistens so um die 12-15 Teilnehmer) zu veranstalten. Da K-O Runden Turniere auf dauer langweilig werden (und eigentlich nur bei 8 oder 16 Spielern sinnvoll sind), gingen wir schnell dazu über in einem Runden-System zu spielen (wie auch an richtigen Turnieren).
Nun wurden also Rundenpaarungen ausgelost usw… Abgesehen davon, dass es zu mehrfachpaarungen kam, hatten wir am Ende unserer „Vorrunden“ oftmals das Problem, dass nach 4 Vorrunden mit anschlißenden Top 4 (die besten Vier der Vorrunde, gewertet nach Siegen) 1 Spieler 4 Siege (4:0) einer 3 und dann 3 oder mehr 2 Siege hatten. Man musste also via Los entscheiden wer von den 3en nicht in die Top 4 durfte.
Da uns das mit der Zeit nervte, einfach weil es nicht Sinn der Vorrunden war, danach losen zu müssen, und das Problem auch bei erhöter Rundenzahl auftrat, kamen wir zu dem Entschluss, eine Rangliste, oder besser gesagt eine Punkteliste zu erstellen, die sich nach jedem Spiel ändert um dann z.B. herauszufinden wer von den 3en im Turnier laut Punkteliste gegen die stärkeren Gegner gespielt hat.

Unsere Ansätze was die Punkteliste betrifft, waren folgende (bzw. wurden zum Teil von uns bekannten Systemen übernommen)

  • Jeder Spieler hat zu Beginn eine feste Startpunktezahl (z.B. 100)
  • für einen Sieg sollte es grundsätzlich 10 Punkte geben, für eine Niederlage werden 5 Punkte abgezogen

Gewinnt Quasi Spieler A gegen Spieler B hätte Spieler A jetzt eine Punktzahl von 110 und B 95

Soweit war unsere überlegung noch ganz einfach.

Das schwierigere ist jedoch, dass es in unseren Reihen bessere und schlechtere Spieler gibt.

Der Sieg eines Besseren über einen Schlechteren (z.B. Spieler B hat nach 3 Wochen noch 5 Punkte, Spieler A hingegen 200)soll anderes gewertet werden, als ein Sieg über einen gleichstarken Gegner, bzw. der Sieg eines Schwächeren Gegners über einen Stärkeren (wenn zum Beispiel Spieler B durch in einer „Erleuchtung“ einen Sieg über den viel höher eingestuften Spieler A erringen kann)

Unser Ansatz für dieses Problem war bisher, dass man zuerst den Betrag der Differenz der Punktzahlen beider Spieler vor dem Spiel bildet. Dabei bedeutet niedriger Betrag zwei gute Spieler spielen gegeneinander, während hoher Betrag aussagt, dass einer der beiden Spieler niedriger eingestuft ist.

Unsere weiteren Forderungen waren nun:

  • der Sieg eines GUTEN Spielers über einen HÖHER EINGESTUFTEN Gegner (kleiner Betrag) sollte mehr Punkte bringen als der über einen niedriger Eingestuften Gegner

  • der Sieg eines SCHWÄCHEREN Spielers über einen HÖHER EINGESTUFTEN Gegner (großer Betrag) sollte mehr Punkte geben als der Sieg über einen gleichschwachen Gegner (niedriger Betrag)

Gleichzeitig sollte der Verlierer neben den bereits oben genannten 5 Punkten noch weitere Punkte verlieren und zwar in folgendem Verhältnis

  • Verliert ein STARKER Spieler gegen einen ähnlich starken (geringer Betrag), so soll er weniger Punkte verlieren, als wenn er gegen einen SCHWÄCHEREN Spieler verliert (hoher Betrag)

  • Verliert wiederum ein SCHWÄCHERER Spieler gegen einen STARKEN (hoher Betrag), so soll er weniger Punkte verlieren, als wenn er gegen einen ÄHNLICH STARKEN Gegner verliert (niedriger Betrag)

Wir haben zunächst mit Geradengleichungen experimentiert, da es so relativ einfach war, den „Höchstzugewinn“ an Punkten einzuschränken.
Dies klappt für die erste von uns aufgestellte Bedingung (mehr Punkte für guten Spieler bei Sieg über Guten) eigentlich ganz gut mit folgender Gleichung:

E=As+10+(100/[A1-A2])*const

E ist dabei die Endpunktzahl

10 Punkte für den Sieg

As ist die Anfangspunktezahl des Spielers der gesiegt hat

[A1-A2] ist der Betrag der Anfangspunktzahlen

100/Betrag ergibt sich daraus, dass so erreicht wird, dass sich bei Geringerem Betrag ein höherer Wert ergibt, was ja von der Bedingung
gefordert wird.

Die Konstante am Ende ist dazu da, um eine maximale Punktzahl zu definieren (z.B. 0,1)
Der Sonderfall A1=A2 sei dabei außen Vorgelassen.

Allerdings haben wir nun keine Ahnung, wie wir (mit unserem begrenztem mathematischen Wissen) die anderen Forderungen in diese Formel noch miteinbringen sollen, bzw. welche anderen Ansätze/Formeln es noch gäbe.

Ich hoffe auf eure Mithilfe bei unserem Problem

LG
Sym

moin moin…

ich fasse mal zusammen; war zwar etwas aufwendig sich da durchzuwühlen aber nunja… demnächst vielleicht weniger zur Geschichte sondern eher die Anforderungen an die gesuchte Funktion…

gebrauchte Variablen: As: neue Punktzahl
A1,A2: Punktzahlen der Kontrahenten

Bedingungen:
bei SIEG des Spielers:
A1 As-A1->z.B. 7, falls A1 groß genug ist
A1 As-A1->10 , falls A1 niedriger ist.
bei NIEDERLAGE des Spielers:
A1~A2 => As-A1->z.b. -5
A1>A2 => As-A1->-10

Die Differenz zu bilden ist eigentlich keine schlechte Idee, allerdings wäre zu überlegen, ob man die Beträge nicht vorher potenzieren sollte, um die Differenzen stärker zum Tragen zu bringen.
Da die beiden Gleichungen bei den verschiedenen Bedingungen überein zu bringen, bietet es sich an, zwei Funktionen zu bilden, wo gilt:

Gewinnfunktion: 20>g(x)>0 für alle x
Niederlagefunktion: -201,5((A1-A2)²) , falls A1>A2+20
1/(A1-A2)² , sonst.
sowie
n(x):=-ln((A1-A2)²) , falls A1>A2+20
-1/(A1-A2)² , sonst.
wobei g(x) und n(x) den Punktegewinn bezeichnen.

Hoffe das ist ungefähr nach deiner Vorstellung, ansonsten können sich ja andere die formulierten Bedingungen ansehen, vielleicht kommen sie auf schönere Funktionen :smile:

mfG