function loadRatings() { $stats = file_get_contents('games.stats'); $stats = explode("\n", $stats); $ratings = array(); foreach ($stats as $stat) { if (empty($stat)) { continue; } $stat = explode("\t", $stat); $playerId = (int) $stat[0]; $mean = (double) $stat[1]; $stddev = (double) $stat[2]; $ratings[$playerId] = new Rating($mean, $stddev); } $gameInfo = new GameInfo(); $players = loadPlayers(); foreach ($players as $playerId => $playerName) { if (!isset($ratings[$playerId])) { $ratings[$playerId] = $gameInfo->getDefaultRating(); } } return $ratings; }
private static function oneOnTwoBalancedPartialPlay($testClass, SkillCalculator $calculator) { $gameInfo = new GameInfo(); $p1 = new Player(1); $team1 = new Team($p1, $gameInfo->getDefaultRating()); $p2 = new Player(2, 0.0); $p3 = new Player(3, 1.0); $team2 = new Team(); $team2->addPlayer($p2, $gameInfo->getDefaultRating()); $team2->addPlayer($p3, $gameInfo->getDefaultRating()); $teams = Teams::concat($team1, $team2); $newRatings = $calculator->calculateNewRatings($gameInfo, $teams, array(1, 2)); $p1NewRating = $newRatings->getRating($p1); $p2NewRating = $newRatings->getRating($p2); $p3NewRating = $newRatings->getRating($p3); // This should be roughly the same as a 1 v 1 self::assertRating($testClass, 29.39648040436841, 7.1713980703143205, $p1NewRating); self::assertRating($testClass, 24.999560351959563, 8.333749978770932, $p2NewRating); self::assertRating($testClass, 20.603519595631585, 7.1713980703143205, $p3NewRating); $matchQuality = $calculator->calculateMatchQuality($gameInfo, $teams); self::assertMatchQuality($testClass, 0.44721358745011336, $matchQuality); }