示例#1
0
        public void calculatePFR(out int betRaiseCount, out int totalCount)
        {
            ActionStats totalAD = new ActionStats();

            for (int i = 0; i < _allPreFlopParams.Count; i++)
            {
                if (_allPreFlopParams[i].NumRaises == 0)
                {
                    totalAD.append(PreFlopStats[i]);
                }
            }

            betRaiseCount = totalAD.BetRaiseSamples;
            totalCount    = totalAD.totalSamples();
        }
示例#2
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()));
        }