public bool AddNewWaitResultMatch(string[] parameters, TournamentShort tournament, DateTime date, string prediction)
 {
     return(_disciplineController.AddNewWaitResultMatch(parameters, tournament, date, prediction));
 }
Example #2
0
        public string GetPrediction(string[] parameters, DateTime date)
        {
            var           tournament = tournamentList.First(it => it.Tournament_name == parameters[0]);
            var           tierA      = 0.0;
            var           tierB      = 0.0;
            List <double> tmpValue   = new List <double>();

            foreach (var lastMatches in lastMatchesA)
            {
                tmpValue.AddRange(lastMatches.ToListDouble());
            }

            foreach (var lastMatches in lastMatchesB)
            {
                tmpValue.AddRange(lastMatches.ToListDouble());
            }

            // Получение ранга команд из прошлых матчей (интересный костыль)
            tierA = tmpValue[8];
            tierB = tmpValue[83];

            var statisticPredicts = _network.GetHistoryPrediction(tmpValue);

            var finalInputParameters = new List <double>();

            // Учесть, что количество сейвов - дробное число и его не надо преобразовать
            for (int i = 0; i < statisticPredicts.Count; i++)
            {
                if (i != 1 && i != 2)
                {
                    finalInputParameters.AddRange(_interpritator.GetPrediction(statisticPredicts[i]));
                }
                else
                {
                    finalInputParameters.Add(statisticPredicts[i]);
                    finalInputParameters.Add(statisticPredicts[i]);
                }
            }

            for (int i = 0; i < statisticPredicts.Count; i++)
            {
                if (i != 1 && i != 2)
                {
                    finalInputParameters[i] = _interpritator.GetPerfectValue((int)statisticPredicts[i]);
                }
            }

            var prediction = "ТБ:  " + ((finalInputParameters[0] + finalInputParameters[1]) / 2).ToString("f1") +
                             " Нарушений А: " + ((finalInputParameters[6] + finalInputParameters[7]) / 2).ToString("f2") +
                             " Нарушений B: " + ((finalInputParameters[8] + finalInputParameters[9]) / 2).ToString("f2") +
                             " Забито А: " + (((finalInputParameters[10] + finalInputParameters[11]) / 2) * ((finalInputParameters[4] + finalInputParameters[5]) / 2)).ToString("f2") +
                             " Забито В: " + (((finalInputParameters[12] + finalInputParameters[13]) / 2) * ((finalInputParameters[2] + finalInputParameters[3]) / 2)).ToString("f2") + ";";

            // Вывести приколы интерпритаторов.

            // Дополнительные параметры для итоговой нейронной сети
            finalInputParameters.Add(tierA);
            finalInputParameters.Add(tierB);
            // Важность для домашней команды и команды гостей
            finalInputParameters.Add(int.Parse(parameters[3]));
            finalInputParameters.Add(int.Parse(parameters[4]));
            // Замены у домашней команды и команды гостей
            finalInputParameters.Add(int.Parse(parameters[5]));
            finalInputParameters.Add(int.Parse(parameters[6]));
            finalInputParameters.Add(tournament.Tournament_size);

            /// Вычисление итогового результата.
            /// Результат - массив из 10 чисел. Число, первым выходящее за Епсилон больше 0.1 от Единицы,
            /// считается результатом с умеренным риском. Для преобразования результата в более понятный вид
            /// необходимо воспользоваться интерпритатором
            var finalPredict = _network.GetFinalPrediction(finalInputParameters);

            prediction += _interpritator.GetPrediction(finalPredict);
            _interactionController.AddNewWaitResultMatch(parameters, tournament, date, prediction);

            return(prediction);
        }