【发布时间】:2017-03-09 12:40:34
【问题描述】:
我正在编写一个 AI 来玩 5 张牌扑克,如果你愿意,你可以从手上丢弃一张牌,然后将其换成另一张随机发的牌。我的 AI 可以评估每一手可能的牌 as shown in the answer to my previous question。简而言之,它为每一手可能的牌分配一个唯一值,其中较高的值与更好/获胜的手相关。
我现在的任务是编写一个函数,int getDiscardProbability(int cardNumber),它给我的 AI 一个 0-100 的数字,与它是否应该丢弃这张牌有关(0 = 绝对不丢弃,100 = 肯定丢弃)。
我想到的方法是通过将这张牌与牌组中的其他牌交换来计算所有可能的手牌(假设现在还剩下 47 张牌),然后将它们的每一个值与当前手牌进行比较,数一数有多少更好,所以(count / 47) * 100 是我的概率。
然而,这个解决方案只是寻找更好的手,而不是区分一只手有多好。例如,如果我的 AI 有手牌23457,它可以将 7 换成 K,产生稍微好一点的手(更好的高牌),或者它可以将 7 换成 A 或 6,完成顺子- 比高 K 好得多的牌(价值高得多)。
所以,当我的 AI 计算这个概率时,当它看到通过获得 K 可以改进手时,它会增加相同的数量,而不是在看到通过获得 A 可以改进手时。或 6. 正因为如此,在计算这个概率时,我不知何故需要考虑我的手牌和每个可能的手牌的价值差异。实现这一目标的好方法是什么?
【问题讨论】:
-
听起来你不应该关心牌本身,而是整手牌,所以你需要首先评估可能的 4 手牌(考虑到所有 5 种不同的 4 手牌)和赔率获得每个人需要的卡。然后根据“机会”分数评估当前分数。
-
你在“评估可能的 4 张牌手(考虑所有 5 种不同的 4 张牌手)”时让我有点迷失了——“可能的 4 张牌手”是指 4 的所有可能组合吗?一副牌里的牌?而“5张不同的4张牌”又是从哪里来的呢?
-
查看expected value。您可能想要丢弃给您最高期望值的牌(如果它高于您当前手牌的值)。
-
@KOB 你手上有 5 张牌,所以你有 5 个“4 牌”组合,所以首先你评估你当前的手牌,然后评估所有这些 4 牌手,然后是转换的几率将那些 4 张牌变成比现在更好的 5 张牌。
-
@NicoSchertler 我刚刚发布了一个类似的问题,关于我想要实现的预期值及其问题。主要问题是该函数需要返回一个整数 0-100,这将作为我的 AI 决策的指南。如果我使用期望值,我是否应该找到产生最高正期望值的要丢弃的卡片并告诉我的 AI 100% 丢弃这些卡片? math.stackexchange.com/questions/2178086/…
标签: algorithm artificial-intelligence probability poker