/// <summary> /// The run method with each time and get the best numbers. /// </summary> /// <param name="action"> /// The action. /// </param> /// <param name="count"> /// The count. /// </param> /// <param name="typesOfDrawn"> /// The t drawn. /// </param> public void RunMethodWithEachTimeAndGetTheBestNumbers(MethodInfo action, int count, Enums.TypesOfDrawn typesOfDrawn) { if (LotteryModels == null) { LotteryModels = new List <LotteryModel>(); } Dictionary <int, int> numbersDictionary = new Dictionary <int, int>(); Console.WriteLine($"{typesOfDrawn} {count} Times"); int index = 0; int errorCounter = 0; int skipRutinWhenReachThisNumber = 200; while (index != count) { LotteryModel returnedModel = (LotteryModel)action.Invoke(this, null); if (skipRutinWhenReachThisNumber == errorCounter) { Console.WriteLine("You cant genreate numbers with this method, because numbers dosent right for it"); break; } if (returnedModel == null || !returnedModel.ValidationTuple().Item1) { errorCounter++; continue; } index++; foreach (var returnedModelNumber in returnedModel.Numbers) { if (numbersDictionary.Count > 0 && numbersDictionary.ContainsKey(returnedModelNumber)) { numbersDictionary[returnedModelNumber]++; } else { numbersDictionary.Add(returnedModelNumber, 1); } } } var sortedDic = numbersDictionary.OrderByDescending(x => x.Value).Take(lotteryRule.PiecesOfDrawNumber); LotteryModel resultLotteryModel = new LotteryModel(lotteryRule); foreach (KeyValuePair <int, int> keyValuePair in sortedDic) { resultLotteryModel.Numbers.Add(keyValuePair.Key); } if (LotteryModels.AddValueWithDetailsAndValidation(resultLotteryModel.ValidationTuple(), typesOfDrawn)) { OnLotteryModelEvent(resultLotteryModel); } }
public List <string> GetLotteryModelAsStrList(LotteryModel lm) { List <string> concate = new List <string> { LotteryHandler.GetWeeksInYear().ToString(CultureInfo.InvariantCulture) }; concate.Add(lm.Message.ToString()); concate.Add(String.Join(",", lm.Numbers.OrderBy(x => x).Select(x => x.ToString()))); concate.Add(UserName); concate.Add(lm.LotteryRule.LotteryType.ToString()); return(concate); }
/// <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 make statistic from earlier week. /// </summary> public void MakeStatisticFromEarlierWeek() { List <SaveNumber> getLotteryDrawing = this.SaveNumbers .Where(x => x.WeekOfPull == this.lotteryCollection.Last().WeekOfLotteryDrawing).ToList(); LotteryModel lastDrawing = this.lotteryCollection.Last(); for (int i = 0; i < lotteryRule.PiecesOfDrawNumber; i++) { foreach (var t1 in getLotteryDrawing) { var e = t1.Numbers[i]; var k = lastDrawing.Numbers[i]; var t = (double)e / k; t1.DifferentInPercentage.Add(t); } } }
public void RunMethodWithEachTimeAndGetTheMostCommonSeries(MethodInfo action, int count, Enums.TypesOfDrawn typesOfDrawn) { if (LotteryModels == null) { LotteryModels = new List <LotteryModel>(); } Dictionary <string, int> numbersDictionary = new Dictionary <string, int>(); Console.WriteLine($"{typesOfDrawn} {count} Times"); int index = 0; while (index != count) { LotteryModel returnedModel = (LotteryModel)action.Invoke(this, null); if (returnedModel == null || !returnedModel.ValidationTuple().Item1) { continue; } index++; if (numbersDictionary.Count > 0 && numbersDictionary.ContainsKey(returnedModel.ToString())) { numbersDictionary[returnedModel.ToString()]++; } else { numbersDictionary.Add(returnedModel.ToString(), 1); } } KeyValuePair <string, int> sortedDic = numbersDictionary.OrderByDescending(x => x.Value).ToList()[0]; LotteryModel resultLotteryModel = new LotteryModel(lotteryRule); var numbers = sortedDic.Key.Split(", "); foreach (string number in numbers) { resultLotteryModel.Numbers.Add(Convert.ToInt32(number)); } if (LotteryModels.AddValueWithDetailsAndValidation(resultLotteryModel.ValidationTuple(), typesOfDrawn, Enums.GenerateType.MostCommonSeries)) { OnLotteryModelEvent(resultLotteryModel); } }
/// <summary> /// The by interval execute. /// </summary> /// <returns> /// The <see cref="LotteryModel"/>. /// </returns> public LotteryModel ByIntervalExecute() { var actual = this.NumberSections.Where(x => x.ActualNumber == this.lotteryCollection.Last().Numbers.First()); LotteryModel lm = new LotteryModel(lotteryRule); for (int i = 0; i < lotteryRule.PiecesOfDrawNumber; i++) { int max = 0; List <IOrderedEnumerable <SpecifyNumber> > spec = actual.Select(x => x.SpecifyNumberList.OrderByDescending(xy => xy.Pieces)).ToList(); List <int> maxCount = spec[0].Select(x => x.Pieces).OrderByDescending(x => x).ToList(); SpecifyNumber getSec = spec[0].First(x => x.Pieces == maxCount[max]); while (true) { if (lm.Numbers.Contains(getSec.NextNumber)) { max++; getSec = spec[0].First(x => x.Pieces == maxCount[max]); } else { if (lm.Numbers.Count == 0) { break; } if (getSec.NextNumber > lm.Numbers.Max()) { break; } max++; getSec = spec[0].First(x => x.Pieces == maxCount[max]); } } var getAf = getSec.NextNumber; lm.Numbers.Add(getAf); actual = this.NumberSections.Where(x => x.ActualNumber == getAf); } 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); } }