Sto cercando di calcolare il nostro modo di calcolare il rango. In questo momento prende semplicemente il rapporto di vincite/perdite di ogni singola voce, quindi ad es. uno ha vinto 99 volte su un 100, ha il 99% di vincita. MA se una voce ha vinto 1 su un totale di 1 voti, avrà un punteggio di vincita del 100%, ma sicuramente non può essere più alto di quello che ha vinto 99 volte. Quale sarebbe un modo migliore per farlo?Algoritmo di voto: come calcolare il grado?
risposta
A seconda di come complicato si vuole farlo, gli usi del sistema Elo scacchi (o qualcosa di simile) può essere ciò che si vuole: http://en.wikipedia.org/wiki/Elo_rating_system
Anche se una persona ha vinto 1/1 partite, il suo voto sarebbe molto al di sotto di qualcuno che ha vinto/perso centinaia di partite contro avversari duri, per esempio.
Grazie, ottima risorsa. –
se ho capito bene la domanda, allora chi ottiene più voti ha il rango più alto.
No, vedi il mio commento a dball917 sopra –
potresti anche usare qualcosa del genere per ottenere un punteggio%: punteggio = (vincere/(vincere + perso)) * 100 – infinitloop
È sempre possibile utilizzare un sistema di punti anziché un rapporto di vincita/perdita. Vincere darebbe sempre punti e quindi si potrebbe giocare con la rimozione di punti per perdere, non assegnare punti per la perdita, o assegnare meno punti per perdere. Tutto dipende esattamente da come vuoi che le persone vengano classificate. Ad esempio potresti voler assegnare 2 punti per la vittoria e 1 punto per perdere se vuoi favorire le persone che partecipano a quelli che non lo fanno (il che suona come quello di cui stavi parlando nell'esempio della persona che gioca 100 partite contro 1 gioco). Il NHL utilizza una tecnica simile per le classifiche (2 punti per una vittoria, 1 punto per una perdita di ore straordinarie, 0 punti per una perdita regolare). Questo potrebbe darti una maggiore flessibilità.
In questo modo, le nuove voci migliori non saranno MAI in grado di recuperare quelle più vecchie se utilizziamo i punti. Avranno sempre un ritardo anche se il loro rapporto vittoria/perdita è più alto. –
Sì, come ho detto dipende da cosa vuoi fare. Il post sembrava indicare che voleva favorire le persone con più giochi giocati. – dball917
Sarebbe sensato aggiungere più rango alla voce vincente se la perdita iniziale avesse un rango molto più alto, ad es. concorrente molto più forte?
provare qualcosa di simile:
votes = wins + losses
score = votes * (wins/votes)
In questo modo, qualcosa con il 50% vittorie, ma un milione di voti sarebbero ancora davanti a qualcosa con il 100% vittorie, ma solo di un voto.
È possibile aggiungere in un peso in più in base all'età (in giorni in questo esempio), anche, qualcosa di simile a
if age < 5:
score = score + ((highest real score on site) * ((5 - age)/5)
Questo metterà nuove voci a destra nella parte superiore della prima pagina, e poi si muoveranno lentamente lungo la lista nel corso dei prossimi 5 giorni (suppongo che l'età sia un numero frazionario, non solo un numero intero). Dopo che i 5 giorni sono scaduti, verranno inseriti nell'elenco basato unicamente sul punteggio del precedente bit di pseudo-codice.
Penso che tu meen punteggio = voti * (vittorie/perdite) – assaqqaf
PS l'unica cosa che posso pensare è correggere il rango in base alla "maturità" di una voce (quante volte è stato totale nel concorso). Il rovescio della medaglia questo approccio metterebbe al bando tutte le nuove voci ottenendo i migliori ranghi solo perché non sono nuovi perché non ottengono i voti migliori (fino a che non maturano e il grado non è più aggiustato) –