Epsilon-greediness
Neste exercício, você implementará uma função select_action()
que aplica a degradação do épsilon-greediness.
A gratidão ao Épsilon incentivará seu agente a explorar o ambiente, o que deve melhorar o aprendizado!
O cronograma de epsilon-greediness determina um limite \(\varepsilon\) para qualquer step
, conforme a fórmula:
$$\varepsilon = end + (start-end) \cdot e^{-\frac{step}{decay}}$$
select_action()
deve retornar uma ação aleatória com probabilidade \(\varepsilon\) e a ação com o valor Q mais alto com probabilidade \(1-\varepsilon\).
Este exercício faz parte do curso
Aprendizado por reforço profundo em Python
Instruções de exercício
- Calcule o limite
epsilon
para o valor fornecido destep
. - Sorteie um número aleatório entre 0 e 1.
- Com probabilidade
epsilon
, retorne uma ação aleatória. - Com probabilidade
1-epsilon
, retorne a ação com o valor Q mais alto.
Exercício interativo prático
Experimente este exercício preenchendo este código de exemplo.
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")