2017-09-28 3 views
0

Je reçois l'erreur ci-dessous lorsque j'exécute mon programme, qui a la fonction définie ci-dessous. Je pense que c'est leindex de liste erreur hors plage utilisant random.choice

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

qui provoque l'erreur. Est-ce que quelqu'un voit quel est le problème ou suggère comment le résoudre? Merci.

Erreur:

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 

code:

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 
+0

Très probablement, 'maxQactions' est nul, pouvez-vous le vérifier? – user10089632

Répondre

0

Reportez-vous à https://docs.python.org/2/library/random.html

random.choice (seq) soulève IndexError si seq est vide. Dans votre cas, IndexError est survenue à

'action = random.choice (valid_actions)'

Je doute que valid_actions est vide.