簡體   English   中英

蛇游戲的深度Q學習

[英]Deep Q Learning For Snake Game

我正在基於Keras Plays Catch代碼的項目上工作。 我已將游戲更改為簡單的Snake游戲,為簡單起見,我在面板上將蛇形表示為圓點。 如果Snake吃了獎勵,它將獲得+5的分數,而擊中牆壁則將獲得-5的分數,並且每走一步將獲得-0.1的分數。 但這不是在學習策略,而是給出了可怕的結果。 這是我的游戲play功能

def play(self, action):
    if action == 0:
        self.snake = (self.snake[0] - 1, self.snake[1])
    elif action == 1:
        self.snake = (self.snake[0], self.snake[1] + 1)
    elif action == 2:
        self.snake = (self.snake[0] + 1, self.snake[1])
    else:
        self.snake = (self.snake[0], self.snake[1] - 1)

    score = 0
    if self.snake == self.reward:
        score = 5
        self.setReward()
    elif self.isGameOver():
        score = -5
    else:
        score = -0.1

    return self.getBoard(), score, self.isGameOver()

返回的結果是這樣的(1是蛇,3是獎勵,2表示牆):

 [[2. 2. 2. 2. 2. 2. 2. 2. 2. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 1. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 3. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 2. 2. 2. 2. 2. 2. 2. 2. 2.]]

這是我在qist上學習q的代碼

我不知道自己在做什么錯,但大多數游戲都會卡在一個循環中(上下左右或左右),或者直撞牆壁,並且很少有機會吃掉在碰壁之前先獲得獎勵。 我如何改進它並使它起作用?

如果您的蛇從未擊中獎勵,則可能永遠不會學會+5得分。 與其每次移動使用恆定的0.1懲罰,不如對每個圖塊使用基於距離的成本可能會有所幫助。 換句話說,您游戲中的代理人並不知道獎勵的存在。

我認為最終您將得到諸如A *路徑查找之東西。 至少試探法是相似的。


更新:

考慮到您發布的完整代碼,損失函數和得分不匹配! 得分高時,模型的損失是隨機的。

嘗試將游戲得分最大化作為您的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM