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

时间:2017-09-28 05:05:47

标签: python-2.7 q-learning

当我运行我的程序时,我收到以下错误,该程序具有下面定义的功能。

我认为这是

valid_actions = filter(lambda x: x != random.choice(maxQactions)

造成错误的部分。有谁知道这是什么问题,或建议如何解决它?感谢。

错误:

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

代码:

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

1 个答案:

答案 0 :(得分:0)

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

如果seq为空,

random.choice(seq)会引发IndexError。在您的情况下,IndexError出现在

&#39; action = random.choice(valid_actions)&#39;

我怀疑valid_actions是否为空。