示例#1
0
        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());
        }
示例#3
0
        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);
        }