我正在爲Python編碼類編寫一個項目,我有一個問題。我正在編寫一個Reversi引擎,它會在遊戲中看到幾個動作,然後選擇它認爲最好的動作。雖然我知道python不是一種理想的語言(因爲它不如其他語言那麼快),但我認爲可以編寫至少可以運行的代碼,但可能會有點慢。我應該使用哪些模塊來創建遊戲樹?
這就是說,我正在嘗試創建兩個表格:一個遊戲板(認爲矩陣)和一個保存整數的遊戲樹。我想要使用高效的內存和快速添加,刪除和讀取條目。
我現在使用的電路板效率不高。我想問一下任何人會建議什麼模塊(有關如何使用它們的說明)來編寫一些可以使內存等同但內存較輕的模塊(例如:array,numpy;除了我不知道如何使用這些):
self.board = [[0, 0, 0, 0, 0, 0, 0, 0,],
[0, 0, 0, 0, 0, 0, 0, 0,],
[0, 0, 0, 0, 0, 0, 0, 0,],
[0, 0, 0, 1, 2, 0, 0, 0,],
[0, 0, 0, 2, 1, 0, 0, 0,],
[0, 0, 0, 0, 0, 0, 0, 0,]
[0, 0, 0, 0, 0, 0, 0, 0,],
[0, 0, 0, 0, 0, 0, 0, 0,]]
對於遊戲樹我有想法取決於列表清單應該是多麼輕量級。我正在寫在標準Python工作的思路是相似的:
tree_zero = %
tree_one = [%, %, %]
tree_two = [[%, %, %], [%, %, %], [%, %, %]]
tree_thre = [[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]]],
tree_four = [[[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]]],
[[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]]],
[[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]]]]
其中每個%是上面給出的主板之一(而且是理想更多:不是動不動就正好有三個選項)。但是這是一個緩慢而沉重的對象,python很難有效地使用內存(特別是當我比4層更深時)。
如果有人曾經使用過這樣的程序,或有高效模塊導入的想法讓我知道!
對於遊戲樹的示例,請考慮wikipedia page,尤其是頁面上的第一張圖片。
編輯:理想情況下,我想進一步看比前進四步,這只是前四個級別的樣子。此外,將會有多個給定樹木的副本浮動以供使用。速度對於像這樣呈指數增長的東西很重要。
既然你只是展望三招,這應該不是特別的記憶密集型。你有任何代碼嗎? – 2012-04-12 19:51:21
您可能想查看一些[關於此主題的其他問題](http://stackoverflow.com/search?q=reversi)。 – 2012-04-12 19:56:10
Python列表實際上是很好的對象,如果你想要的只是隨機訪問其中一個項目 - 列表列表本身沒有任何錯誤。你可以自己構建一個樹對象,它允許你以更易讀的形式檢索葉節點或子樹 - 但是如果那裏的內部數據保存爲列表的列表就可以了 – jsbueno 2012-04-12 20:15:05