Пример #1
0
        /// <summary>
        /// Creates VPIP prior distribution according to statistics.
        /// </summary>
        private HistDistribution createVPIPPrior()
        {
            var dist = new HistDistribution(_options.priorNumBins);

            foreach (var stats in _fullStatsList)
            {
                if (stats.VPIP.TotalSamples > _options.minSamples)
                {
                    dist.AddSample(stats.VPIP.ToFloat());
                }
            }

            dist.Normalize();
            return(dist);
        }
Пример #2
0
        /// <summary>
        /// Creates WTP (Willingnes to Play) prior distribution according to statistics.
        /// </summary>
        private HistDistribution createWTPPrior()
        {
            var dist = new HistDistribution(_options.priorNumBins);

            foreach (PlayerStats stats in _fullStatsList)
            {
                int positive;
                int total;
                stats.calculateWTP(out positive, out total);

                if (total > _options.minSamples)
                {
                    dist.AddSample(positive / (float)total);
                }
            }

            dist.Normalize();
            return(dist);
        }
Пример #3
0
        /// <summary>
        /// Creates Aggression prior distribution according to statistics.
        /// </summary>
        private HistDistribution createAggressionPrior()
        {
            var dist = new HistDistribution(_options.priorNumBins);

            foreach (PlayerStats stats in _fullStatsList)
            {
                int raiseCount;
                int totalCount;
                stats.calculateAggression(out raiseCount, out totalCount);

                if (totalCount > _options.minSamples)
                {
                    dist.AddSample(raiseCount / (float)totalCount);
                }
            }

            dist.Normalize();
            return(dist);
        }
Пример #4
0
        private EstimatedAD estimateADPostFlop(PlayerStats playerStats, DifferencePair[] sortedOpponents, PostFlopParams postFlopParams)
        {
            Debug.Assert(playerStats != null);

            var priorBetRaise  = new HistDistribution(_options.priorNumBins);
            var priorCheckCall = new HistDistribution(_options.priorNumBins);
            var priorFold      = new HistDistribution(_options.priorNumBins);

            var cumulativeActionsStats = new ActionStats();
            int k = 0;

            for (int i = 0; (i < sortedOpponents.Length) &&
                 (k < _options.maxSimilarPlayers) &&
                 (k == 0 || sortedOpponents[i].Difference < _options.maxDifference); i++)
            {
                int playerInd = sortedOpponents[i].Index;

                if (_baseModels[playerInd].Aggression.Sigma < _options.maxBaseStatsSigma)
                {
                    ActionStats similarOponentStats = _fullStatsList[playerInd].getPostFlopStats(postFlopParams);

                    if (similarOponentStats.totalSamples() > _options.minSamples)
                    {
                        priorBetRaise.AddSample(similarOponentStats.betRaiseProbability());
                        priorCheckCall.AddSample(similarOponentStats.checkCallProbability());
                        priorFold.AddSample(similarOponentStats.foldProbability());

                        k++;
                    }
                    else
                    {
                        cumulativeActionsStats.append(similarOponentStats);
                    }

                    if (cumulativeActionsStats.totalSamples() > _options.minSamples)
                    {
                        priorBetRaise.AddSample(cumulativeActionsStats.betRaiseProbability());
                        priorCheckCall.AddSample(cumulativeActionsStats.checkCallProbability());
                        priorFold.AddSample(cumulativeActionsStats.foldProbability());

                        cumulativeActionsStats.clear();
                        k++;
                    }
                }
            }

            priorBetRaise.Normalize();
            priorCheckCall.Normalize();
            priorFold.Normalize();

            // Update prior sa statistikom igraca
            ActionStats startStats = playerStats.getPostFlopStats(postFlopParams);

            var estBetRaise  = estimateGaussian(priorBetRaise, startStats.BetRaiseSamples, startStats.totalSamples());
            var estCheckCall = estimateGaussian(priorCheckCall, startStats.CheckCallSamples, startStats.totalSamples());
            var estFold      = estimateGaussian(priorFold, startStats.FoldSamples, startStats.totalSamples());

            if (postFlopParams.ForcedAction())
            {
                var totalMean = estBetRaise.Mean + estCheckCall.Mean + estFold.Mean;
                var scale     = 1.0f / totalMean;

                estBetRaise  = estBetRaise.Scale(scale);
                estCheckCall = estCheckCall.Scale(scale);
                estFold      = estFold.Scale(scale);
            }
            else
            {
                var totalMean = estBetRaise.Mean + estCheckCall.Mean;
                var scale     = 1.0f / totalMean;

                estBetRaise  = estBetRaise.Scale(scale);
                estCheckCall = estCheckCall.Scale(scale);
                estFold      = new GaussianDistribution(0.0f, 0.0f);
            }

            return(new EstimatedAD(estBetRaise, estCheckCall, estFold, k, startStats.totalSamples()));
        }