Quality Diversity Policy Gradient (QDPG)¶
To create an instance of QDPG, one need to use an instance of MAP-Elites with the QDPGEmitter, detailed below.
qdax.core.emitters.qdpg_emitter.QDPGEmitter (MultiEmitter)
¶
Source code in qdax/core/emitters/qdpg_emitter.py
class QDPGEmitter(MultiEmitter):
def __init__(
self,
config: QDPGEmitterConfig,
policy_network: nn.Module,
env: QDEnv,
score_novelty: Callable[[Archive, StateDescriptor], Reward],
) -> None:
self._config = config
self._policy_network = policy_network
self._env = env
# define the quality emitter
q_emitter = QualityPGEmitter(
config=config.qpg_config, policy_network=policy_network, env=env
)
# define the diversity emitter
d_emitter = DiversityPGEmitter(
config=config.dpg_config,
policy_network=policy_network,
env=env,
score_novelty=score_novelty,
)
# define the GA emitter
variation_fn = functools.partial(
isoline_variation, iso_sigma=config.iso_sigma, line_sigma=config.line_sigma
)
ga_emitter = MixingEmitter(
mutation_fn=lambda x, r: (x, r),
variation_fn=variation_fn,
variation_percentage=1.0,
batch_size=config.ga_batch_size,
)
super().__init__(emitters=(q_emitter, d_emitter, ga_emitter))