Untitled

                Never    
class ValueIterAgent(): # clase ValueIterAgent
  #función constructora
	def __init__(self,env,gamma):
		self.max_iterations = 1000
		self.gamma = gamma
		self.num_estados=env.observation_space.n
		self.num_actions=env.action_space.n
		self.state_prob = env.env.P # tabla T(s,a,s')
		self.values = np.zeros(env.observation_space.n) # valores de utilidad de los estados
		self.policy = np.zeros(env.observation_space.n) # política
    
  #función de iteración de valores
	def value_iteration(self):
	    for i in range(self.max_iterations): # hasta un nro máximo de iteraciones
	        prev_v = np.copy(self.values)
	        for state in range(self.num_estados): # por cada estado
	            Q_value = []
	            for action in range(self.num_actions): # por cada acción 
	                next_states_rewards = []
                  # dado un estado y una acción, por cada tupla:
                  # P(transicion de estado) + próximo estado + recompensa
	                for trans_prob, next_state, reward_prob, _ in self.state_prob[state][action]: 
	                   
	                    next_states_rewards.append((trans_prob * (reward_prob + self.gamma * prev_v[next_state]))) 
	                
	                Q_value.append(sum(next_states_rewards)) # suma de todas las recompensas futuras

	            
	            self.values[state] = max(Q_value) # asignar la mayor utilidad futura para ese estado
	            
	    return self.values
  
  #función de extraer la política
	def extract_policy(self):
	   
	    for s in range(self.num_estados):
	        q_sa = np.zeros(self.num_actions)
	        for a in range(self.num_actions):
	            for next_sr in self.state_prob[s][a]:
                
	                # next_sr es una tupla de (probability, next state, reward, done)
	                p, s_, r, _ = next_sr
                  
	                q_sa[a] += (p * (r + self.gamma * self.values[s_]))
                  
	        self.policy[s] = np.argmax(q_sa)   
          
  # regresa una acción dada una observación del ambiente, según la política
	def choose_action(self,observation):
			
		return self.policy[observation]

Raw Text