41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
"""Contains example implementation of a custom algorithm.
|
|
|
|
Note: It doesn't include any real use-case functionality; it only serves as an example
|
|
to test the algorithm construction and customization.
|
|
"""
|
|
|
|
from ray.rllib.algorithms import Algorithm, AlgorithmConfig
|
|
from ray.rllib.core.rl_module.rl_module import RLModuleSpec
|
|
from ray.rllib.core.testing.torch.bc_learner import BCTorchLearner
|
|
from ray.rllib.core.testing.torch.bc_module import DiscreteBCTorchModule
|
|
from ray.rllib.policy.torch_policy_v2 import TorchPolicyV2
|
|
from ray.rllib.utils.annotations import override
|
|
from ray.rllib.utils.typing import ResultDict
|
|
|
|
|
|
class BCConfigTest(AlgorithmConfig):
|
|
def __init__(self, algo_class=None):
|
|
super().__init__(algo_class=algo_class or BCAlgorithmTest)
|
|
|
|
def get_default_rl_module_spec(self):
|
|
if self.framework_str == "torch":
|
|
return RLModuleSpec(module_class=DiscreteBCTorchModule)
|
|
|
|
def get_default_learner_class(self):
|
|
if self.framework_str == "torch":
|
|
return BCTorchLearner
|
|
|
|
|
|
class BCAlgorithmTest(Algorithm):
|
|
@classmethod
|
|
def get_default_policy_class(cls, config: AlgorithmConfig):
|
|
if config.framework_str == "torch":
|
|
return TorchPolicyV2
|
|
else:
|
|
raise ValueError("Unknown framework: {}".format(config.framework_str))
|
|
|
|
@override(Algorithm)
|
|
def training_step(self) -> ResultDict:
|
|
# do nothing.
|
|
return {}
|