2010-01-22 15 views
6

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?

+0

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) –

risposta

5

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.

+0

Grazie, ottima risorsa. –

0

se ho capito bene la domanda, allora chi ottiene più voti ha il rango più alto.

+0

No, vedi il mio commento a dball917 sopra –

+0

potresti anche usare qualcosa del genere per ottenere un punteggio%: punteggio = (vincere/(vincere + perso)) * 100 – infinitloop

1

È 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à.

+1

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. –

+0

Sì, come ho detto dipende da cosa vuoi fare. Il post sembrava indicare che voleva favorire le persone con più giochi giocati. – dball917

0

Sarebbe sensato aggiungere più rango alla voce vincente se la perdita iniziale avesse un rango molto più alto, ad es. concorrente molto più forte?

6

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.

+1

Penso che tu meen punteggio = voti * (vittorie/perdite) – assaqqaf

Problemi correlati