public override Multiset <long> SampleElectorate(int voteCount)
        {
            var prefInfo = PreferenceInformation.InferPreferences(districts[districtIndex]);

            districtIndex++;

            double swap2 = Rand.NextDouble() * MaxChanceSwap2;
            double swap3 = Math.Min(Rand.NextDouble() * MaxChanceSwap3, swap2);

            var evolved = prefInfo.Evolve(swap2, swap3);

            var result = evolved.ToMultiset(voteCount);

            return(result);
        }
コード例 #2
0
        public static PreferenceFile FromStream(Stream strm)
        {
            var result = new PreferenceFile();
            var csv    = CSVReader.ReadFromStream(strm).ToList();

            var headerRow = csv[0];
            var current   = headerRow.IndexOf("CURRENT");
            var prev      = headerRow.IndexOf("PREVIOUS");
            var weight    = headerRow.IndexOf("WEIGHT");

            var parties = headerRow.ToList();

            parties.Remove("CURRENT");
            parties.Remove("PREVIOUS");
            parties.Remove("WEIGHT");

            result.partyNames = parties;

            var partiesIndex = (from x in parties select headerRow.IndexOf(x)).ToList();

            for (int i = 1; i < csv.Count; i++)
            {
                var row = csv[i];

                List <double> rawScores = new List <double>();

                for (int j = 0; j < parties.Count; j++)
                {
                    rawScores.Add(double.Parse(row[partiesIndex[j]]));
                }

                var actualVote = parties.IndexOf(row[current]);
                var prevVote   = parties.IndexOf(row[prev]);

                if (row[weight].Trim() == string.Empty)
                {
                    continue;
                }

                var currentWeight = double.Parse(row[weight]);

                var indicies = DiscreteMath.GetIntList(parties.Count);

                var preferenceOrder = (from x in indicies
                                       orderby(actualVote == x ? 1 : 0) descending, rawScores[x] descending, Rand.NextDouble() descending
                                       select x).ToList();

                var secondPreference = preferenceOrder[1];
                var thirdPreference  = preferenceOrder[2];

                var info = new PreferenceInformation();

                info.FirstIndex  = actualVote;
                info.SecondIndex = secondPreference;
                info.ThirdIndex  = thirdPreference;
                info.Weight      = currentWeight;

                result.preferenceInformation.Add(info);
            }

            return(result);
        }