使用 random.choice 列出索引超出范围错误

use*_*463 7 python-2.7 q-learning

当我运行我的程序时,出现以下错误,该程序具有下面定义的函数。我认为这是

valid_actions = filter(lambda x: x != random.choice(maxQactions)
Run Code Online (Sandbox Code Playgroud)

导致错误的部分。有谁知道问题是什么,或者建议如何解决它?谢谢。

错误:

choose_action
    action = random.choice(valid_actions)
  File "/Users/UserName/anaconda/lib/python2.7/random.py", line 275, in choice
    return seq[int(self.random() * len(seq))]  # raises IndexError if seq is empty
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

代码:

def choose_action(self, state):


        self.state = state
        self.next_waypoint = self.planner.next_waypoint()

        action_selections = self.Q[state]

        maxQ = max(action_selections.items(), key=lambda x: x[1])[1]

        maxQactions = []
        for action, Q in self.Q[state].items():
            if Q == maxQ:
                maxQactions.append(action)


        if self.learning:
            choose_using_epsilon  = random.random() < 1 - self.epsilon
            if not choose_using_epsilon:
                valid_actions = filter(lambda x: x != random.choice(maxQactions), 
                    Environment.valid_actions)
                action = random.choice(valid_actions)
            else:
                action = random.choice(maxQactions) #maxQaction
        else:
            action = random.choice(Environment.valid_actions)
        return action
Run Code Online (Sandbox Code Playgroud)

Pra*_*hra 4

参考https://docs.python.org/2/library/random.html

如果 seq 为空, random.choice(seq) 会引发 IndexError 。在您的情况下,IndexError 发生在

'action = random.choice(valid_actions)'

我怀疑 valid_actions 是否为空。