Example #1
0
        /// <summary>
        /// The by average steps execute.
        /// </summary>
        /// <returns>
        /// The <see cref="LotteryModel"/>.
        /// </returns>
        public LotteryModel ByAverageStepsExecute()
        {
            LotteryModel lm     = new LotteryModel(lotteryRule);
            int          start2 = GetRandomNumber(lotteryRule);

            lm.AddNumber(start2);

            foreach (double d in this.LotteryStatistic.AvarageStepByStep)
            {
                lm.AddNumber(lm.Numbers.Last() + (int)Math.Round(d, 0));
            }

            return(lm);
        }
Example #2
0
        /// <summary>
        /// The by occurrence execute.
        /// </summary>
        /// <returns>
        /// The <see cref="LotteryModel"/>.
        /// </returns>
        public LotteryModel ByOccurrenceExecute()
        {
            LotteryModel lm = new LotteryModel(lotteryRule);

            var    getSections    = this.NumberSections.Last(x => this.lotteryCollection.Last().Numbers.First() == x.ActualNumber);
            Random random         = new Random();
            int    start2         = random.Next(0, getSections.SpecifyNumberList.Count);
            var    generateNumber = (SpecifyNumber)getSections.SpecifyNumberList[start2].Clone();

            lm.AddNumber(generateNumber.NextNumber);
            for (int k = 0; k < lotteryRule.PiecesOfDrawNumber - 1; k++)
            {
                getSections = this.NumberSections.First(x => lm.Numbers.Last() == x.ActualNumber);

                while (true)
                {
                    random = new Random();
                    if (getSections.SpecifyNumberList.Count > 10)
                    {
                        start2         = random.Next(0, getSections.SpecifyNumberList.Count);
                        generateNumber = (SpecifyNumber)getSections.SpecifyNumberList[start2].Clone();
                    }
                    else
                    {
                        start2         = GetRandomNumber(lotteryRule);
                        generateNumber = new SpecifyNumber(start2);
                    }

                    if (!lm.Numbers.Contains(generateNumber.NextNumber))
                    {
                        break;
                    }
                }

                lm.AddNumber(generateNumber.NextNumber);
            }

            return(lm);
        }
Example #3
0
        /// <summary>
        /// The by average randoms execute.
        /// </summary>
        /// <returns>
        /// The <see cref="LotteryModel"/>.
        /// </returns>
        public LotteryModel ByAverageRandomsExecute()
        {
            LotteryModel lm = new LotteryModel(lotteryRule);

            for (int i = 0; i < lotteryRule.PiecesOfDrawNumber; i++)
            {
                var goal = this.LotteryStatistic.AvarageRandom[i];
                int id   = 0;
                while (true)
                {
                    if (id == (int)goal)
                    {
                        lm.AddNumber(GetRandomNumber(lotteryRule));
                        break;
                    }

                    id++;
                }
            }

            return(lm);
        }
Example #4
0
        /// <summary>
        /// The by sums execute.
        /// </summary>
        /// <returns>
        /// The <see cref="LotteryModel"/>.
        /// </returns>
        public LotteryModel BySumsExecute()
        {
            var getLastSum = this.lotteryCollection.Last().Sum;

            // find another same sum in list
            LotteryModel getPenultimateSumId;

            while (true)
            {
                Random rnd          = new Random();
                var    foundLastSum = lotteryCollection.Select((v, i) => new { Index = i, Value = v }).Where(x => x.Value.Sum == getLastSum)
                                      .Select(x => x.Value.Id)
                                      .ToList();
                if (foundLastSum.Count > 2)
                {
                    var tek = rnd.Next(1, foundLastSum.Count - 1);
                    getPenultimateSumId = this.lotteryCollection.FirstOrDefault(x => x.Id == foundLastSum[tek] + 1);

                    break;
                }

                getLastSum++;
            }

            LotteryModel lm = new LotteryModel(lotteryRule);

            for (int i = 0; i < lotteryRule.PiecesOfDrawNumber; i++)
            {
                lm.AddNumber(GetRandomNumber(lotteryRule));
            }

            if (getPenultimateSumId != null && (lm.Sum >= getPenultimateSumId.Sum - 10 && lm.Sum <= getPenultimateSumId.Sum + 10))
            {
                return(lm);
            }

            return(null);
        }
Example #5
0
        public LotteryModel ByMachineLearningExecute()
        {
            try
            {
                if (this.lotteryRule.LotteryType != Enums.LotteryType.TheFiveNumberDraw)
                {
                    return(null);                                                                     //TODO: Make this for 6 and custom lottery draw
                }
                LotteryModel lm  = new LotteryModel(lotteryRule);
                var          dbl = new List <LotteryResult>();
                foreach (LotteryModel lotteryModel in this.lotteryCollection)
                {
                    var res = new LotteryResult(
                        lotteryModel.Numbers[0],
                        lotteryModel.Numbers[1],
                        lotteryModel.Numbers[2],
                        lotteryModel.Numbers[3],
                        lotteryModel.Numbers[4]
                        );

                    dbl.Add(res);
                }

                dbl.Reverse();
                var deep    = 20;
                var network = new BasicNetwork();
                network.AddLayer(
                    new BasicLayer(null, true, 5 * deep));
                network.AddLayer(
                    new BasicLayer(
                        new ActivationSigmoid(), true, 4 * 5 * deep));
                network.AddLayer(
                    new BasicLayer(
                        new ActivationSigmoid(), true, 4 * 5 * deep));
                network.AddLayer(
                    new BasicLayer(
                        new ActivationLinear(), true, 5));
                network.Structure.FinalizeStructure();
                var learningInput = new double[deep][];
                for (int i = 0; i < deep; ++i)
                {
                    learningInput[i] = new double[deep * 5];
                    for (int j = 0, k = 0; j < deep; ++j)
                    {
                        var           idx  = 2 * deep - i - j;
                        LotteryResult data = dbl[idx];
                        learningInput[i][k++] = (double)data.V1;
                        learningInput[i][k++] = (double)data.V2;
                        learningInput[i][k++] = (double)data.V3;
                        learningInput[i][k++] = (double)data.V4;
                        learningInput[i][k++] = (double)data.V5;
                    }
                }
                var learningOutput = new double[deep][];
                for (int i = 0; i < deep; ++i)
                {
                    var idx  = deep - 1 - i;
                    var data = dbl[idx];
                    learningOutput[i] = new double[5]
                    {
                        (double)data.V1,
                        (double)data.V2,
                        (double)data.V3,
                        (double)data.V4,
                        (double)data.V5
                    };
                }
                var trainingSet = new BasicMLDataSet(
                    learningInput,
                    learningOutput);

                var train = new ResilientPropagation(
                    network, trainingSet);
                train.NumThreads = Environment.ProcessorCount;
START:
                network.Reset();
RETRY:
                var step = 0;
                do
                {
                    train.Iteration();
                    Console.WriteLine("Train Error: {0}", train.Error);
                    ++step;
                }while (train.Error > 0.001 && step < 20);
                var passedCount = 0;
                for (var i = 0; i < deep; ++i)
                {
                    var should =
                        new LotteryResult(learningOutput[i]);
                    var inputn = new BasicMLData(5 * deep);
                    Array.Copy(
                        learningInput[i],
                        inputn.Data,
                        inputn.Data.Length);
                    var comput =
                        new LotteryResult(
                            ((BasicMLData)network.
                             Compute(inputn)).Data);
                    var passed = should.ToString() == comput.ToString();
                    if (passed)
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                        ++passedCount;
                    }
                }

                var input = new BasicMLData(5 * deep);
                for (int i = 0, k = 0; i < deep; ++i)
                {
                    var idx  = deep - 1 - i;
                    var data = dbl[idx];
                    input.Data[k++] = (double)data.V1;
                    input.Data[k++] = (double)data.V2;
                    input.Data[k++] = (double)data.V3;
                    input.Data[k++] = (double)data.V4;
                    input.Data[k++] = (double)data.V5;
                }
                var           perfect = dbl[0];
                LotteryResult predict = new LotteryResult(
                    ((BasicMLData)network.Compute(input)).Data);
                Console.WriteLine("Predict: {0}", predict);

                if (predict.IsOut())
                {
                    goto START;
                }

                var t       = passedCount < (deep * (double)9 / (double)10);
                var isvalid = predict.IsValid();

                if (t ||
                    !isvalid)
                {
                    goto RETRY;
                }

                lm.AddNumber(predict.V1);
                lm.AddNumber(predict.V2);
                lm.AddNumber(predict.V3);
                lm.AddNumber(predict.V4);
                lm.AddNumber(predict.V5);

                return(lm);
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.ToString());
                return(null);
            }
        }