public void ProbabilityAggregationTest()
        {
            var legs = new List <LegSelections>
            {
                new LegSelections(3),
                new LegSelections(3),
                new LegSelections(3),
            };
            var patternedSel = new PatternedSelections <LegSelections>(legs);

            patternedSel[1].Add(new SelectionModel(1, 0.2));
            patternedSel[1].Add(new SelectionModel(2, 0.2));
            patternedSel[1].Add(new SelectionModel(3, 0.2));

            patternedSel[2].Add(new SelectionModel(1, 0.1));
            patternedSel[2].Add(new SelectionModel(2, 0.2));
            patternedSel[2].Add(new SelectionModel(3, 0.3));

            patternedSel[3].Add(new SelectionModel(1, 0.1));
            patternedSel[3].Add(new SelectionModel(2, 0.1));
            patternedSel[3].Add(new SelectionModel(3, 0.1));

            Assert.That(Math.Abs(patternedSel.Probability - 0.108) < 0.00000001);
            Assert.That(patternedSel.LineCount == 27);
        }
        public void EmptyResultTest()
        {
            var legs         = new List <LegSelections>();
            var patternedSel = new PatternedSelections <LegSelections>(legs);

            Assert.That(patternedSel.Probability == 0d);
            Assert.That(patternedSel.LineCount == 0);
        }
Exemplo n.º 3
0
        protected virtual PatternedSelections <T> GetPatternedSelections(IReadOnlyList <T> legs)
        {
            var result = new PatternedSelections <T>(legs);

            foreach (var leg in Pool.Legs)
            {
                var legOrder            = leg.LegOrder;
                var availableSelections = leg.Selections.Where(s => s.Probability > 0);
                var selCnt = result[legOrder].Capacity;
                var additionalSelections = SmartPickHelper.GetGoodSelections(availableSelections, selCnt);
                result[legOrder].AddRange(additionalSelections);
            }

            return(result);
        }
Exemplo n.º 4
0
        protected virtual void ImproveSelections(PatternedSelections <T> result, double targetProbs)
        {
            const int trials = 1000; //this is equivalent to set the longest waiting time
            var       legInd = 0;

            while (result.Probability < targetProbs && legInd < trials)
            {//replacing the worst selection with better one for each leg
                var legOrder           = legInd % Pool.Legs.Length + 1;
                var minProb            = result[legOrder].Min(b => b.Probability);
                var availableSelection = Pool.Legs[legOrder - 1].Selections
                                         .Where(s => s.Probability > minProb && !result[legOrder].Contains(s)).OrderBy(s => s.Probability)
                                         .FirstOrDefault();
                if (availableSelection != default(SelectionModel))
                {
                    result[legOrder].RemoveMin();
                    result[legOrder].Add(availableSelection);
                }
                legInd++;
            }
        }
 protected override void ImproveSelections(PatternedSelections <LegSelections> result, double targetProbs)
 {
     //todo: need a algorithm and DO NOT REMOVE this override method as it will fall back to the default one
 }