2009-06-15 17 views
9

To pytanie jest bardziej związane z logiką niż jakikolwiek inny język programowania. Jeśli pytanie nie pasuje do forum, proszę dać mi znać, a ja to usuniemy.Jak obliczyć wyniki?

Muszę napisać logikę, aby obliczyć wyniki dla blogów na stronie internetowej Blog Award. Blog może być nominowany do wielu kategorii nagród i jest recenzowany lub oceniany przez Jury w skali od 1 do 5 (-1, aby wskazać blog, którego zupełnie nie lubią). Teraz blog może być oceniany przez jednego lub więcej Jurorów. Jednym z kryteriów przy obliczaniu ostatecznego wyniku na blogu jest to, że jeśli blog jest pozytywnie oceniany przez większą liczbę osób, powinien uzyskać większą wagę (i odwrotnie). Podobnie blog o wartości -1 nawet jednego Jurora powinien mieć wpływ na wynik (-1 to rodzaj Veto tutaj). Na koniec chcę również uzyskać dodatkowy wynik oparty na rankingu Technorati bloga (tak, aby ostateczny wynik był oparty na rankingu Juror + ranking Technorati).

Przykład: blog jest oceniany w kategorii A łącznie 6 jurorów. 2 oceń go na 3, 3 oceń na 2 i 1 oceń na 4 (użyłem do obliczenia wyniku jako (2 * 3 + 3 * 2 + 1 * 4)/6 = 16/6 = 2,67 dla uzyskania ważonego średnio, ale nie jestem z tego zadowolony, przede wszystkim dlatego, że nie działa dobrze, gdy ocena Jurora wynosi -1, a ponadto muszę dodać kryteria rankingu rankingu Technorati).

Czy możesz mi pomóc wybrać najlepszą metodę obliczania ostatecznych wyników (zachowując metodę oceny jak wyżej, której nie można teraz zmienić)?

+0

To pytanie wydaje się być w porządku dla SO. Pytasz o "najlepszy" algorytm do przypisywania wyników. – paxdiablo

+1

Interesujące pytanie, +1 – Mattis

+0

dlaczego nie po prostu użyłbyś 'if (wyniki obejmują -1) {usuń z konkurencji}' przed oceną? Mniej więcej to, co oznacza weto, prawda? – naught101

Odpowiedz

0

możesz wewnętrznie pracować z ocenami od 0 do 6. Po prostu wykonaj przesunięcie o jeden, obliczyć wynik i cofnąć. Sądzę, że -1 ma jakiś zakłócający efekt na twoich obliczeniach.

5

Jeśli chcesz w większym stopniu obciążyć mocą -1, użyj tego samego obliczenia średniej wartości, ale zastępuj -10, gdy zobaczysz -1. Możesz wybrać wartość inną niż -10, jeśli nie chcesz, aby ocena negatywna miała taką samą wagę.

+0

Dzięki Greg.Co sugerujesz w rankingu Technorati? Czy jesteś zadowolony ze sposobu obliczania średniej ważonej? – dchucks

+0

Nie określono, co to jest ranking Technorati. Czy jest to również wartość między -1 a 5? A może to coś innego? Jak mocno chcesz go waga w porównaniu z rankingami swoich jurorów? Są to pytania, na które należy odpowiedzieć, aby określić sposób korzystania z tego rankingu. –

+0

Greg, ranking Technorati to wynik przyznany przez Technorati.com stronie internetowej na podstawie różnych czynników, takich jak ruch, Linkback itp. Obniżyć wartość rangi, lepiej jest strona. Tak więc strona z rankingiem Technorati 3000 jest lepsza od tej z rankingiem 40000. – dchucks

4

Obliczanie wyniku na podstawie głosów będzie dość łatwe. Dodanie pozycji technorati będzie trudną częścią.

Zrobiłem krótki skrypt, który oblicza pewne wyniki w oparciu o ten algorytm

score = (vote_sum - (vetos * veto_weight))/number_of_votes 

można dokonywać zmian w paramters URL, aby uzyskać różne wartości

Istnieje wiele powiązań, więc może można użyć Technorati ranking blogu jako wyłącznika remisu

+0

Dzięki Galen za demonstrację za pomocą skryptu. – dchucks

+0

+1 za ładny scenariusz :) – Mattis

4

Możesz sprawdzić, czy dla swoich ocen używasz dolnej granicy interwału Wilsona.

Aby uzyskać więcej informacji, patrz http://www.evanmiller.org/how-not-to-sort-by-average-rating.html. Chociaż jest używany w prostszym przypadku Bernoulliego.

Istotą jest to, że jeśli masz dużo ocen, masz większe zaufanie do swojej punktacji. Następnie można połączyć wyniki z lokalnych ocen i ocen Technorati, ważąc wyniki według liczby wyborców lokalnie i na Technorati.

Jeśli chcesz, aby pojedynczy głos 1 miał duży wpływ, zmień go na dużą, ujemną wartość proporcjonalną do pożądanego wpływu, zanim wprowadzisz go do swojej formuły punktowania.