import torch
from mushroom_rl.algorithms.value.dqn import DQN
[docs]
class MaxminDQN(DQN):
"""
MaxminDQN algorithm.
"Maxmin Q-learning: Controlling the Estimation Bias of Q-learning"
Lan Q. et al. 2020.
"""
[docs]
def __init__(self, mdp_info, policy, approximator, n_approximators, **params):
"""
Constructor.
Args:
n_approximators (int): the number of approximators in the ensemble.
"""
assert n_approximators > 1
self._n_approximators = n_approximators
super().__init__(mdp_info, policy, approximator, **params)
def fit(self, dataset):
self._fit_params['idx'] = torch.randint(self._n_approximators, (1,)).item()
super().fit(dataset)
def _initialize_regressors(self, approximator, apprx_params_train, apprx_params_target):
self.approximator = approximator(n_models=self._n_approximators, prediction='min', **apprx_params_train)
self.target_approximator = approximator(n_models=self._n_approximators, prediction='min',
**apprx_params_target)
self._update_target()
[docs]
def _update_target(self):
self.target_approximator.set_weights(self.approximator.get_weights())