Пример #1
0
        private static int AverageOtherTeamPopulationCount(string excludedTeam)
        {
            int total = 0;
            int count = 0;

            foreach (string teamName in teamNameToGeneDataDic.Keys)
            {
                if (CommonHelperMethods.StringsAreEqual(teamName, excludedTeam))
                {
                    continue;
                }

                total += TeamManager.GetTeamPopulationCount(teamName);
                ++count;
            }

            // Will throw if count == 0
            return(total / count);
        }
Пример #2
0
        private static void AddSurvivorsToGenePool()
        {
            int minWinCount = 1;

            foreach (KeyValuePair <string, GeneData> keyValuePair in teamNameToGeneDataDic)
            {
                string   teamName = keyValuePair.Key;
                GeneData geneData = keyValuePair.Value;

                int teamPopCount = TeamManager.GetTeamPopulationCount(teamName);
                int winCount     = 1 + teamPopCount - AverageTeamPopulationCount();

                if (winCount < minWinCount)
                {
                    // Losers don't get laid
                    continue;
                }
                else
                {
                    minWinCount++;
                }

                // Have to place a cap on number of files, otherwise this would flood the machine
                if (FileIOManager.GetFileNames().Count < GenePoolDirectoryFileLimit)
                {
                    LogUtility.LogInfoFormat(
                        "{0} writes DNA to disk",
                        teamName);

                    geneData.DNA.PossiblyMutateAndWriteToDisk(FileIOManager.GenerateNewDNAFilePath(winCount));
                }
                else
                {
                    LogUtility.LogInfoFormat(
                        "Gene Pool has reached max size of {0} files",
                        GenePoolDirectoryFileLimit);
                }
            }
        }
Пример #3
0
        private static void UpdateGenePoolFilesUponExtinction()
        {
            Dictionary <string, int> fileNameToModificationDic = new Dictionary <string, int> ();

            // Tabulate the new win loss info for the parent files
            foreach (KeyValuePair <string, GeneData> keyValuePair in teamNameToGeneDataDic)
            {
                string teamName       = keyValuePair.Key;
                string parentFileName = keyValuePair.Value.ParentDNAFilePath;

                int teamPopCount = TeamManager.GetTeamPopulationCount(teamName);
                int modification = teamPopCount - AverageTeamPopulationCount();

                if (fileNameToModificationDic.ContainsKey(parentFileName))
                {
                    // Update
                    fileNameToModificationDic[parentFileName] += modification;
                }
                else
                {
                    // Create new entry
                    int startingParentWinLoss = ParseWinLoss(keyValuePair.Value.ParentDNAFilePath);
                    fileNameToModificationDic.Add(parentFileName, startingParentWinLoss + modification);
                }
            }

            // Move or delete the parent files as appropriate
            int winLossTotal = 0;

            foreach (KeyValuePair <string, int> keyValuePair in fileNameToModificationDic)
            {
                string oldFileName  = keyValuePair.Key;
                int    winLossCount = keyValuePair.Value;

                winLossTotal += winLossCount;
                int winLossAverage = (int)Math.Round((float)winLossTotal / (float)fileNameToModificationDic.Count);

                if (winLossCount < winLossAverage)
                {
                    // Delete losers
                    LogUtility.LogInfoFormat(
                        "Removing {0} from gene pool",
                        oldFileName);

                    FileIOManager.Delete(oldFileName);
                    continue;
                }
                else if (winLossCount >= winLossAverage)
                {
                    // Falsely inflate average to break ties
                    winLossTotal += winLossAverage;
                }

                // Move winners to new file name
                string newFileName = FileIOManager.GenerateNewDNAFilePath(winLossCount);
                FileIOManager.Move(oldFileName, newFileName);

                LogUtility.LogInfoFormat(
                    "Gene pool file {0} became {1}",
                    oldFileName,
                    newFileName);
            }
        }