public async Task <IEnumerable <MatchMadeTeam> > MatchTeams(IEnumerable <string> guardianIds, int teamSize) { var guardians = new List <GuardianSnapshot>(); foreach (var id in guardianIds) { var guardian = await _guardianRepository.GetGuardian(id); var guardianElo = await _guardianEloRepository.GetGuardianElo(id); var guardianEff = _guardianEfficiencyRepository.GetGuardianEfficiency(id); var snapshot = new GuardianSnapshot() { Guardian = guardian, GuardianEfficiency = guardianEff.NewEfficiency, GuardianElo = guardianElo.NewElo }; guardians.Add(snapshot); } var shuffledGuardians = _matchMakingRepository.ShuffleGuardiansList(guardians); var teams = _matchMakingRepository.RandomizeTeams(shuffledGuardians, teamSize); teams = _matchMakingRepository.Anneal(teams); return(teams); }
internal IEnumerable <MatchMadeTeam> SwapTwoPlayers(IEnumerable <MatchMadeTeam> teams, int teamIndex1, int teamIndex2) { var nextConfiguration = new MatchMadeTeam[teams.Count()]; var teamsArray = teams.ToArray(); for (var i = 0; i < teams.Count(); i++) { nextConfiguration[i] = new MatchMadeTeam(); var guardianArray = teamsArray[i].Guardians.ToArray(); var newGuardiansArray = new GuardianSnapshot[guardianArray.Length]; for (var j = 0; j < guardianArray.Length; j++) { newGuardiansArray[j] = guardianArray[j]; } nextConfiguration[i].Guardians = newGuardiansArray; } var guardianIndex1 = _random.Next(0, nextConfiguration[teamIndex1].Guardians.Count()); var guardianIndex2 = _random.Next(0, nextConfiguration[teamIndex2].Guardians.Count()); var team1Guardians = nextConfiguration[teamIndex1].Guardians.ToArray(); var team2Guardians = nextConfiguration[teamIndex2].Guardians.ToArray(); var guardian1 = team1Guardians[guardianIndex1]; team1Guardians[guardianIndex1] = team2Guardians[guardianIndex2]; team2Guardians[guardianIndex2] = guardian1; nextConfiguration[teamIndex1].Guardians = team1Guardians; nextConfiguration[teamIndex2].Guardians = team2Guardians; foreach (var team in nextConfiguration) { var teamElo = 0.0; var teamEff = 0.0; foreach (var guardian in team.Guardians) { teamElo += guardian.GuardianElo; teamEff += guardian.GuardianEfficiency; } teamElo = teamElo / team.Guardians.Count(); teamEff = teamEff / team.Guardians.Count(); team.TeamEfficiency = teamEff; team.TeamElo = teamElo; } return(nextConfiguration.ToList()); }
public async Task <IEnumerable <GuardianSnapshot> > GetGuardians() { var guardians = await _guardianRepository.GetAllGuardians(); var guardianSnapshots = new List <GuardianSnapshot>(); foreach (var guardian in guardians) { var guardianElo = await _guardianEloRepository.GetGuardianElo(guardian.Id); var guardianEff = _guardianEfficiencyRepository.GetGuardianEfficiency(guardian.Id); var guardianSnapshot = new GuardianSnapshot() { Guardian = guardian, GuardianElo = guardianElo?.NewElo ?? 1200, GuardianEfficiency = guardianEff?.NewEfficiency ?? 0.0, }; guardianSnapshots.Add(guardianSnapshot); } return(guardianSnapshots.OrderByDescending(g => g.GuardianElo)); }
internal IEnumerable <MatchMadeTeam> KeepNextConfiguration(IEnumerable <MatchMadeTeam> nextTeamConfiguration) { var newTeamConfiguration = new MatchMadeTeam[nextTeamConfiguration.Count()]; var teamsArray = nextTeamConfiguration.ToArray(); for (var i = 0; i < nextTeamConfiguration.Count(); i++) { newTeamConfiguration[i] = new MatchMadeTeam(); var guardianArray = teamsArray[i].Guardians.ToArray(); var newGuardiansArray = new GuardianSnapshot[guardianArray.Length]; for (var j = 0; j < guardianArray.Length; j++) { newGuardiansArray[j] = guardianArray[j]; } newTeamConfiguration[i].TeamEfficiency = teamsArray[i].TeamEfficiency; newTeamConfiguration[i].TeamElo = teamsArray[i].TeamElo; newTeamConfiguration[i].Guardians = newGuardiansArray; } return(newTeamConfiguration); }