改进的二十一点让计算机赢得的不仅仅是失败

时间:2014-01-22 22:24:21

标签: algorithm artificial-intelligence pseudocode

我想创建某种算法,让电脑赢得比在改装的二十一点游戏中失败更多。

红牌是负面的,黑卡是正面的。

我会用伪代码编写它我想确定计算机赢得更多游戏的概率部分(最后一行)。

这是我的尝试:

//Hand out 2 random cards for each person selection of 2,3,4,5,6,7,8,9,J,Q,K,A. 
//Store these in an array with their equivalent value. 
Card =[2,3,4,5,6,7,8,9,J,Q,K,A]
Also, colour of card is random red or black.
Value_AI=0
Value_Human=0
Bust_Human=0
Bust_ AI=0

All of the below is in a big loop that loops each time a player is bust

Do this for both players, until Value_AI or Value_Human>21
If colour==red then
Value=value – card
Else
    Value=value+card

If Value_AI >21 then
    Bust_ AI+=1
    Print “Computer has bust”
    Break 

If Value_Human >21
        Bust_ human+=1
        Print “You have bust”
        Break

    Else
        Hand out another card for both

If Bust_ AI> Bust_ human then
**//Increase the probability of getting an ace and a card with a value of 10 for the computer**

2 个答案:

答案 0 :(得分:2)

你可以让人类走在电脑前。然后,当它们都被破坏时,默认情况下计算机将获胜,因为计算机不需要运行。这应该将公平的游戏变成一个有利于计算机的游戏。

答案 1 :(得分:1)

现在,你的伪代码似乎没有让任何一个玩家选择停止接收卡的选项,这是在二十一点中做出的核心选择。收到最新的卡后,您需要让AI选择是否需要其他卡。这可能是算法中用于在AI中构建实际智能的最佳点,因此您可以增加其获胜概率,而无需像您在伪代码中建议的那样进行硬编码。最简单的选择是让你的AI计算下一张卡将其值发送到21的概率。这里有一些伪代码(看起来你在绘制它们之后从牌组中删除了卡片,所以我不是考虑到这一点):

highest_safe = 21 - value_AI
n_safe_cards = highest_safe - 1 + 13 //the second 13 is for all of the red cards and the - 1 is because 1 is not a card
prob_safe = n_safe_cards/26 //since there are 28 possible cards (I'm assuming you didn't mean to leave 10 off your list)
if prob_safe < .5:
    stop taking cards

这会导致你的AI赢得更多,因为它会使它以最佳状态发挥。如果你想让它更容易被击败,你可以在它决定停止拍卡的门槛上添加一些噪音。