36 lines
1.5 KiB
Python
36 lines
1.5 KiB
Python
from ray.rllib.algorithms.sac.default_sac_rl_module import DefaultSACRLModule
|
|
from ray.rllib.core.models.configs import MLPHeadConfig
|
|
from ray.rllib.core.rl_module.apis.value_function_api import ValueFunctionAPI
|
|
from ray.rllib.utils.annotations import (
|
|
OverrideToImplementCustomLogic_CallToSuperRecommended,
|
|
override,
|
|
)
|
|
|
|
|
|
class DefaultIQLRLModule(DefaultSACRLModule, ValueFunctionAPI):
|
|
@override(DefaultSACRLModule)
|
|
def setup(self):
|
|
# Setup the `DefaultSACRLModule` to get the catalog.
|
|
super().setup()
|
|
|
|
# Only, if the `RLModule` is used on a `Learner` we build the value network.
|
|
if not self.inference_only:
|
|
# Build the encoder for the value function.
|
|
self.vf_encoder = self.catalog.build_encoder(framework=self.framework)
|
|
|
|
# Build the vf head.
|
|
self.vf = MLPHeadConfig(
|
|
input_dims=self.catalog.latent_dims,
|
|
# Note, we use the same layers as for the policy and Q-network.
|
|
hidden_layer_dims=self.catalog.pi_and_qf_head_hiddens,
|
|
hidden_layer_activation=self.catalog.pi_and_qf_head_activation,
|
|
output_layer_activation="linear",
|
|
output_layer_dim=1,
|
|
).build(framework=self.framework)
|
|
|
|
@override(DefaultSACRLModule)
|
|
@OverrideToImplementCustomLogic_CallToSuperRecommended
|
|
def get_non_inference_attributes(self):
|
|
# Use all of `super`'s attributes and add the value function attributes.
|
|
return super().get_non_inference_attributes() + ["vf_encoder", "vf"]
|