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); }
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); }
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 }