rl-gridworld / agent.py
MuhammadOsamaNusrat's picture
Upload 7 files
bbf97b5 verified
Raw
History Blame Contribute Delete
930 Bytes
import random
from collections import defaultdict
class RLAgent:
def __init__(self, actions, alpha=0.1, gamma=1.0, epsilon=0.1, method='sarsa'):
self.Q = defaultdict(lambda: {a: 0.0 for a in actions})
self.visits = defaultdict(int)
self.alpha = alpha
self.gamma = gamma
self.epsilon = epsilon
self.actions = actions
self.method = method
def choose_action(self, state):
self.visits[state] += 1
if random.random() < self.epsilon:
return random.choice(self.actions)
return max(self.Q[state], key=self.Q[state].get)
def update(self, s, a, r, s_, a_):
predict = self.Q[s][a]
if self.method == 'sarsa':
target = r + self.gamma * self.Q[s_][a_]
else:
target = r + self.gamma * max(self.Q[s_].values())
self.Q[s][a] += self.alpha * (target - predict)