public IActionResult InitAdPosition()
        {
            List <Ad_Page>     pageList     = null;
            List <Ad_Position> positionList = null;

            var result = InitProvider.InitAdPosition(out pageList, out positionList);

            List <InitAdPositionResult> data = new List <InitAdPositionResult>();

            if (result > 0 && null != pageList && pageList.Count > 0)
            {
                foreach (var page in pageList)
                {
                    data.Add(new InitAdPositionResult
                    {
                        PageID       = page.PageID,
                        PageName     = page.PageName,
                        PlatformType = page.PlatformType,
                        PlatformName = EnumUtility.GetEnumDescription <EnumLibrary.ADTerminal>(page.PlatformType),
                        PositionList = positionList.Where(p => p.PageID == page.PageID).ToList()
                    });
                }
            }

            return(KylinOk(data));
        }
        public IActionResult InitArea()
        {
            var result = InitProvider.InitArea();

            string txt = string.Format("本次共初始化 {0} 个区域", result);

            return(KylinOk(txt));
        }
        public IActionResult InitGlobalConfig()
        {
            var result = InitProvider.InitGlobalConfig();

            string txt = string.Format("本次共初始化 {0} 个全局配置项", result);

            return(KylinOk(txt));
        }
        public IActionResult InitSuperAdmin()
        {
            string account = "admin";

            string pwd = "123456";

            int rows = InitProvider.InitSuperAdmin(account, pwd);

            return(Ok(string.Format("超级管理初始化成功!账号:{0},密码:{1}", account, pwd)));
        }
        public void Init()
        {
            InitProvider.InitApiMoudleAuthoriza();
            string account = "admin";

            string pwd = "123456";

            int rows = InitProvider.InitSuperAdmin(account, pwd);

            InitProvider.InitIndustry();
            InitProvider.InitArea();
            InitProvider.InitGlobalConfig();
            List <Ad_Page>     pageList     = null;
            List <Ad_Position> positionList = null;

            InitProvider.InitAdPosition(out pageList, out positionList);
            InitProvider.InitPointsConfig();
            InitProvider.InitEmpiricalConfig();
            InitProvider.InitLevelConfig();
        }
示例#6
0
        private void btn1_Click(object sender, RoutedEventArgs e)
        {
            ForecastModel forecastModel = InitProvider.GetForecastModel();

            #region validation
            Regex timeRegexp  = new Regex(@"^(\d{1,4})$");
            Regex scoreRegexp = new Regex(InitProvider.GetRegexpValidator(dataModels));

            //валидации формы нет, отсев данных происходит в момент клика
            double currentTime = 0;
            double maxTime     = 90 * 60;
            string score       = "0-0";

            int scoreFirstCommand  = 0;
            int ScoreSecondCommand = 0;


            if (timeRegexp.IsMatch(textBoxTime.Text))
            {
                currentTime = double.Parse(textBoxTime.Text);
            }

            if (scoreRegexp.IsMatch(textBoxScore.Text))
            {
                score              = textBoxScore.Text;
                scoreFirstCommand  = int.Parse(score.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[0]);
                ScoreSecondCommand = int.Parse(score.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[1]);
            }

            if (currentTime < 0)
            {
                currentTime = 0;
            }

            if (currentTime > maxTime)
            {
                currentTime = maxTime;
            }
            #endregion

            //Основная идея - последующий отрезок матча воспринимается как отдельный матч.
            //Чем ближе к концу - тем больше вероятность текущего счета стремится к единице.
            //В момент, когда время равняется 90 минутам, невозможен иной исход, нежели тот, который задан.
            //Данная концепция согласуется с ситуацией, когда на N-ой минуте уже достигнут максимальный по таблице счет.
            //В этом случае, если не воспринимать оставшуюся часть игры, как отдельно взятый матч с ограниченным временем,
            //Можно прийти к результату, что изменений в матче происходить не будет. Однако, это не совсем логично.
            //Поэтому, в зависимости от счета, меняется и таблица результата,
            //И появляется, пусть и с меньшей вероятностью, ситуация, когда будет забито больше мячей, чем за все предбыдущие матчи.

            double timeLeftKoef = (maxTime - currentTime) / maxTime;

            #region update forecastModel
            var currentDataModels = ProbabilityProvider.GetCurrentDataModels(dataModels, timeLeftKoef,
                                                                             scoreFirstCommand, ScoreSecondCommand);
            //Эта вероятность (текущий счет) будет стремиться к единицы к концу матча.
            var currentFreeProbability = 1.0 - currentDataModels.Sum(x => x.Probability);
            var currentDataModel       = ProbabilityProvider.GetCurrentDataModel(scoreFirstCommand, ScoreSecondCommand, currentFreeProbability);

            forecastModel.CurrentDataModel          = currentDataModel;
            forecastModel.CurrentScoreFirstCommand  = scoreFirstCommand;
            forecastModel.CurrentScoreSecondCommand = ScoreSecondCommand;
            forecastModel.CurrentTime = currentTime;
            forecastModel.DataModels  = currentDataModels;

            #region probability
            //Надо ли загонять вероятности в 1? (с позиции математики - надо,
            //Однако, тут вычисления приближенные, и можно их все округлить вниз до знака, и потом добавить к какой-либо
            //(Мне, наверное, пришлась бы по душе большая) вероятности это значение)). Можно и поделить значения
            //Между всеми вероятностями. Но не придется ли снова нормировать значения?
            forecastModel.ProbabilityModels.Add(ProbabilityProvider.GetProbilityCommandWinOrDrawOrLose(
                                                    ResultCommandEnum.FirstCommandWin, currentDataModel, currentDataModels));
            forecastModel.ProbabilityModels.Add(ProbabilityProvider.GetProbilityCommandWinOrDrawOrLose(
                                                    ResultCommandEnum.SecondCommandWin, currentDataModel, currentDataModels));
            forecastModel.ProbabilityModels.Add(ProbabilityProvider.GetProbilityCommandWinOrDrawOrLose(
                                                    ResultCommandEnum.Draw, currentDataModel, currentDataModels));

            forecastModel.ProbabilityModels.Add(ProbabilityProvider.GetProbabilityOneScoreFirstAndSecondCommand(currentDataModels));
            forecastModel.ProbabilityModels.Add(ProbabilityProvider.GetProbabilityCommandScoreOne(
                                                    ResultCommandEnum.FirstCommandScoreOne, currentDataModels));
            forecastModel.ProbabilityModels.Add(ProbabilityProvider.GetProbabilityCommandScoreOne(
                                                    ResultCommandEnum.SecondCommandScoreOne, currentDataModels));
            forecastModel.ProbabilityModels.Add(ProbabilityProvider.GetProbabilityOneScoreFirstOrSecondCommand(currentDataModels));
            #endregion
            #endregion

            GetCurrentProbabilityTable(forecastModel);
            GetCurrentSpecificProbability(forecastModel);
        }
        public IActionResult InitIndustry()
        {
            var result = InitProvider.InitIndustry();

            return(KylinOk(result));
        }
        public IActionResult InitApiModuleAuthorize()
        {
            int rows = InitProvider.InitApiMoudleAuthoriza();

            return(Ok(string.Format("共初始化接口授权 {0} 项", rows)));
        }
        public IActionResult InitLevelConfig()
        {
            var result = InitProvider.InitLevelConfig();

            return(KylinOk(result));
        }