Пример #1
0
        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>());
        }