Search in sources :

Example 1 with GameInfo

use of jskills.GameInfo in project ACManager by kun368.

the class RatingService method flushTrainingUserRating.

// 刷新集训内个人Rating
public void flushTrainingUserRating(Training training) {
    List<Contest> contests = new ArrayList<>();
    for (Stage stage : training.getStageList()) {
        if (!stage.isCountToRating())
            continue;
        for (Contest contest : stage.getContestList()) contests.add(contest);
    }
    deleteRatingDate(RatingRecord.Scope.Training, training.getId(), RatingRecord.Type.Personal);
    GameInfo gameInfo = GameInfo.getDefaultGameInfo();
    List<RatingRecord> list = generateRating(contests, RatingRecord.Scope.Training, training.getId(), RatingRecord.Type.Personal, training.getTauMultiple());
    // logger.info("RatingRecordList:{}", list);
    ratingRecordRepo.save(list);
}
Also used : GameInfo(jskills.GameInfo)

Example 2 with GameInfo

use of jskills.GameInfo in project faf-java-server by FAForever.

the class RatingService method calculateQuality.

public double calculateQuality(Rating left, Rating right) {
    jskills.Rating leftRating = ofNullable(left).map(rating -> new jskills.Rating(left.getMean(), left.getDeviation())).orElse(gameInfo.getDefaultRating());
    jskills.Rating rightRating = ofNullable(left).map(rating -> new jskills.Rating(right.getMean(), right.getDeviation())).orElse(gameInfo.getDefaultRating());
    Collection<ITeam> teams = Arrays.asList(new Team(new Player<>(1), leftRating), new Team(new Player<>(2), rightRating));
    return TrueSkillCalculator.calculateMatchQuality(gameInfo, teams);
}
Also used : Player(jskills.Player) Arrays(java.util.Arrays) ProgrammingError(com.faforever.server.error.ProgrammingError) Getter(lombok.Getter) TrueSkillCalculator(jskills.TrueSkillCalculator) HashMap(java.util.HashMap) Function(java.util.function.Function) ArrayList(java.util.ArrayList) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Service(org.springframework.stereotype.Service) Map(java.util.Map) ServerProperties(com.faforever.server.config.ServerProperties) IPlayer(jskills.IPlayer) Rating(com.faforever.server.entity.Rating) GameInfo(jskills.GameInfo) Team(jskills.Team) Optional.ofNullable(java.util.Optional.ofNullable) Collection(java.util.Collection) Collectors(java.util.stream.Collectors) Ladder1v1Rating(com.faforever.server.entity.Ladder1v1Rating) Slf4j(lombok.extern.slf4j.Slf4j) List(java.util.List) GlobalRating(com.faforever.server.entity.GlobalRating) Entry(java.util.Map.Entry) GamePlayerStats(com.faforever.server.entity.GamePlayerStats) AllArgsConstructor(lombok.AllArgsConstructor) Comparator(java.util.Comparator) ITeam(jskills.ITeam) Assert(org.springframework.util.Assert) Player(jskills.Player) IPlayer(jskills.IPlayer) Rating(com.faforever.server.entity.Rating) Ladder1v1Rating(com.faforever.server.entity.Ladder1v1Rating) GlobalRating(com.faforever.server.entity.GlobalRating) ITeam(jskills.ITeam) Team(jskills.Team) ITeam(jskills.ITeam)

Example 3 with GameInfo

use of jskills.GameInfo in project faf-java-server by FAForever.

the class RatingService method updateRatings.

/**
 * Updates the ratings of all players in {@code playerStats} as well as their global/ladder1v1 rating,
 * according to the outcome of the game <strong> without persisting the results</strong>.
 *
 * @param noTeamId ID of the "no team" team
 */
@SuppressWarnings("unchecked")
public void updateRatings(Collection<GamePlayerStats> playerStats, int noTeamId, RatingType ratingType) {
    Map<Integer, GamePlayerStats> playerStatsByPlayerId = playerStats.stream().collect(Collectors.toMap(stats -> stats.getPlayer().getId(), Function.identity()));
    Map<Integer, ScoredTeam> teamsById = teamsById(playerStats, noTeamId);
    List<ScoredTeam> teamsSortedByScore = new ArrayList<>(teamsById.values());
    teamsSortedByScore.sort(Comparator.comparingInt(o -> ((ScoredTeam) o).getScore().intValue()).reversed());
    int[] teamRanks = calculateTeamRanks(teamsSortedByScore);
    // New ArrayList is needed because the JSkill API doesn't handle subclass type parameters
    TrueSkillCalculator.calculateNewRatings(gameInfo, new ArrayList<>(teamsSortedByScore), teamRanks).entrySet().forEach(entry -> {
        Player<Integer> player = (Player<Integer>) entry.getKey();
        GamePlayerStats stats = playerStatsByPlayerId.get(player.getId());
        updatePlayerStats(entry, stats);
        updateRating(ratingType, stats);
    });
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Player(jskills.Player) Arrays(java.util.Arrays) ProgrammingError(com.faforever.server.error.ProgrammingError) Getter(lombok.Getter) TrueSkillCalculator(jskills.TrueSkillCalculator) HashMap(java.util.HashMap) Function(java.util.function.Function) ArrayList(java.util.ArrayList) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Service(org.springframework.stereotype.Service) Map(java.util.Map) ServerProperties(com.faforever.server.config.ServerProperties) IPlayer(jskills.IPlayer) Rating(com.faforever.server.entity.Rating) GameInfo(jskills.GameInfo) Team(jskills.Team) Optional.ofNullable(java.util.Optional.ofNullable) Collection(java.util.Collection) Collectors(java.util.stream.Collectors) Ladder1v1Rating(com.faforever.server.entity.Ladder1v1Rating) Slf4j(lombok.extern.slf4j.Slf4j) List(java.util.List) GlobalRating(com.faforever.server.entity.GlobalRating) Entry(java.util.Map.Entry) GamePlayerStats(com.faforever.server.entity.GamePlayerStats) AllArgsConstructor(lombok.AllArgsConstructor) Comparator(java.util.Comparator) ITeam(jskills.ITeam) Assert(org.springframework.util.Assert) Player(jskills.Player) IPlayer(jskills.IPlayer) GamePlayerStats(com.faforever.server.entity.GamePlayerStats) ArrayList(java.util.ArrayList)

Aggregations

GameInfo (jskills.GameInfo)3 ServerProperties (com.faforever.server.config.ServerProperties)2 GamePlayerStats (com.faforever.server.entity.GamePlayerStats)2 GlobalRating (com.faforever.server.entity.GlobalRating)2 Ladder1v1Rating (com.faforever.server.entity.Ladder1v1Rating)2 Rating (com.faforever.server.entity.Rating)2 ProgrammingError (com.faforever.server.error.ProgrammingError)2 ArrayList (java.util.ArrayList)2 Arrays (java.util.Arrays)2 Collection (java.util.Collection)2 Comparator (java.util.Comparator)2 HashMap (java.util.HashMap)2 List (java.util.List)2 Map (java.util.Map)2 Entry (java.util.Map.Entry)2 Optional.ofNullable (java.util.Optional.ofNullable)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 Function (java.util.function.Function)2 Collectors (java.util.stream.Collectors)2 IPlayer (jskills.IPlayer)2