/// <summary>
        /// Initializes a new instance of the <see cref="CooperationStrategyFitness"/> class.
        /// </summary>
        /// <param name="cooperationStrategy">The cooperation strategy.</param>
        /// <param name="totalPayoff">The total payoff.</param>
        public CooperationStrategyFitness(CooperationStrategy cooperationStrategy, int totalPayoff)
        {
            Requires.NotNull(cooperationStrategy, "cooperationStrategy");

            this.Strategy = cooperationStrategy;
            this.TotalPayoff = totalPayoff;
        }
        /// <summary>
        /// Calculates the total payoff.
        /// </summary>
        /// <param name="cooperationStrategy">The cooperation strategy.</param>
        /// <param name="simulationResults">The simulation results.</param>
        /// <returns>The payoff.</returns>
        private static int CalculateTotalPayoff(CooperationStrategy cooperationStrategy, List<CooperationStrategyMatchupSimulationResult> simulationResults)
        {
            Requires.NotNull(cooperationStrategy, "cooperationStrategy");
            Requires.NotNull(simulationResults, "simulationResults");

            return
                simulationResults
                    .Where(simulationResult => simulationResult.Matchup.StrategyA == cooperationStrategy)
                    .Sum(simulationResult => simulationResult.PayoffForStrategyA) +
                simulationResults
                    .Where(simulationResult => simulationResult.Matchup.StrategyB == cooperationStrategy)
                    .Sum(simulationResult => simulationResult.PayoffForStrategyB);
        }