public List <Factor <T> > Analyse <T>(FactorsTrendAnalyseDto <T> dto) { //预测的可能因子 var predictiveFactors = new List <Factor <T> >(); var factorTrend = new FactorTrend(); //分析每个因子 foreach (var factor in dto.Factors) { var analyseDto = new FactorTrendAnalyseDto <T> { Factor = factor, Numbers = dto.Numbers, AllowMinTimes = dto.AllowMinTimes, AnalyseHistoricalTrendEndIndex = dto.AnalyseHistoricalTrendEndIndex, AddConsecutiveTimes = dto.AddConsecutiveTimes, AddInterval = dto.AddInterval }; var predictiveFactor = factorTrend.Analyse(analyseDto); if (predictiveFactor != null) { predictiveFactors.Add(factor); } } return(predictiveFactors); }
public void TestAnalyse_PredictiveFactors_Count_Great_Than_Zero() { var numbers = new List <byte> { 2, 3, 3, 1, 4, 3, 3, 3, 1, 3, 3, 3, 4, 3, 4, 3 }; /* * 索引位置:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 * 号码列表:2, 3, 3, 1, 4, 3, 3, 3, 1, 3, 3, 3 4 3 4 * 连续次数:0 1 2 0 1 2 3 4 0 1 2 3 4 5 6 * 最大间隔:0 -1 -2 0 1 0 -1 -2 0 3 2 1 0 -1 -2 */ var factor = new Factor <byte> { Left = new List <byte> { 3, 4 }, Right = new List <byte> { 1, 2 } }; var dto = new FactorsTrendAnalyseDto <byte> { Factors = new List <Factor <byte> > { factor }, Numbers = numbers, AnalyseHistoricalTrendEndIndex = 5 }; var predictiveFactors = new FactorsTrend().Analyse(dto); Assert.IsTrue(predictiveFactors.Count == 1); }
public void TestMethod_Analyse_Five_Digit_By_Random() { var numbers = GetTestNumbers(0, 5, 100000); //因子 var factors = FactorGenerator.Create(new List <byte> { 0, 1, 2, 3, 4 }.ToList()); var watch = new Stopwatch(); watch.Start(); var resultString = new StringBuilder(); var hasCount = 0; var resultCount = 0; var defaultTakeCount = 101; var curTakeCount = defaultTakeCount; for (var i = 0; i < 2500; i++) { var number = numbers[i]; var curNumbers = numbers.Skip(i + 1).Take(curTakeCount).ToList(); curNumbers.Reverse(); var dto = new FactorsTrendAnalyseDto <byte> { AddConsecutiveTimes = 2, AddInterval = 1, Numbers = curNumbers, AnalyseHistoricalTrendEndIndex = 100, Factors = factors }; //var dto = new MarkSixAnalyseSpecifiedLocationDto { Location = 7, StartTimes = records[i].StartTimes, TensAllowMinFactorCurrentConsecutiveTimes = 6, TensAllowMaxInterval = -1, TensAroundCount = 200, TensNumbersTailCutCount = 6 }; var result = TestAnalyse(dto); var success = false; if (result.Count > 0) { resultCount++; if (result.Contains(number)) { success = true; } } if (success) { hasCount++; resultString.AppendLine("期次:" + i + ",号码:" + number + ",分析结果:" + (success ? "-Yes- " : " ") + string.Join(";", result)); curTakeCount = defaultTakeCount; } else { curTakeCount++; } } watch.Stop(); var usedSeconds = watch.ElapsedMilliseconds / 1000; var str = resultString.ToString(); }
private List <byte> TestAnalyse(FactorsTrendAnalyseDto <byte> dto) { var factorHistoricalTrend = new FactorsTrend(); var predictiveFactors = factorHistoricalTrend.Analyse(new FactorsTrendAnalyseDto <byte> { Numbers = dto.Numbers, Factors = dto.Factors, AddConsecutiveTimes = dto.AddConsecutiveTimes, AddInterval = dto.AddInterval, AnalyseHistoricalTrendEndIndex = dto.AnalyseHistoricalTrendEndIndex }); if (predictiveFactors.Count > 0) { var onesFactor = new List <byte>(predictiveFactors[0].Right); onesFactor = predictiveFactors.Aggregate(onesFactor, (current, factor) => current.Intersect(factor.Right).ToList()); return(onesFactor); } return(new List <byte>()); }