<jupyter_start><jupyter_text>TD LambdaEn este caso utilizaremos el siguiente ambiente:![](imagenes/Ambiente.JPG)Para ejemplificar como funcionaría con una política aleatoria, en este caso la política decidirá con igual probabilidad moverse hacia la izquierda o derecha, la peculiaridad de este ambiente es que sólo se recompensa cuando se llega al estado final de la derecha, para el estado de la izquierda no hay premio alguno.<jupyter_code>import numpy as np
from ambiente_cadena import Cadena

np.random.seed(666)
def politica():
    return np.random.choice([-1,1])
numero_de_estados = 7 #número de estados del ambiente.

valores = np.zeros(numero_de_estados) # se inicializará los valores de los estados en 0.
elegibilidad = np.zeros(numero_de_estados) # con este vector se llevará la cuenta de los estados visitados.

ambiente = Cadena() #se inicializa el ambiente.
episodios = 2000 #número de episodios.
contador = 0

# variables del algoritmo

lambd = 0.7 #variable lambda de TD(lambda).
alpha = 0.25 #variable por la que se multiplica el error. 
gamma = 0.7 #variable por la cual verá reducido la elegibilidad de cada estado.


while True:
    accion = politica() #se genera una acción.
    estado_anterior = ambiente.estado_actual()
    recompensa, nuevo_estado, _, final_episodio = ambiente.movimiento(accion)
    elegibilidad *= lambd* gamma
    elegibilidad[estado_anterior] += 1.0
    td_error = recompensa + gamma * valores[nuevo_estado] - valores[estado_anterior]
    valores += alpha * td_error * elegibilidad
    if final_episodio:
        elegibilidad = np.zeros(numero_de_estados)
        ambiente = Cadena() #reiniciamos el ambiente
        contador+=1 #se suma un episodio mas terminado
        if contador % 400 == 0:
            print('Episodio :', contador)
    if contador == episodios:
        break
valores[1:6] #valor final de cada estado.<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0753821823932525, 'fraction_numerical': 0.014760147601476014, 'mean_word_length': 4.185792349726776, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '582471', 'license': 'MIT', 'n_tokens_mistral': 660, 'n_tokens_neox': 639, 'n_words': 207, 'path': 'RL-5-PrediccionesSinModelo/TD-Lambda.ipynb', 'repo_name': 'miguelsilva15/Blog-AprendizajePorRefuerzo', 'size': '1897'}