Example #1
0
def _update_ratings():
    calc = RatingCalculator()
    START_RATING = cur_config().rating_start
    players = {}
    match_ids = list(set(PlayerResult.objects.filter(rating=None).values_list('match_id', flat=True)))
    for match in Match.objects.filter(id__in=match_ids).order_by('date', 'id'):
        player_positions = match.get_positions()
        rating_results = []
        for p in player_positions:
            # Fetch the current rating value
            #if not players.get(p['id'], False):
                rated_results = PlayerResult.objects.filter(player=p['id']).exclude(rating=None).order_by('-match__date', '-match__id')
                if not rated_results.exists():
                    rating = START_RATING
                else:
                    rating = rated_results[0].rating
            #else:
            #    rating = players[p['id']]
                rating_results.append(RatingResult(p['id'], rating, p['position']))
        # Calculate new ratings
        new_player_ratings = calc.new_ratings(rating_results)
        # Update
        for p in new_player_ratings:
            players[p.dbid] = p.rating
            PlayerResult.objects.filter(player=p.dbid).filter(match=match).update(rating=p.rating)
Example #2
0
def _update_ratings():
    calc = RatingCalculator()
    START_RATING = cur_config().rating_start
    players = {}
    match_ids = list(
        set(
            PlayerResult.objects.filter(rating=None).values_list('match_id',
                                                                 flat=True)))
    for match in Match.objects.filter(id__in=match_ids).order_by('date', 'id'):
        player_positions = match.get_positions()
        rating_results = []
        for p in player_positions:
            # Fetch the current rating value
            rated_results = PlayerResult.objects.filter(
                player=p['id']).exclude(rating=None).order_by(
                    '-match__date', '-match__id')
            if not rated_results.exists():
                rating = START_RATING
            else:
                rating = rated_results[0].rating
            rating_results.append(RatingResult(p['id'], rating, p['position']))
        # Calculate new ratings
        new_player_ratings = calc.new_ratings(rating_results)
        # Update
        for p in new_player_ratings:
            players[p.dbid] = p.rating
            PlayerResult.objects.filter(player=p.dbid).filter(
                match=match).update(rating=p.rating)
Example #3
0
 def setUp(self):
     self.calc = RatingCalculator()
Example #4
0
class TestRatingCalculator(unittest.TestCase):
    # NOTE: Tests will fail, currently only used to check differences. Assertequals not updated.

    def setUp(self):
        self.calc = RatingCalculator()

    def testWin5players(self):
        results = [
            RatingResult("Andriod", Decimal('100.0'), 1),
            RatingResult("Tine", Decimal('100.0'), 2),
            RatingResult("Ole", Decimal('100.0'), 3),
            RatingResult("Johnny", Decimal('100.0'), 4),
            RatingResult("Stian", Decimal('100.0'), 5)
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 104.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 101.5)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)
            elif p_rating.dbid == "Johnny":
                self.assertEqual(p_rating.rating, 95.5)
            elif p_rating.dbid == "Stian":
                self.assertEqual(p_rating.rating, 95.5)

    def testWin4players(self):
        results = [
            RatingResult("Andriod", Decimal('100.0'), 1),
            RatingResult("Tine", Decimal('100.0'), 2),
            RatingResult("Ole", Decimal('100.0'), 3),
            RatingResult("Johnny", Decimal('100.0'), 4)
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 104.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 101.5)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)
            elif p_rating.dbid == "Johnny":
                self.assertEqual(p_rating.rating, 95.5)

    def testWin3players(self):
        results = [
            RatingResult("Andriod", Decimal('100.0'), 1),
            RatingResult("Tine", Decimal('100.0'), 2),
            RatingResult("Ole", Decimal('100.0'), 3)
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 104.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 101.5)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)

    def testWin3players2(self):
        results = [
            RatingResult("Andriod", Decimal('200.0'), 1),
            RatingResult("Tine", Decimal('100.0'), 2),
            RatingResult("Ole", Decimal('100.0'), 3)
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 104.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 101.5)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)

    def testDraw(self):
        results = [
            RatingResult("Andriod", Decimal('100.0'), 4),
            RatingResult("Tine", Decimal('100.0'), 2),
            RatingResult("Ole", Decimal('100.0'), 2),
            RatingResult("Johnny", Decimal('100.0'), 1)
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 95.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 100.0)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 100.0)
            elif p_rating.dbid == "Johnny":
                self.assertEqual(p_rating.rating, 104.5)

    def testDraw2(self):
        results = [
            RatingResult("Andriod", Decimal('100.0'), 1),
            RatingResult("Tine", Decimal('100.0'), 1),
            RatingResult("Ole", Decimal('100.0'), 3),
            RatingResult("Johnny", Decimal('100.0'), 4)
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 103.0)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 103.0)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)
            elif p_rating.dbid == "Johnny":
                self.assertEqual(p_rating.rating, 95.5)
Example #5
0
 def setUp(self):
     self.calc = RatingCalculator()
Example #6
0
class TestRatingCalculator(unittest.TestCase):
    # NOTE: Tests will fail, currently only used to check differences. Assertequals not updated.

    def setUp(self):
        self.calc = RatingCalculator()

    def testWin5players(self):
        results = [
            RatingResult("Andriod", Decimal("100.0"), 1),
            RatingResult("Tine", Decimal("100.0"), 2),
            RatingResult("Ole", Decimal("100.0"), 3),
            RatingResult("Johnny", Decimal("100.0"), 4),
            RatingResult("Stian", Decimal("100.0"), 5),
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 104.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 101.5)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)
            elif p_rating.dbid == "Johnny":
                self.assertEqual(p_rating.rating, 95.5)
            elif p_rating.dbid == "Stian":
                self.assertEqual(p_rating.rating, 95.5)

    def testWin4players(self):
        results = [
            RatingResult("Andriod", Decimal("100.0"), 1),
            RatingResult("Tine", Decimal("100.0"), 2),
            RatingResult("Ole", Decimal("100.0"), 3),
            RatingResult("Johnny", Decimal("100.0"), 4),
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 104.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 101.5)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)
            elif p_rating.dbid == "Johnny":
                self.assertEqual(p_rating.rating, 95.5)

    def testWin3players(self):
        results = [
            RatingResult("Andriod", Decimal("100.0"), 1),
            RatingResult("Tine", Decimal("100.0"), 2),
            RatingResult("Ole", Decimal("100.0"), 3),
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 104.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 101.5)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)

    def testWin3players2(self):
        results = [
            RatingResult("Andriod", Decimal("200.0"), 1),
            RatingResult("Tine", Decimal("100.0"), 2),
            RatingResult("Ole", Decimal("100.0"), 3),
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 104.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 101.5)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)

    def testDraw(self):
        results = [
            RatingResult("Andriod", Decimal("100.0"), 4),
            RatingResult("Tine", Decimal("100.0"), 2),
            RatingResult("Ole", Decimal("100.0"), 2),
            RatingResult("Johnny", Decimal("100.0"), 1),
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 95.5)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 100.0)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 100.0)
            elif p_rating.dbid == "Johnny":
                self.assertEqual(p_rating.rating, 104.5)

    def testDraw2(self):
        results = [
            RatingResult("Andriod", Decimal("100.0"), 1),
            RatingResult("Tine", Decimal("100.0"), 1),
            RatingResult("Ole", Decimal("100.0"), 3),
            RatingResult("Johnny", Decimal("100.0"), 4),
        ]
        new_player_ratings = self.calc.new_ratings(results)
        for p_rating in new_player_ratings:
            if p_rating.dbid == "Andriod":
                self.assertEqual(p_rating.rating, 103.0)
            elif p_rating.dbid == "Tine":
                self.assertEqual(p_rating.rating, 103.0)
            elif p_rating.dbid == "Ole":
                self.assertEqual(p_rating.rating, 98.5)
            elif p_rating.dbid == "Johnny":
                self.assertEqual(p_rating.rating, 95.5)