我正在为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