2014-05-08 37 views
-2

我讀thisAI學習的最佳/最簡單的模塊?

我該如何讓AI學會從零開始玩遊戲?舉個例子,讓我們假設AI去玩二十一點,把所有的分裂,卡片放在甲板上等等,AI可以打或者站,它不知道它會發生什麼,直到它開始失去遊戲,它應該知道打得太多會讓你輸掉,所以站得太早。我讀到這就是所謂的鋼筋學習。但我不知道如何實現它,使用什麼模塊等...

我應該從哪裏開始?

我的最終目標是創造一種遊戲,用戶和人工智能玩的不是一對一,而是兩人對抗遊戲機制[不合作],都學會玩。遊戲每隔一段時間就會改變一次,新的機制會使玩家和AI的遊戲變得更加困難。 AI可以通過玩遊戲來學習,也可以通過觀看玩家輸贏來學習。我不希望電腦學得太快,我想讓兩個人都在同一個'地面上'......也許最後一個級別是玩家可以玩AI。我去正確的地方,或者我應該嘗試一些其他的方法?

編輯:我認爲這將是太寬泛。所以我搜索了一下ML和AI,並且發現了一些可能有用的模塊,scikit-learn,PyBrain,neurolab以及RLToolkit。前兩個我並沒有真正理解如何開始它,對於像我這樣的新手來說,文檔是非常不清楚的,我還沒有嘗試過neurolab,因爲我沒有真正理解什麼是人工神經網絡[ ANN]以及它如何能夠幫助我,而最後一個,更具體的鋼筋學習沒有任何文檔。

+1

我討厭這樣說,但我認爲這個問題太廣泛了,無法在StackOverflow上生效。 – jedwards

+0

根本沒有答案,但是您可能會發現「從頭開始」這個短語比「從零開始」更常用 - 也許這會幫助您找到更多資源。 –

回答

4

雖然這不是一個完整的答案,其基本原理雲:

凡結果是不可預知的,當前的狀態+可能的行動=結果。因此,對於任何給定的狀態(在具有特定數量/組合的牌的情況下,可能與其他具有許多未知牌的牌,或者自從上次洗牌後已經看到的某些牌一起),存在你可以做的可能移動數量(點擊,站立)。然後你會嘗試任何一個,並記錄是否給你一個好的或不好的(或在兩者之間)結果。下次看到相同的當前狀態時,您會看到哪種可能的移動給了您迄今爲止最好的統計結果(隨機性百分比)。

凡出

如果您有多個動作,和你沒有得到實際結果到最後,你會保留所有的軌道(州+試過移動)爲止;一旦你得到了結果,你就可以將其應用於每一步。

完成此操作後,您可以開始玩大量的遊戲,並且它會變得更好。

訣竅通常是弄清楚構成「狀態」的是什麼。有越多可能的狀態,在AI變好之前需要玩的遊戲越多,數據庫也就越大。在二十一點,你可能只有卡牌數量的總和(可以給你20個狀態),或者可能包括有多少個卡牌(這可能會給你,我想也許是大約40個州) ;它可能包括其他玩家有多少張牌;它可能包括你手中的哪些值,但不包括套裝(如果你有4個ace,你知道沒有其他人有一個ace),或者可能包括(毫無意義地爲Blackjack)訂購一套牌。

在某些情況下,「狀態」可能更抽象。例如,在國際象棋的情況下,有許多可能的「國家」來學習它們,我們必須進行抽象。我不知道這通常用於什麼。也許什麼是攻擊什麼,什麼在捍衛什麼,有多少塊被什麼覆蓋,哪些塊被什麼等等所覆蓋。或

您可能還想考慮什麼構成「好」和「壞」結果。你可能會認爲,對於二十一點而言,勝利是好的,虧損是壞的,這就是它的全部。然而,要避免的不僅僅是失敗:做出一個無效的舉動。在二十一點的例子中,假設你的人工智能不知道規則,如果你有任何一隻手而不是一對,那麼分裂是遠比可能失敗的更糟糕的事情。如果你把它算作「損失」,它最終會得到暗示並停止這樣做。