2016-02-16 36 views
0

在一個紙牌遊戲中有兩個玩家,每個玩家發行5張牌(標準52牌組),然後一些任意功能決定勝出玩家。目標是預測遊戲的結果,給出每個玩家持有的5張牌。訓練數據可以是這個樣子:訓練一個神經網絡來預測紙牌遊戲的贏家

Player A  Player B  Winner 

AsKs5d3h2d JcJd8d7h6s 1 
7h5d8s9sTh 2c3c4cAhAs 0 
6d6s6h6cQd AsKsQsJsTs 0 

當「球員」列是5手牌,以及「勝者」列1當玩家A贏了,並0當玩家A已經丟失。

應該有朝向手的順序無差異,使得訓練後,供給網絡鏡像等輸入數據:

Player A  Player B 

2d3d6h7s9s TsTdJsQc3h 

Player A  Player B 

TsTdJsQc3h 2d3d6h7s9s 

將總是預測相反的結果。

這也應該是無所謂的手本身內的牌的順序,這樣AsKsQsJsTs相同JsTsAsKsQs,這是一樣的JsQsTsAsKs

什麼是一些合理的方法來構建一個神經網及其培訓數據來解決這個問題?

+1

ooc爲什麼你覺得神經網絡是解決這個監督學習問題最合適的結構?你有沒有用NN的類似問題? – javadba

回答

1

您將需要一個有104個輸入(玩家*卡數)的網絡 前52個輸入對應於玩家A,下52個對應玩家B. 將所有輸入初始化爲0,然後對於每張卡每個玩家都有,將相應的輸入設置爲1.

對於輸出層,通常有兩種選擇進行二元分類。你可以有一個輸出神經元,並且如果這個神經元的輸出大於某個閾值,則玩家A獲勝,否則玩家B獲勝。或者你可以有兩個輸出神經元,看看哪一個產生最高的輸出。兩者通常工作正常。

對於培訓數據,而不是諸如「AsKs5d3h2d」之類的東西,您需要一個熱點編碼,例如「0001000001000000100100000100000000011001000000001001」(假設有104個數字,其中10個是1,其餘爲0)輸出數據,你只需要一個1或0對應誰贏了(在有一個輸出神經元的情況下)

這將使你的網絡不變的卡的順序(一個給定的手的所有可能的命令將創建相同的輸入)並且爲了交換玩家A和B的手並得到相反的結果,這對任何訓練有素的網絡都應該是自然而然的。

+0

謝謝,這解釋得很好。有沒有一點使用單熱編碼沒有意義使用更多?例如讓我們想象一張500張牌(獨特牌),每個牌手都有一張5張牌。在這種情況下,您將以990 0和10 1結束。 –

+0

我並沒有在這方面進行任何實驗或讀取,但我可以說對於圖像分類來說,看到具有超過100,000個輸入的網絡(200x200 RGB圖像= 120k輸入)並不罕見,所以我猜測一個熱點對於那麼多的輸入來說還是可以的。 – Frobot

0

首先,在解決這個問題之前,您應該瞭解神經網絡(NN)的使用。 NN試圖找出輸入和輸出之間的複雜關係。 (這裏你的輸入是五張牌,輸出是預測的等級)。

這裏在這個問題中,輸入和輸出之間的關係可以很容易地制定。即您可以輕鬆選擇一些聲明最終獲勝者的規則。

還是像其他任何問題一樣,這個問題也可以用NN來處理。首先你需要準備你的數據。

總共有52種輸入可能。所以,在數據集中取52列。現在在這52列中,您可以填寫三種類別的分類數據。它可能屬於'A'或'B'或不屬於任何人。 'C'和輸出可以是勝利者。

現在你可以使用NN進行訓練。