估算德州扑克限注机器人的有效/隐含赔率

时间:2018-07-21 04:26:34

标签: c++ statistics probability montecarlo poker

最近,我一直在研究Texas Holdem Limit,该比赛利用Monte Carlo来确定估计的获胜赔率,并返回执行最多的+ EV动作。

我正在遵循类似于CodeProject中的CatchExAs's Pokerbot Article的结构,该结构将获胜几率与阈值(例如CallableThresh,RaisableThresh)进行比较,以确定理想的动作。但是,我使用阈值按比例放大底池赔率,并将缩放后的底池赔率与当前获胜赔率进行比较,而CatchExAs计算了分层阈值以直接比较获胜赔率。

我已经通过让机器人与自己进行对抗来测试它们的功能。当机器人获得他们认为值得加注的牌手时,就会导致问题的产生,从而导致彼此重新举牌直到筹码耗尽。我认为问题是机器人没有考虑任何有效几率或暗示几率。

计算阈值:

void DummyStrategy::CalculateMinWinRates()
{
    Snapshot CurrentShot = Orchastrator->GetAI()->GetSnapshot();

    if (CurrentShot.Pot == 0 || CurrentShot.RequiredAnte == 0)
    {
        MinWinRate_Calling = Thresh_Calling * (100.0 / CurrentShot.PlayerAmt);
        MinWinRate_RaisingBetting = Thresh_RaisingBetting * (100.0 / CurrentShot.PlayerAmt);

        MinWinRate_Calling = MinWinRate_Calling > 100.0 ? 100.0 : MinWinRate_Calling;
        MinWinRate_RaisingBetting = MinWinRate_RaisingBetting > 100.0 ? 100.0 : MinWinRate_RaisingBetting;

        return;
    }

    double CallValue = (double)CurrentShot.RequiredAnte - (double)CurrentShot.CurrentAnte;
    double PotOdds = CallValue / (CallValue + (double) CurrentShot.Pot);
    MinWinRate_Calling = Thresh_Calling * PotOdds * 100.0;
    MinWinRate_RaisingBetting = Thresh_RaisingBetting * PotOdds * 100.0;

    MinWinRate_Calling = MinWinRate_Calling > 100.0 ? 100.0 : MinWinRate_Calling;
    MinWinRate_RaisingBetting = MinWinRate_RaisingBetting > 100.0 ? 100.0 : MinWinRate_RaisingBetting;
}

阈值上升:

BettingAction DummyStrategy::DetermineIdealAction()
{
    CalculateMinWinRates();

    double CurrentWinRate = Orchastrator->GetAI()->DetermineWinRate();

    if (CurrentWinRate >= MinWinRate_RaisingBetting)
        return IsActionAvaliable(BettingAction::Bet) ? BettingAction::Bet : BettingAction::Raise;

    else if (CurrentWinRate >= MinWinRate_Calling)
        return BettingAction::Call;

    else
        return IsActionAvaliable(BettingAction::Check) ? BettingAction::Check : BettingAction::Fold;

    return BettingAction::NONE;
}

所以我可以问两个问题:

  1. 由于没有完美的信息就无法精确确定有效或隐式赔率,是否有办法估算它们?

  2. 否则,机器人在执行移动之前如何考虑未来的加注/下注?

0 个答案:

没有答案