File size: 1,004 Bytes
80c0c44
 
 
 
 
 
 
77e15e7
80c0c44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"""
rl/policy.py
Epsilon-greedy policy for exploration during training.
"""
from __future__ import annotations
import random
import torch
from drone_env.rl.model import PathQNet, ACTIONS


class EpsilonGreedyPolicy:
    """
    Selects actions using epsilon-greedy strategy.
    Epsilon decays linearly from eps_start → eps_end over decay_steps.
    """

    def __init__(self, eps_start: float = 1.0, eps_end: float = 0.05, decay_steps: int = 5000):
        self.eps = eps_start
        self.eps_end = eps_end
        self.decay = (eps_start - eps_end) / max(decay_steps, 1)
        self.step_count = 0

    def select_action(self, q_values: torch.Tensor) -> int:
        if random.random() < self.eps:
            return random.randint(0, len(ACTIONS) - 1)
        return int(q_values.argmax().item())

    def decay_epsilon(self):
        self.step_count += 1
        self.eps = max(self.eps_end, self.eps - self.decay)

    @property
    def current_epsilon(self) -> float:
        return self.eps