2009-10-28 27 views
6

我曾經寫過俄羅斯方塊AI,該俄羅斯方塊AI相當出色。我使用的算法(described in this paper)是一個兩步過程。確定在進化算法中權衡哪些輸入

第一步,程序員決定跟蹤對問題「感興趣」的輸入。在俄羅斯方塊中,我們可能有興趣跟蹤連續有多少間隙,因爲最小化間隙可以幫助更輕鬆地放置未來的棋子。另一個可能是柱子的平均高度,因爲如果你即將輸球,冒險是一個不好的主意。

第二步是確定與每個輸入相關的權重。這是我使用遺傳算法的部分。只要權重根據結果隨時間調整,任何學習算法都會在這裏執行。這個想法是讓計算機決定輸入與解決方案的關係。

使用這些輸入及其權重,我們可以確定採取任何行動的價值。例如,如果將直線形狀一直放在右列中,將消除4個不同行的間隙,那麼如果重量較高,此操作可能會得到非常高的分數。同樣,將它平放在頂部可能實際上會導致間隙,所以動作得分較低。

我一直想知道是否有辦法將學習算法應用到第一步,在那裏我們找到「有趣」的潛在投入。編寫一個計算機似乎是可能的,計算機首先學習什麼輸入可能是有用的,然後應用學習來權衡這些輸入。之前有沒有做過這樣的事情?它是否已被用於任何AI應用程序?

+1

+1我想在這個領域開始。我有幾個寵物演示程序,但沒有大的。有興趣看看你回答什麼樣的答案。 – 2009-10-28 18:15:09

回答

1

在神經網絡中,您可以通過查找與正在訓練的分類具有最強關聯性(正面或負面)的輸入來選擇「有趣」的潛在輸入。我想你可以在其他情況下做類似的事情。

+0

在這種情況下,「分類相關」是什麼意思? – Kai 2009-10-28 18:10:36

+0

假設你正在訓練一個神經網絡來將模式分類爲「字母A」或「不是字母A」。你有一堆訓練案例,你有一些數據,你知道它是否是答案。你可以用任意數量的方法對這些數據進行切片和裁切,每一種方式都是潛在的輸入。最好的潛在投入是與A或非A狀態顯示出強大數字相關性的投入。如果潛在的投入不變,那就沒用了。如果它隨機變化,那就沒用了。如果它與這種模式的A或不Aness協調變化,那就是黃金。 – chaos 2009-10-28 18:17:38

+0

啊,我明白了!我沒有想過使用預先存在的樣本數據(在俄羅斯方塊中很難想象)。實際上,我認爲recaptcha(http://recaptcha.net/learnmore.html)是這樣做的。直到我看完你的例子,它才發生。 – Kai 2009-10-28 18:21:59

0

我想我可能會通過將更原始的數據提供給學習算法來處理您所描述的問題。例如,俄羅斯方塊遊戲狀態可以用被佔用的單元格列表來描述。描述這些信息的一串位是適合於學習算法階段的輸入。實際上對此的培訓仍然充滿挑戰;你怎麼知道這些是否是有用的結果。我想你可以把整個算法放到一個單一的blob中,在這個blob中,算法被連續播放,並且輸出只是塊放置,爲後代選擇更高的評分算法。

另一種選擇可能是使用來自其他來源的大量劇本的語料庫;例如來自人類玩家或手工製作的ai的錄製的戲劇,並且選擇那些輸出與未來劇本中某個有趣的或者另一個有趣的事實緊密相關的算法,例如在接下來的10個動作中獲得的分數。

+0

我認爲你的第一個建議是改變問題所代表的模型。編寫代碼可能更容易,但我想知道它是否對學習有幫助。不過,我真的很喜歡使用其他來源的想法。 – Kai 2009-10-28 18:39:34

+0

我對自己的答案也不完全滿意。如果我不得不猜測,我想這可能會增加約2個數量級的學習時間。 – SingleNegationElimination 2009-10-28 18:52:43

0

是的,有一種方法。

如果您選擇M所選功能有2^M個子集,所以有很多值得關注的東西。 我會於以下內容:

For each subset S 
    run your code to optimize the weights W 
    save S and the corresponding W 

然後爲每一對S-W,您可以爲每一對摹遊戲並保存得分L用每一個。現在你有一個表是這樣的:

feature1 feature2 feature3 featureM subset_code game_number scoreL 
1   0   1   1   S1   1    10500 
1   0   1   1   S1   2    6230 
... 
0   1   1   0   S2   G + 1   30120 
0   1   1   0   S2   G + 2   25900 

現在你可以運行一些組件選擇算法(PCA的),並決定哪些功能是值得解釋scoreL。提示:在運行代碼以優化W時,播種隨機數生成器,以便針對相同的片段序列測試每個不同的「進化的大腦」。

我希望它對某件事有幫助!