纸牌游戏中的神经网络

时间:2018-09-10 05:55:28

标签: algorithm machine-learning neural-network genetic-algorithm game-ai

我对神经网络非常陌生,想知道如何(甚至可以)为纸牌游戏AI创建神经网络。所讨论的纸牌游戏是31版本,您可以选择是否要敲门,如果现在要选择,则选择绘制已知卡牌还是未知卡牌。最后,您要确定要丢弃的目标是得分最高达到31分的卡片(该卡片必须穿着同一套西装)。

我的职责是简单地实现以下三个功能的逻辑:Knock()(无论是否敲门,返回布尔),DrawCard(卡牌)(是否绘制弃牌堆的顶部卡,返回bool,并以丢弃桩的最高牌为参数),以及PlaceCard()(要从手中丢弃的牌,将返回Card对象)。

如果对手从弃牌堆中抽出一张牌(如果是,则是什么牌),或者如果他们抽出了一张未知的牌,我自己的牌和本轮,我拥有的数据是我手上的最高分。

由于我是神经网络的新手,所以我什至不知道这是否是我可以做的事情,如果可以的话。

2 个答案:

答案 0 :(得分:0)

是的,您可以使用神经网络来实现您的AI。给定游戏的当前状态作为输入,您想拥有一个输出下一步动作的网络。要训​​练这样的网络,您将不得不让AI与自己抗衡。

话虽如此,如果您是机器学习/神经网络的新手,那么以上内容并不简单,也不是一个好的开始。您可能要研究的一般区域是Reinforcement Learning

David Silver's Lecture on Reinforcement Learning是一个非常好的资源。在其中一个教程中,您必须为Black Jack编写一个AI,这对您的问题很有帮助。

答案 1 :(得分:0)

是的,您绝对可以使用神经网络来解决二十一点问题。但是,似乎您只是在开始强化学习,所以我不建议您使用神经网络来解决这个简单的问题。下面,我将为您提供传统的RL方法。

传统方法:

# First number is what the dealer has, 2nd number is what you have.
# Since dealer always goes after you, you're only concerned with the dealers 1st card
# which cannot be greater than 10.  In the end, you have 210 states, and 2 actions per state

states = [[1, 1], [1, 2], ..., [1, 21], ...[10, 21]]   
actions = [hit_me, stay]  # Ask dealer for another card or stay
q_matrix = np.zeros([num_states, num_actions])   

def q_learning_action(state, q_matrix):
    state_actions = q_matrix[s, :]  # Q-values denote how good each action in that state is
    action = np.argmax(state_actions)   # Pick the action with highest Q-value
    return action

def q_learning_update(state, action, reward, state_2):
    # Perform the action in your blackjack game and return reward and the new state
    reward, s2 = game(action)
    # Update Q matrix
    q_matrix[state, action] = (1 - learning_rate)q_matrix[state, action] + learning_rate(reward + discount*np.argmax(Q[state_2, a]))

希望通过本示例,您可以看到强化学习中的一般信息流。该算法基本上说如下:

  1. 鉴于此状态,我该怎么办?
  2. 查看Q矩阵,看看哪个动作(命中或保持)产生更高的Q值(即更好的动作)
  3. 选择该动作
  4. 查看在该状态下采取该行动的奖励(例如,您距离21岁有多近)
  5. 让RL学习在该状态下采取该行动的奖励。

以后,您还可以允许您的RL代理商探索以获得更好的奖励。基本上,不要让您的RL总是追随最高的Q值,而是让它在某些时间步长随机选择一个动作,以允许其探索不同的动作。