0

我构建了一个 3D 数组self.QL={} 并用 0“擦除”该数组:

for loop0 in range(50):
    for loop1 in range(50):
        for loop2 in range(self.actions):
            self.QL[loop0, loop1, loop2] = 0

但是当我运行程序并尝试从数组中获取一个值时,它会抛出错误:

File "Bots/QL.py", line 135, in _chooseaction
self.vQ = self.QL[state[0],state[1],a]
KeyError: (0, 63, 0)

在第 135 行,我有:

def _chooseaction(self, state):
    self.vQ = 0
    self.action = 0
    self.temp = -1000

        for a in range(self.actions):
         self.vQ = self.QL[state[0],state[1],a]
           if self.vQ > self.temp:
             self.temp=self.vQ
             self.action=a

          return self.action

我做错了什么?

4

1 回答 1

2

state[1]具有值 63,但您仅使用 0 到 49 的值对其进行了初始化。

这就是为什么它说密钥 (0, 63, 0) 不存在。

也许您可以使用默认字典?

from collections import defaultdict

self.QL = defaultdict(int)

现在 self.QL 基本上是一个字典,对于它没有的任何值都是 0。

于 2014-01-08T19:21:15.987 回答