Epsilon-greediness
En este ejercicio, pondrás en práctica una función select_action()
que aplica la degradación épsilon-greediness.
Epsilon-greediness animará a tu agente a explorar el entorno, ¡lo que debería mejorar el aprendizaje!
La programación de la fidelidad épsilon determina un umbral \(\varepsilon\) para cualquier step
dado, según la fórmula:
$$\varepsilon = end + (start-end) \cdot e^{-\frac{step}{decay}}$$
select_action()
debe devolver una acción aleatoria con probabilidad \(\varepsilon\), y la acción con mayor valor Q con probabilidad \(1-\varepsilon\).
Este ejercicio forma parte del curso
Aprendizaje profundo por refuerzo en Python
Instrucciones de ejercicio
- Calcula el umbral
epsilon
para el valor dado destep
. - Saca un número al azar entre 0 y 1.
- Con la probabilidad
epsilon
, devuelve una acción aleatoria. - Con probabilidad
1-epsilon
, devuelve la acción con mayor valor Q.
Ejercicio interactivo práctico
Pruebe este ejercicio completando este código de muestra.
def select_action(q_values, step, start, end, decay):
# Calculate the threshold value for this step
epsilon = end + (____) * math.exp(____ / ____)
# Draw a random number between 0 and 1
sample = random.____
if sample < epsilon:
# Return a random action index
return random.____
# Return the action index with highest Q-value
return torch.____.item()
for step in [1, 500, 2500]:
actions = [select_action(torch.Tensor([1, 2, 3, 5]), step, .9, .05, 1000) for _ in range(20)]
print(f"Selecting 20 actions at step {step}.\nThe action with highest q-value is action 3.\nSelected actions: {actions}\n\n")