Scoring bei 1:1-Spielen
flashnfantasy
- programmiertechnik
Hi
folgendes generelles Problem:
Ich habe eine Website entwickelt, bei der zwei Spieler gegeneinander in kleineren Spielen antreten (4gewinnt, Reversi, etc.).
Es kann jeder gegen jeden Spielen (es gibt lediglich Beschränkungen, was die offenen Spiele angeht).
Klappt alles soweit ganz gut bis auf die globale Rangfolge.
Da will ich ein System habem, was mir die globalen Plätze ermittelt.
Wichtig dabei ist, daß der Zeitpunkt des Spiel-Endes eine Rolle spielt, so, daß Leute, die inaktiv sind, ihre Position langsam aber sicher verlieren.
Oder anders ausgedrückt folgender Fall:
A schlägt B (Tag 0)
B schlägt C (ein Tag später)
C schlägt A (noch ein Tag später)
jetzt wäre das normalerweise ein Zyklus, und alle drei Spieler theoretisch gleich stark, wegen der Zeitfolge ist jetzt aber der Rang:
C,B,A
Alle bisherigen Formeln haben zwar irgendeine Rangfolge ausgeschmissen, aber ich will mich nun mal fundamentiert mit dieser Theorie auseinandersetzten.
Kennt einer ähnliche Probleme (zB Weltrangliste beim Tennis ?) und wie das ermittelt wird ?
Gruß, Flash
yo,
Kennt einer ähnliche Probleme (zB Weltrangliste beim Tennis ?) und wie das ermittelt wird ?
mit der tennisrangliste kenne ich mich leider nicht aus. aber ich würde es an deinen eigenen bedürfnissen anpassen und nicht so sehr daran anlegen, wie andere das machen. wobei mir ein paar ansätze als wichtig erscheien.
a) eine zeitraum für ergebnisse festlegen, die zu sehr in der vergangenheit liegen und somit keine rolle für die aktuelle liste mehr spielen. dies wäre zum beispiel beim fussball, die aktuelle saison, da nur die noch eine rolle spielt. all all_star tabelle könnte diese beschränkung wieder rausnehmen.
b) ob es eine rolle spielt, wer gegen wen gewonnen hat oder das system nur auf punkten basiert, wie zum beispiel bei der fussball tabelle. dort spielt ein vergleich nur bei punkt und torgleichheit eine rolle.
c) ob es für spiele, die näher an der gegenwart liegen eine höhrere bewertung gibt, als ältere spiele oder ob alle die gleiche mächtigkeit der bewertung bekommen.
Ilja
Sup!
Ich nehme an, dass bei allen Ranglisten einfach Ergebnisse, die älter als X sind, nicht mehr gewertet werden oder geringer gewichtet werden.
Eine Rangliste zu berechnen ist natürlich im Prinzip sowieso nur dann möglich, wenn Du Partien "anordnen" kannst, also sagen: Jetzt muss A gegen B spielen.
Sonst kannst Du nur die Zahl der Siege o.ä. zählen, und dann ist die Rangliste sehr leicht zu manipulieren, indem man gegen Dummy-Gegner spielt.
Gruesse,
Bio
Ich nehme an, dass bei allen Ranglisten einfach Ergebnisse, die älter als X sind, nicht mehr gewertet werden oder geringer gewichtet werden.
Wie im Tennis, Ergebnisse, die bspw. älter als 10 Monate alt sind zählen nicht mehr.
Eine Rangliste zu berechnen ist natürlich im Prinzip sowieso nur dann möglich, wenn Du Partien "anordnen" kannst, also sagen: Jetzt muss A gegen B spielen.
Nö, jeder Spieler kann neben dem Ranglistenplatz eine Rating zugewiesen bekommen.
Sonst kannst Du nur die Zahl der Siege o.ä. zählen, und dann ist die Rangliste sehr leicht zu manipulieren, indem man gegen Dummy-Gegner spielt.
Richtig, darum das Primärattribut "Rating".
Sup!
Und wie willst Du dieses "Rating" errechnen?
Gruesse,
Bio
Und wie willst Du dieses "Rating" errechnen?
An Hand einer Formel. :)
Es gibt bspw. im Schach ein Rating-System, das ist für 2 Mann-Spiele global geeignet.
Zur Verdeutlichung: Ich habe Rating 2500, Du 2300, mit der Formel
E=(Ratingdifferenz)/8 + 50
kann der prozentuale Erwartungswert des Rating-Höheren bestimmt werden, in diesem Fall müsste ich also 75% holen um meine Rating zu halten.
Eine weitere Formel bestimmt dann die Ratingänderung, Anmerkung: o.g. Formel ist appropinquativ dargestellt.
Hallo,
In Wiki (http://de.wikipedia.org/wiki/Tennis-Weltrangliste) ist ziemlich detailiert beschrieben, wie die Tennis-Weltranglisten (Entry-List und Champions-Race) errechnet werden. Für Dich interessanter dürfte die Entry-List sein, das ist diejenige, welche immer die Resultate der letzten 52 Wochen beinhaltet. Das Champions-Race beginnt einfach jedes Jahr wieder bei Null, also wie beim Fussball, zum neuen Saisonbeginn.
Der Algorithmus der Entry-List scheint mir allerdings für Dich auch ungeeignet, da da nicht alle Turniere gleichwertig bepunktet werden und es dann nicht nur auf Turniersieg oder eben nicht ankommt. Wie meine Vorschreiber würde ich Dir etwas in der Art empfehlen:
Ranglistenpunkte = Aktuelles Spiel * 1 + vorhergehendes Spiel * 0.9 + ...
Du müsstes Dir dann noch überlegen, ob die Gewichtung kontinuierlich abnimmt und damit nur eine bestimmte Anzahl Spiele für die Wertung relevant sind, oder ob Du die Spiele, welche weit zurückliegen z.B. konstant gewichten willst. Beides hat vor und Nachteile, falls der Wert konstant abnimmt und dadurch nur eine gewisse Anzahl Spiele zur Berechnung beigezogen werden, kann es sein, dass ein Spieler die Rangliste anführt, der längst nicht mehr aktiv ist (eine Art 'Ewige Bestenliste'). Falls ab einem gewissen Zeitpunkt die Gewichtung konstant ist, kann die Rangliste durch x-faches spielen manipuliert werden.
Eine weitere Möglichkeit, und die käme der Entry-List wieder näher, wäre die Gewichtung der Spiele nach der vergangenen Zeit seit dem Spiel anstatt nach der Anzahl danach gespielter Spiele vorzunehmen.
Gruss
gant