【发布时间】:2014-11-29 06:38:45
【问题描述】:
如果我在 python 中执行这些代码行:
states = itertools.product("012",repeat = 16)
states = list(states)
然后我用的内存比我笔记本电脑上的还多。有没有解决的办法?我需要这个状态列表,这样当我生成一个新状态时,我可以更新它在列表中的值。
编辑: 我将这些状态存储为 4x4 网格,其中 0、1 和 2 是网格上每个正方形的可能状态。存储的值实际上是一个 16 长的列表,它说明了从当前状态移动到网格上的任何方块的奖励是什么。用 -np.inf 标记不可能的动作。随着游戏的进行,导致从某些状态获胜的动作的奖励会增加,因此机器人更有可能在未来做出该动作。
例如:井字游戏的简化示例。
x| |o
| |
o| |
此状态将被转换为一个 9 长列表“102000200”,然后在所有可能状态的列表中查找它以查看下一个最佳移动是什么。在这种情况下,这将是 x 的中间位置。
【问题讨论】:
-
更清楚地描述您的问题。什么状态?更新什么值?
-
大约有 4300 万个州。您能否不使用稀疏表示,例如一个字典(或
defaultdict),其中每个键将是一个字符串元组(或者只是字符串,或者假设字符串是基数为3的数字的整数)? -
更新了更多信息。我不确定字典将如何节省空间,是否仍会存储尽可能多的值?