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