protected GaussianWeightedSumFactor CreatePlayerToTeamSumFactor(
     IList <KeyedVariable <TPlayer, GaussianDistribution> > teamMembers,
     Variable <GaussianDistribution> sumVariable)
 {
     return(new GaussianWeightedSumFactor(sumVariable, teamMembers.ToArray(),
                                          teamMembers.Select(v => PartialPlay.GetPartialPlayPercentage(v.Key)).ToArray()));
 }
        private static Matrix CreatePlayerTeamAssignmentMatrix <TPlayer>(
            IList <IDictionary <TPlayer, Rating> > teamAssignmentsList, int totalPlayers)
        {
            var playerAssignments    = new List <IEnumerable <double> >();
            var totalPreviousPlayers = 0;

            for (var i = 0; i < teamAssignmentsList.Count - 1; ++i)
            {
                var currentTeam = teamAssignmentsList[i];

                var currentRowValues = new List <double>(new double[totalPreviousPlayers]);
                playerAssignments.Add(currentRowValues);

                foreach (var currentRating in currentTeam)
                {
                    currentRowValues.Add(PartialPlay.GetPartialPlayPercentage(currentRating.Key));
                    ++totalPreviousPlayers;
                }

                var nextTeam = teamAssignmentsList[i + 1];
                foreach (var nextTeamPlayerPair in nextTeam)
                {
                    currentRowValues.Add(-1 * PartialPlay.GetPartialPlayPercentage(nextTeamPlayerPair.Key));
                }
            }

            var playerTeamAssignmentsMatrix = new Matrix(totalPlayers, teamAssignmentsList.Count - 1, playerAssignments);

            return(playerTeamAssignmentsMatrix);
        }