from copy import deepcopy
from mushroom_rl.algorithms.value.dqn import DQN
from mushroom_rl.approximators.parametric import TorchApproximator
from mushroom_rl.approximators.parametric.networks import DuelingNetwork
[docs]
class DuelingDQN(DQN):
"""
Dueling DQN algorithm.
"Dueling Network Architectures for Deep Reinforcement Learning"
Wang Z. et al. 2016.
"""
[docs]
def __init__(self, mdp_info, policy, approximator_params,
avg_advantage=True, **params):
"""
Constructor.
"""
features_network = approximator_params['network']
params['approximator_params'] = deepcopy(approximator_params)
params['approximator_params']['network'] = DuelingNetwork
params['approximator_params']['features_network'] = features_network
params['approximator_params']['avg_advantage'] = avg_advantage
params['approximator_params']['output_dim'] = (mdp_info.action_space.n,)
super().__init__(mdp_info, policy, TorchApproximator, **params)